데이터분석 6기/본캠프
파이썬 개인 과제
seyeon1130
2025. 3. 11. 16:41
파이썬 개인 과제
문제 1 : 숫자 리스트의 평균을 계산하는 방법
- 전자 상거래 플랫폼에서 고객의 평균 주문을 계산해야 합니다. 이를 위해 숫자 리스트의 평균을 계산하는 방법을 연습합니다.
- 📌 요구 지식: 리스트, 반복문
numbers = [10, 20, 30, 40, 50]
def calculate_avg(numbers):
# 여기에 코드를 작성하세요
len_num =len(numbers)
sum_num = sum(numbers)
total_avg = sum_num/len_num
return total_avg
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)
사실 이렇게 초간단하게 작성했었는데,,,,
요구지식에 반복문이 있는 걸 보고 다시 작성했다,
# 예시 데이터
numbers = [10, 20, 30, 40, 50]
def calculate_avg(numbers):
# 여기에 코드를 작성하세요
len_num =len(numbers)
sum_num=0
for i in numbers :
sum_num+=i
total_avg = sum_num/len_num
return total_avg
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)
그래서 이렇게 고쳤다!
문제 2 : 가장 낮은 기온과 가장 높은 기온을 활용하여 일교차를 함수로 작성
- 기상청에서는 하루 동안의, 가장 높았던 기온과 가장 낮았던 기온을 확인하고 일교차를 보고하고자 합니다.
- 📌 요구 지식: 리스트, min(), max() 함수 사용
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
# 여기에 코드를 작성하세요
min_num = min(numbers)
max_num = max(numbers)
diff_temp = max_num - min_num
return diff_temp
diff_temp = calculate_diff_temperature(numbers)
print("일교차:", diff_temp)
아직까지는 쉽구만
문제 3 : 가장 많이 판매된 제품의 이름과 수량을 반환하는 함수를 작성
- 한 소매점에서는 다양한 제품을 판매하고 있습니다. 매월 판매된 제품들의 목록과 각 제품의 판매 수량이 기록됩니다. 이 데이터를 분석하여 가장 많이 판매된 제품을 찾아내려고 합니다.
- 📌 요구 지식: 딕셔너리, max() 함수 사용
def find_top_seller(sales_data):
# 여기에 코드를 작성하세요
top_product = max(sales_data, key = sales_data.get)
max_sales= sales_data[top_product]
return top_product, max_sales
# 테스트
sales_data = {"apple": 50, "orange": 2, "banana" : 30}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
# 출력 : 가장 많이 판매된 제품과 수량 : ('apple', 50)
max에 딕셔너리 넣으면 value가 아니라 key가 나온 다는 사실!!
value를 기준으로 최대값을 찾으려면 max(딕셔너리, key=딕셔너리.get)
- scores["David"] → KeyError 발생 (없는 key를 조회할 때 오류)
- scores.get("David") → None 반환 (오류 없이 처리 가능)
문제 4 : 사칙연산을 수행할 수 있는 프로그램 구현
- 컴퓨터 과학 수업에서 학생들은 기본적인 프로그래밍 원리를 익히고, 실제 생활에 적용할 수 있는 간단한 프로그램을 만드는 연습을 합니다. 간단한 계산기를 만들어서 사칙연산을 수행할 수 있는 프로그램을 구현하는 것은 기본적인 프로그래밍 실습에 적합합니다.
- 📌 요구 지식: 조건문 (if-elif), 예외 처리 (try-except), 문자열 조작
def simple_calculator(num1, num2, operator):
# 여기에 코드를 작성하세요
try :
if operator == '+':
return num1+num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1*num2
elif operator == '/':
return num1/num2
except Exception as e :
return e
# 테스트
print(simple_calculator(10, 5, '+')) # 출력: 15
print(simple_calculator(10, 5, '-')) # 출력: 5
print(simple_calculator(10, 5, '*')) # 출력: 50
print(simple_calculator(10, 0, '/')) # 출력: 'Cannot divide by zero'
Exception as e 하면 그냥 에러코드 다 나올 수 있음!
문제 5 : 이메일 주소가 올바른 형식을 갖추고 있는지 판단하는 프로그램 구현
- 당신은 회사의 고객 데이터베이스를 관리하고 있습니다. 데이터베이스에 저장된 고객의 이메일 주소가 유효한 형식을 갖추고 있는지 검증하는 작업이 필요합니다.
- 📌 요구 지식: 문자열 조작 (split(), in 연산자), 정규 표현식 활용이메일 주소는 문자열 리스트로 제공됩니다.
- 올바른 이메일 주소의 형식은 다음과 같습니다:
- 하나의 '@' 기호를 포함해야 합니다.
- '@' 기호 앞에는 하나 이상의 문자가 있어야 합니다.
- '@' 기호 뒤에는 도메인명이 와야 하며, 도메인명은 '.'을 포함한 하나 이상의 문자로 구성되어야 합니다.
def validate_emails(email_list):
# 여기에 코드를 작성하세요
for i in email_list :
if ('@' not in i) or (i.count('@') !=1):
print( f'{i} 유효하지 않은 이메일입니다.')
elif (len(i.split('@')[1])<2) or ('.' not in i.split('@')[1]):
print( f'{i} 유효하지 않은 이메일입니다.')
else : print( f'{i} 유효한 이메일입니다.')
# 이메일 목록
email_list = [
"example@example.com",
"wrongemail@com",
"anotherexample.com",
"correct@email.co.uk"
]
# 이메일 유효성 검사 실행
validate_emails(email_list)
배열.count()하면 몇 개 있는지 알 수 있다.
정규 표현식 사용 버전
import re
def validate_emails(email_list):
# 여기에 코드를 작성하세요
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._%+-]+\.[A-Za-z]{2,}$'
for i in email_list:
if re.match(email_pattern,i):
print('유효한 이메일입니다')
else: print('유효하지 않은 이메일입니다')
pass
# 이메일 목록
email_list = [
"example@example.com",
"wrongemail@com",
"anotherexample.com",
"correct@email.co.uk"
]
# 이메일 유효성 검사 실행
validate_emails(email_list)
문제 6 : 각 문자가 등장하는 빈도를 함께 출력하는 프로그램 구현
- 당신은 대규모 텍스트 데이터를 분석하는 프로젝트를 진행하고 있습니다. 텍스트 데이터에서 특정 패턴을 찾아내는 작업을 수행해야 합니다. 이번 작업에서는 중복된 문자를 제거하고 각 문자가 한 번씩만 나타나게 하는 프로그램을 작성하는 것이 목표입니다. 하지만 각 문자는 처음 등장한 순서를 유지해야 하며, 추가적으로 각 문자가 등장하는 빈도를 함께 계산해야 합니다.
- 📌 요구 지식: 딕셔너리, 리스트, 문자열 조작, 반복문
요구사항:
- 주어진 문자열에서 중복된 문자를 제거합니다.
- 각 문자가 처음 등장한 순서를 유지합니다.
- 각 문자가 등장하는 빈도를 함께 출력합니다.
- 결과는 (문자, 빈도수) 형태의 튜플 리스트로 반환합니다.
def remove_duplicates_and_count(s):
result_with_frequency = []
# 여기에 코드 작성
for i in s:
n=0
n = s.count(i)
if (i,n) not in result_with_frequency:
result_with_frequency.append((i,n))
return result_with_frequency # 튜플 리스트로 변환
# 예시 문자열
input_string = "abracadabra123321"
# 중복 문자 제거 및 빈도수 계산 실행
result = remove_duplicates_and_count(input_string)
print(result)
#실행 결과
[('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1), ('1', 2), ('2', 2), ('3', 2)]
문제 7 : 경기 동안 각 선수가 이동한 총 누적 거리를 계산하는 프로그램 구현
- 축구 경기 데이터 분석가로서, 선수들의 위치 데이터를 활용하여 그들의 활동 범위와 이동 효율성을 계산하는 것은 팀 전략을 세우는 데 중요합니다. 선수들의 이동 패턴을 분석하고 이를 통해 그들의 총 누적 이동 거리를 계산하여 선수의 활동량을 평가할 수 있습니다.
- 📌 요구 지식: 리스트, 딕셔너리, 반복문
유클리드 거리공식
mport math
def calculate_total_distances(player_positions):
# 여기에 코드를 작성하세요
string = []
for i , j in player_positions.items():
answer =0
for h in range(len(j)-1):
k, l = j[h]
m, n =j[h+1]
answer += math.sqrt((m-k)**2 + (l-n)**2)
string.append(f'{i}의 총 누적 이동 거리 : {round(answer,2)}미터')
return string
# 선수별 위치 데이터
player_positions = {
"John Doe": [(0, 0), (1, 1), (2, 2), (5, 5)],
"Jane Smith": [(2, 2), (3, 8), (6, 8)],
"Mike Brown": [(0, 0), (3, 4), (6, 8)]
}
# 총 누적 이동 거리 계산 실행
calculate_total_distances(player_positions)
두번째 반복문에 len을 안쓰고 그냥 j로 돌리려니까 안돌아갔었다.
sqrt는 루트 함수,
문제 8 : 언어를 확인하여 암호를 해독하는 프로그램 구현
르탄이가 알려주는 암호는 한글과 영어로 쓰여있는 숫자들을 나열한 것인데 이를 알려주면 여러분이 아라비아 숫자 형태로 바꾸어서 르탄이한테 다시 알려주어야 합니다.
또한 숫자로 바꾸기 전에 한글로 이루어진 숫자가 몇개인지, 영어로 이루어진 숫자가 몇개인지를 함께 알려주어야 합니다.
- 제한사항
- 영어숫자의 범위 : zero ~ nine
- 한글숫자의 범위 : 영 ~ 구
- 입력으로 주어지는 문자의 길이는 1에서 4까지 가질 수 있습니다.
- 출력값으로 나올 수 있는 정수는 0~9999 입니다
- 참고로, 암호로 주어질 수 있는 영어숫자와 한글숫자의 범위는 아래와 같습니다.
def password_decryptor(password_list):
# 여기에 코드를 작성하세요
answer =[]
dic = {'0':['영','zero'],
'1':['일','one'],
'2':['이','two'],
'3':['삼','three'],
'4':['사','four'],
'5':['오','five'],
'6':['육','six'],
'7':['칠','seven'],
'8':['팔','eight'],
'9':['구','nine']}
for i in password_list:
a=i
k=0
e=0
for j,h in dic.items():
if h[0] in i:
i=i.replace(h[0],j)
k+=1
if h[1] in i:
i=i.replace(h[1],j)
e+=1
print(f'{a}에 대한 암호는 {i}로, 한글은 {k}개, 영어는 {e}개 입력되었습니다.')
# 암호 목록
password_list = [
"삼five이사",
"zero오six칠",
"foureight삼구",
"이sevenfour팔",
"nine일이삼"
]
password_decryptor(password_list)