코딩하는 타코야끼

[스터디 노트] Week2_3일차 [unit_40 ~ 52] 본문

zero-base 데이터 취업 스쿨/스터디 노트

[스터디 노트] Week2_3일차 [unit_40 ~ 52]

가스오부시 2023. 7. 15. 00:25
728x90
반응형

1. 중급 문제풀이 1 ~2 [unit 40 ~ 48]


📍 [연습문제] 함수(01)

  • 다음과 같이 출력 될 수 있도록 산술연산 계산기를 함수를 이용해서 만들어 보자.
def cal():
    
    def add(n1, n2):
        print(f"{n1} + {n2} = {n1 + n2}")
        
    def sub(n1, n2):
        print(f"{n1} - {n2} = {n1 - n2}")
    
    def mul(n1, n2):
        print(f"{n1} * {n2} = {n1 * n2}")
    
    def div(n1, n2):
        print(f"{n1} / {n2} = {n1 / n2}")
    
    def rest(n1, n2):
        print(f"{n1} % {n2} = {n1 % n2}")
    
    def share(n1, n2):
        print(f"{n1} // {n2} = {n1 // n2}")
    
    def sqare(n1, n2):
        print(f"{n1} ** {n2} = {n1 ** n2}")
        
        
    cal = int(input("1.덧셈  2.뺄셈  3.곱셈  4.나눗셈  5.나머지  6.몫  7.제곱승  8.종료  "))
    n1 = float(input("첫 번째 숫자 입력: "))
    n2 = float(input("두 번째 숫자 입력: "))
    
    if cal == 1:
        add(n1, n2)
    elif cal == 2:
        sub(n1, n2)
    elif cal == 3:
        mul(n1, n2)
    elif cal == 4:
        div(n1, n2)
    elif cal == 5:
        rest(n1, n2)
    elif cal == 6:
        share(n1, n2)
    elif cal == 7:
        sqare(n1, n2)
    elif cal == 8:
        print("Bye~~")

cal()
>>>
1.덧셈  2.뺄셈  3.곱셈  4.나눗셈  5.나머지  6.몫  7.제곱승  8.종료  4
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3
10.0 / 3.0 = 3.3333333333333335

📍 [연습문제] 함수(02)

  • 다음과 같이 출력 될 수 있도록 이동거리와 이동시간을 반환하는 함수를 만들어 보자.
def get_time(s, d):
    
    result = d / s
    h = int(result)
    m = int((result - h) * 60)
    l = [h, m]
    
    return l
    
s = float(input("속도(km/h) 입력: "))
d = float(input("거리(km) 입력: "))
t = get_time(s, d)
print(f"{s}(km/h)속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분")
>>>
속도(km/h) 입력: 90
거리(km) 입력: 247.5
90.0(km/h)속도로 247.5(km) 이동한 시간: 2(h)시간 45(m)분

📍 [연습문제] 함수(04)

  • 다음과 같이 출력 될 수 있도록 재귀함수를 이용해서 팩토리얼 함수를 만들어보자.
def factorial(n):
    if n <= 1:
        return 1
    else:
        return n * factorial(n - 1)
        
factorial(10)
>>>
3628800

⚡️ 재귀함수란?

  • 자신을 다시 호출하는 함수를 말합니다.
  • 이는 문제를 더 작은 문제로 나누는 방법이며, 문제 해결에 사용되는 전략 중 하나입니다.
  • 재귀 함수를 사용하면 코드가 간결해지고 이해하기 쉬워질 수 있습니다.
  • 그러나 재귀가 너무 깊어지면(즉, 함수 호출이 너무 많아지면) 스택 오버플로우가 발생할 수 있으며, 이는 프로그램의 비정상 종료를 유발할 수 있습니다.

📍 [연습문제] 함수(05)

  • 다음과 같이 출력 될 수 있도록 등차 수열의 n번째 값과 합을 출력하는 함수를 만들어보자
def cal(n1, d, n):
    value_n = 0; sum_n = 0;
    
    i = 1
    while i <= n:
        
        if i == 1:
            value_n = n1
            sum_n += value_n
            print(f"{i}번째 항의 값: {value_n}")
            print(f"{i}번째 항까지의의 핪: {sum_n}")
            
            i += i
            continue
            
        value_n += d
        sum_n += value_n
        print(f"{i}번째 항의 값: {value_n}")
        print(f"{i}번째 항까지의의 핪: {sum_n}")
        
        i += 1

input_n1 = int(input("a1 입력: "))
input_d = int(input("공차 입력: "))
input_n = int(input("n 입력: "))

cal(input_n1, input_d, input_n)
>>>
a1 입력: 2
공차 입력: 3
n 입력: 7
1번째 항의 값: 2
1번째 항까지의의 핪: 2
2번째 항의 값: 5
2번째 항까지의의 핪: 7
3번째 항의 값: 8
3번째 항까지의의 핪: 15
4번째 항의 값: 11
4번째 항까지의의 핪: 26
5번째 항의 값: 14
5번째 항까지의의 핪: 40
6번째 항의 값: 17
6번째 항까지의의 핪: 57
7번째 항의 값: 20
7번째 항까지의의 핪: 77

📍 [연습문제] 함수(06)

  • 다음과 같이 출력 될 수 있도록 등비 수열의 n번째 값과 합을 출력하는 함수를 만들어보자.
