[Python] 개인과제

yeji·2024년 10월 22일
0

Python

목록 보기
8/36

Q1. 주어진 숫자 리스트의 평균을 계산하는 함수를 작성하세요.

def calculate_avg(numbers):
    total = sum(numbers)
    length = len(numbers)
    total_avg = total/length
    return total_avg
    
numbers = [10, 20, 30, 40, 50]
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)

# 결과  
숫자들의 평균 : 30.0

Q2. 하루 동안 기록된 기온 목록을 받아, 가장 낮은 기온과 가장 높은 기온을 활용하여 일교차를 함수를 작성하세요.

def calculate_diff_temperature(numbers):
    max_temp = max(numbers)
    min_temp = min(numbers)
    diff_temp = max_temp-min_temp   
    return diff_temp

numbers = [10, 20, 30, 40, 50]
diff_temp= calculate_diff_temperature(numbers)
print("일교차:", diff_temp)

# 결과 
일교차: 40

Q3. 제품 명과 판매 수량이 담긴 목록을 받아, 가장 많이 판매된 제품의 이름과 수량을 반환하는 함수를 작성하세요.

최대값 찾는 알고리즘
max_n = 0
for n in range x
if n > max_n:
max_n = n

def find_top_seller(sales_data):
    top_product = max(sales_data, key=sales_data.get)    
    return top_product

sales_data = {"apple": 50, "orange": 2, "banana" : 30}
print(find_top_seller(sales_data)) 

# 결과 
apple

# 강의 풀이
max_value = 0
for key, value

Q4. 두 숫자와 연산자를 입력받아, 해당 연산을 수행하고 결과를 반환하는 함수를 작성하세요.

def simple_calculator(num1, num2, operator):
    if operator == '+':
      return num1 + num2
    elif operator == '-':
      return num1 - num2
    elif operator == '*':
      return num1 * num2
    elif operator == '/':
      if num2 == 0:
        return 'Cannot divide by zero'
      else:
        return num1 / num2

print(simple_calculator(10, 5, '+'))  
print(simple_calculator(10, 5, '-'))  
print(simple_calculator(10, 5, '*'))  
print(simple_calculator(10, 0, '/')) 

# 결과
15
5
50
Cannot divide by zero

Q5. 문자열 형태의 이메일 주소 목록을 분석하여, 각 이메일 주소가 올바른 형식을 갖추고 있는지 판단하는 프로그램을 작성하세요.

  • 올바른 이메일 주소의 형식은 다음과 같습니다:
    • 하나의 '@' 기호를 포함해야 합니다.
    • '@' 기호 앞에는 하나 이상의 문자가 있어야 합니다.
    • '@' 기호 뒤에는 도메인명이 와야 하며, 도메인명은 '.'을 포함한 하나 이상의 문자로 구성되어야 합니다.
  • 올바른 형식의 이메일 주소인 경우, "유효한 이메일 주소입니다."를 출력합니다.
  • 올바르지 않은 형식의 경우, "유효하지 않은 이메일 주소입니다."를 출력합니다.
def validate_emails(email_list):
    collect_email = re.compile(r'^[a-zA-z]+[@]+[a-zA-Z]+\.')
    for email in email_list:
        if re.match(collect_email, email):
           print(f"{email} 유효한 이메일 주소입니다.")
        else:
           print(f"{email} 유효하지 않은 이메일 주소입니다.")

email_list = [
    "example@example.com",
    "wrongemail@com",
    "anotherexample.com",
    "correct@email.co.uk"
]

# 이메일 유효성 검사 실행
validate_emails(email_list)

# 결과
example@example.com 유효한 이메일 주소입니다.
wrongemail@com 유효하지 않은 이메일 주소입니다.
anotherexample.com 유효하지 않은 이메일 주소입니다.
correct@email.co.uk 유효한 이메일 주소입니다.

Q6. 주어진 문자열에서 중복된 문자를 제거하고, 각 문자가 처음 등장한 순서대로 한 번씩만 나타나게 하며, 각 문자가 등장하는 빈도를 함께 출력하는 프로그램을 작성하세요.

  • 주어진 문자열에서 중복된 문자를 제거합니다.
  • 각 문자가 처음 등장한 순서를 유지합니다.
  • 각 문자가 등장하는 빈도를 함께 출력합니다.
  • 결과는 (문자, 빈도수) 형태의 튜플 리스트로 반환합니다.
def remove_duplicates_and_count(s):
    result_with_frequency = {}
    for i in s:
        if i in result_with_frequency:
           result_with_frequency[i] += 1
        else:
           result_with_frequency[i] = 1		
    return list(zip(result_with_frequency.keys(), result_with_frequency.values())) # 튜플 리스트로 변환

# 예시 문자열
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)]

Q7. 선수들의 위치 데이터가 주어졌을 때, 해당 데이터를 분석하여 경기 동안 각 선수가 이동한 총 누적 거리를 계산하는 프로그램을 작성하세요.

  • 유클리드 거리 공식을 사용하여 각 위치 변경 시 이동 거리를 계산합니다.
  • 각 선수별로 경기 동안 이동한 총 누적 거리를 출력합니다.
 # 답이 다름
 def calculate_total_distances(player_positions):
    for i in player_positions:
        a, b = i
        c = 0 
        for l in range(len(b)-1):

          x1= b[l+1][0]
          c += (b[l+1][0] - b[l][0])**2 + (b[l+1][1]-b[l][1])**2
        
        print(f'{a}의 총 누적 이동 거리: {c}미터')

Q8. 영어와 한글이 섞인 숫자들이 문자열 형태로 주어집니다. 이를 아라비아 숫자형태로 바꾸어서 출력하고, 한글로 적인 숫자의 개수, 영어로 적인 숫자의 개수를 차례로 반환하는 함수를 완성해주세요!

  • 영어숫자의 범위 : zero ~ nine
  • 한글숫자의 범위 : 영 ~ 구
  • 입력으로 주어지는 문자의 길이는 1에서 4까지 가질 수 있습니다.
  • 출력값으로 나올 수 있는 정수는 0~9999 입니다

    개수 세는 메커니즘
    number = 0
    for i in [1,2,3,4,5]:
    number += 1

profile
👋🏻

0개의 댓글