
3일의 연휴를 보내고 다시 시작된 붙캠의 하루...! 오늘은 파이썬 기초 복습과 개인 과제를 수행했는데요(̨̡ ◜𖥦◝)̧̢
오늘은 계속 해왔던 기초 문법들 보다는 과제 풀이과정 위주로 작성해보고자 합니다! 열심히 강의자료 뒤적이며 풀었던..🫠
쉬운것들은 간단하게 넘어가고 제가 많이 고민했던 내용들 위주로 풀어볼게요!
그래도 기초 복습을 여러번 해서인지, 1단계 과제들은 정말 쉽게쉽게 넘어갔어요 (진짜임)
그런 의미로 다들 쉽게 풀어내셨을, Level 1은 제외하고!
제가 정말 많이 헤맸던 서술형,,,, 그 함수가 나온 2번들 위주로 풀이해보려해용
문제 2-1 : 숫자 리스트의 평균을 계산하는 방법
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_avg(numbers):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return total_avg
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)
제시된 문제를 보면, 제가 구해야할 것은 '리스트의 평균'입니다! 간단히 모든 value들의 합을 len으로 나눠주면 되겠죠오~?
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_avg(numbers):
total_avg = sum(numbers) / len(numbers)
return total_avg
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)
아래 print 쪽에 제시된 total_avg를 고대로 가져와서 써줍니다!
여기서 주의할점은 들여쓰기와 return값을 반환해주는것 정도이지 싶어요.
문제 2-2 : 최고 온도와 최저 온도 간 온도차를 구하는 함수 작성
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)
이 문제도 사실은 어렵지 않게 풀었어요. 딱 보자마자 max, min을 사용해야겠구낭
그럼 diff_temp는 numbers 리스트에서 값을 가져와서 작성하면 되겠다!
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
diff_temp = max(numbers) - min(numbers)
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)
문제 2-3 : 특정 개수 이상의 데이터의 합 구하기
def calculate_range_total(production_counts, min_value):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return range_total
# 예시 데이터
production_counts = [100, 150, 120, 130, 110, 180, 140]
range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)
# 실행 결과
특정 수량 이상 생산한 날의 생산 수량 합: 830
그치만 여기서부터 제가 완즈히 말리기 시작합니다...ㅠ 그거 아세요? 문제를 잘 풀려면 문제를 잘 읽어야 한다는거...?
일단 제가 문제를 읽다가 " 일일 생산량 데이터 중 특정 기준(예: 하루 100개 이상)을 만족한 날들의 생산량 합계를 계산" 이라는 부분을 발견했는데요, 저는 제시된 특정 기준이 이거인줄 알고! 코드 아래에 정보는 읽어보지도 않고! 왜 그럴까 혼자 한참 고민했지 뭐예요ㅜㅜㅜ 답이 다르니까...... 역시 사람이 마음이 급해지면 보일 것도 안 보인다고 당신들은 그러지마라
아무튼..! 일단 이 문제를 풀기전 조건들부터 보겠습니다. 우리는 특정 조건을 만족하는 데이터의 합을 구할건데요, 해당 조건은 제시된 코드속에 있어요
이 부분이 보이실까요?! 제일 첫 줄 함수에 떡하니 min_value 값이 있다구용 😵😵😵 휴휴~
사실 모르는 사람은 나밖에 없었을거야....ㅠㅠ
다시 풀이로 돌아가서..
먼저 range_total = 0 이라는 변수를 하나 만들어줘야해요!
왜냐? 우리는 값을 누적하여 계속 담을 곳이 필요하고 그 안의 값들을 다 더해줘야 하니까요!
그리고서는 아주 간단해요 저는 반복문을 간단하게 작성하고, 값이 min_value 보다 클 때 range_total에 담기게 조건을 설정했고 값을 반환하여 출력했습니다!
def calculate_range_total(production_counts, min_value):
range_total = 0
for count in production_counts:
if count >= min_value:
range_total += count
return range_total
# 예시 데이터
production_counts = [100, 150, 120, 130, 110, 180, 140]
range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)
# 실행 결과
# 특정 수량 이상 생산한 날의 생산 수량 합: 830
문제 2-4 : 가장 많이 판매된 제품의 이름과 수량을 반환하는 함수 작성
def find_top_seller(sales_data):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
return top_product, max_sales
# 예시 데이터
sales_data = {
"Motherboard": 50,
"SSD": 2,
"Graphics Card": 30
}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
# 실행 결과
가장 많이 판매된 제품과 수량 : ('Motherboard', 50)
얘도 2-3의 문제와 같이 반복문을 사용해줄건데요!
처음엔 가장 많이 판매된 제품을 찾는 코드이기에, value의 max값을 찾아줘야 하는걸까 고민했습니다..
근데 딕셔너리에서 어떻게 쓰는걸까 생각을 아무리 해봐도 모르겠더라고요... (아예 안되는건 아니지 싶어서 찾아보긴 할 예정입니당ㅎ)
그냥 새로운 도전하지 말고 강의에서 배운 내용으로 써야겠다 했어요..핳하
이 친구도 값을 담아줄 변수가 필요합니다! 근데 2개. 왜?
요 친구는 key-value 쌍으로 되어있기 때문에
max_sales 라는 값에 대한 변수와 top_product라는 키에 대한 변수가 필요합니다아.
다만 top_product는 문자열이 담길 것이기 때문에 ' ' 따옴표까쥐~
for 반복문을 작성할때도 key-value 빠뜨리지 않고 함께 적어줍니다. 그리고 제가 정말 생각치도 못했던...... items()....
이 친구 때문에 얼마나 많은 고민을 했는지요..
이 기본적인 쌍쌍바 친구 때문에 얼마나 많은 고민을 했는지 아십니까....ㅎ
ValueError: too many values to unpack (expected 2)
이건 뭐 거의 과제풀이가 아니라 멍청쇼임ㅠㅠ
그리고 아래에 올 if 문은 쉽다구요 먼저 조건으로 걸어줄 sales > max_sales로 해주고
해당 구문이 true이면 max_sales에 담는겁니다.
이렇게 조건을 걸어주었으니 product는 그냥 받아주면(?) 되겠죠?!
def find_top_seller(sales_data):
max_sales = 0
top_product = ''
for product, sales in sales_data.items():
if sales > max_sales:
max_sales = sales
top_product = product
return top_product, max_sales
# 예시 데이터
sales_data = {
"Motherboard": 50,
"SSD": 2,
"Graphics Card": 30
}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
# 실행 결과
# 가장 많이 판매된 제품과 수량 : ('Motherboard', 50)
문제 2-5 : 공정 데이터에서 짝수 품번 필터링하기 (List Comprehension 활용)
제가 이 친구 때문에 리스트 컴프리헨션 복습하고 왔다구요! 어렵진 않지만! 기본적인 구조가 숙지가 되어있지 않아서
강의자료들 컨닝하고왔어요 ㅎㅎ
근데 사실 강의자료 읽어보지 않아도 기본적인 구조가 다 잡혀있는 힌트를 주셨기 때문에! 어렵지 않게 작성할 수 있었으므로 바로 제가 작성한 코드를 올리겠어요~
# [문제 설명]
# 다음 코드는 리스트 컴프리헨션을 사용하여 짝수만 추출한 새로운 리스트를 만드는 코드
# 아래 빈칸을 채워 코드를 완성하세요.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [
num # 리스트에 담을 요소
for num in numbers
if num % 2 == 0 # 짝수 조건
]
print(even_numbers)
문제 3-1 : 무게 데이터 단위 표준화
진짜가 왔다. 제가 오늘 하루 대부분의 시간을 투자한 친구입니다. 이친구 덕분에 문자열 정수 실수 와리가리 마스터 했달까?
요 친구는 권위있게 문제의 배경부터 요구사항까지 전부 첨부할게요
배경
당신은 제조 공장의 품질 데이터 분석 담당자입니다.
공정 품질 검사 결과로 저장되는 제품 무게 데이터는 작업자의 입력 방식에 따라
일부는 "kg", 일부는 "g" 단위로 기록되어 데이터 정합성 문제를 유발하고 있습니다.
정확한 품질 분석과 생산 통계 처리를 위해,
모든 무게 데이터를 하나의 기준 단위(g) 로 통일해야 합니다.
목표
모든 값을 g 단위로 출력하는 프로그램을 작성하세요.
요구사항
입력은 문자열 리스트 형태입니다.예: ["0.5kg", "500g", "1kg", "750g", "2kg"]
각 문자열의 단위는 kg 또는 g로 끝나며,
"kg"인 경우: 1000을 곱하여 g로 변환
"g"인 경우: 단위를 제거하고 숫자만 사용
def normalize_weights(weight_list):
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
# 여기에 코드를 작성하세요
# 제품 무게 리스트
weight_list = ["0.5kg", "500g", "1kg", "750g", "2kg"]
# 단위 통일 실행
normalize_weights(weight_list)
처음 이 친구를 봤을 땐 말이죠, 그리 어렵지 않을거라 생각했어여 뭐 kg만 삭제하고 1000곱하고 다시 g 붙여주면 되는거 아냐~
라고 호기롭게 시작했습니다.
그러나 제가 간과했던것은 정수.. 실수.. 문자열.. 휴^^~
그치만 막상 최종코드 보면 음 그렇구나 하게되는 아주 사악한 친구라구요..!
좀 편하게 먼저 최종코드를 올려두고 차근차근히 설명해볼게요
def normalize_weights(weight_list):
for i in range(len(weight_list)):
if 'kg' in weight_list[i]:
weight_list[i] = weight_list[i].replace('kg', '')
weight_list[i] = str(int(float(weight_list[i]) * 1000)) + 'g'
elif 'g' in weight_list[i]:
weight_list[i] = weight_list[i].replace('g', '')
weight_list[i] = str(int(float(weight_list[i]))) + 'g'
return weight_list
# 제품 무게 리스트
weight_list = ["0.5kg", "500g", "1kg", "750g", "2kg"]
# 단위 통일 실행
normalize_weights(weight_list)
print(normalize_weights(weight_list))
먼저 for 구문에 적어준 range(len(weight_list))는 저도 한참 고민한 부분인데요..
처음에는 range(weight_list)를 넣었더니
'list' object cannot be interpreted as an integer
라는 오류가 뜨지 않겠어요? weight_list는 정수가 아니기 때문에 인식할 수 없다..? 정도로 해석해보니 그럼 범위를 len 즉 리스트 안의 값의 개수만큼 지정해야지 했어요 그러면 숫자니까요!
사실 처음엔 4를 넣었는데 그럼 해당 리스트에 값이 추가되었을 때 이 구문을 또 수정해줘야 하니까
나름 머리써서 len을 넣어줘씀니다 ㅎ
그리고 다음은 어렵지 않아요 저는 i 라는 친구를 썼기 때문에 새 리스트를 만들지 않았고, 결과적으로 코드가 보다 복잡해 보이는 결과를 낳았는데요........
사실 크게 다르진 않습니다!!
먼저 if조건으로 'kg'이 포함된 값들에서 이를 지워주고요!
다음이 중요합니다. 우리는 소수점 친구들을 포함하여 이 값들에 1000을 곱해줄거란말이지요?
근데 이게 뭐 어떻게 되어있는건지 0.5kg 친구 때문에 자꾸 오류가 나더라고요.. float으로 설정해주지 않아서 그랬던....
그래서 해당 코드줄은 이렇습니다!
제가 새롭게 만든 weight_list[i] 에 1000을 곱한 값을 실수로 받고, 저는 소수점 아래 00자리들이 나오는게 싫어서 임의로 정수로 다시 변환해준 후 마지막 무게 단위인 'g'을 붙이기 위해 문자열로 마지막 변환 작업을 해주었습니다~!
원래 'g' 단위로 되어있던 친구들은 사실 건들지 않아도 결과는 똑같은데, 요구사항에서 단위를 제거하고 숫자만 사용하라고 되어있길래 같은 작업을 거쳐주었습니다!
사실 두 문제가 더 남았는데 제가 배우지 않은 내용들이 나와서 저는 도저히 엄두가 안 나더라구요 ㅠ^ㅠ
그래서 저의 개인과제 풀이는 여기까쥐.... 3일 연휴를 끝내고 와서 이정도면 열공했다!
오늘은 이렇게 마무리하고 저는 이만 물회를 저녁으로 먹으러 가보겠습니다 ㅎㅎㅎㅎ 홓호