a, r, n = input().split()

a = int(a)
r = int(r)
n = int(n)
sum_n = a

print(f"1번째 항의 값: {a}")
print(f"1번째 항까지의 합: {sum_n}")

for i in range(1, n):
    
    a *= r
    sum_n += a
    
    print(f"{i+1}번째 항의 값: {a}")
    print(f"{i+1}번째 항까지의 합: {sum_n}")
>>>
2 3 5
1번째 항의 값: 2
1번째 항까지의 합: 2
2번째 항의 값: 6
2번째 항까지의 합: 8
3번째 항의 값: 18
3번째 항까지의 합: 26
4번째 항의 값: 54
4번째 항까지의 합: 80
5번째 항의 값: 162
5번째 항까지의 합: 242

⚡️ 등비수열과 등차수열

🌓 등차수열

  • 이 수열에서 각 항은 그 이전 항에 일정한 차이(공차)를 더함으로써 얻어집니다.
  • 예를 들어, 2, 4, 6, 8, 10은 공차가 2인 등차수열입니다.
  • 이 경우 n번째 항은 첫 번째 항에 (n-1) * 공차를 더한 값으로 구할 수 있습니다.

🌓  등비수열

  • 이 수열에서 각 항은 바로 앞 항에 일정한 비(공비) 곱함으로써 얻어집니다.
  • 예를 들어, 3, 6, 12, 24, 48은 공비가 2인 등비수열입니다.
  • 이 경우 n번째 항은 첫 번째 항에 공비^(n-1)을 곱한 값으로 구할 수 있습니다.

2. 중급 문제풀이 3 [unit 49 ~ 52]


📍 [연습문제] 모듈(02)

  • 상품 구매 개수에 따라 할인율이 결정되는 모듈을 만들고, 다음과 같이 계산 결과가 출력되는 프로그램을 만들어보자.

[출처: zero-base]

choice_cnt = 0
sum_price = 0

while True:
    choice = int(input("상품을 구매 하시겠어요? 1.구매  2.종료"))
    
    if choice == 1:
        price = int(input("상품 가격 입력: "))
        sum_price += price
        choice_cnt += 1
    elif choice == 2:
        break

discount = min(choice_cnt * 5, 25)
total = sum_price - int(sum_price * (discount / 100))
 
print(f"할인율: {discount}%")
print(f"합계: {total:,}원")
>>>
상품을 구매 하시겠어요? 1.구매  2.종료1
상품 가격 입력: 1000
상품을 구매 하시겠어요? 1.구매  2.종료1
상품 가격 입력: 1500
상품을 구매 하시겠어요? 1.구매  2.종료1
상품 가격 입력: 500
상품을 구매 하시겠어요? 1.구매  2.종료1
상품 가격 입력: 2250
상품을 구매 하시겠어요? 1.구매  2.종료2
할인율: 20%
합계: 4,200원

📍 [연습문제] 모듈(03)

  • 로또 모듈을 만들고 다음과 같이 로또 결과가 출력될 수 있도록 프로그램을 만들어보자.

[출처: zero-base]

import random

# 사용자로부터 6개의 번호를 입력받음
chosen_numbers = [int(input(f"번호(1 ~ 45) 입력: ")) for _ in range(6)]

# 로또 번호 6개와 보너스 번호 1개를 무작위로 생성
lotto_numbers = random.sample(range(1, 46), 7)

# 보너스 번호를 설정하고 로또 번호에서 제거
bonus_number = lotto_numbers.pop()

# 선택한 번호와 로또 번호를 비교하여 일치하는 번호를 찾음
matching_numbers = [num for num in chosen_numbers if num in lotto_numbers]

print("아쉽습니다. 다음 기회에~")
print(f"기계 번호: {sorted(lotto_numbers)}")
print(f"보너스 번호: {bonus_number}")
print(f"선택 번호: {sorted(chosen_numbers)}")
print(f"일치 번호: {sorted(matching_numbers)}")
>>>
번호(1 ~ 45) 입력: 5
번호(1 ~ 45) 입력: 15
번호(1 ~ 45) 입력: 25
번호(1 ~ 45) 입력: 30
번호(1 ~ 45) 입력: 45
번호(1 ~ 45) 입력: 9
아쉽습니다. 다음 기회에~
기계 번호: [6, 13, 23, 30, 37, 42]
보너스 번호: 20
선택 번호: [5, 9, 15, 25, 30, 45]
일치 번호: [30]

📍 [연습문제] 모듈(06)

  • 수입과 공과금을 입력하면 공과금 총액과 수입 대비 공과금 비율을 계산하는 모듈을 만들어보자.

[출처: zero-base]

income = int(input("수입 입력: "))

w_bill = int(input("수도요금 입력: "))
e_bill = int(input("전기요금 입력: "))
g_bill = int(input("가스요금 입력: "))

u_bill = w_bill + e_bill + g_bill
percent = round((u_bill / income) * 100, 2)

print(f"공과금: {u_bill:,}")
print(f"공과금 비율: {percent}%")
>>>
수입 입력: 3000000
수도요금 입력: 15000
전기요금 입력: 17500
가스요금 입력: 125000
공과금: 157,500
공과금 비율: 5.25%

⚡️실습 코드 파일⚡️

w2_3일차 스터디 노트[unit_40 ~ 52].ipynb
1.51MB

반응형