파이썬 기초 연습문제 2

BlackLabel·2023년 9월 11일
0

파이썬 문제풀이

목록 보기
2/3

연습문제 #1

  • 산술연산 계산기를 함수를 이용해서 만들어 보자
def add(a,b):
    return a + b
def sub(a,b):
    return a - b
def mul(a,b):
    return a * b
def div(a,b):
    return a / b
def mod(a,b):
    return a % b
def flo(a,b):
    return a // b
def exp(a,b):
    return a ** b

while True:
    inputNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈,'
                         ' 5.나머지, 6.몫, 7.제곱승, 8. 종료' ))
    if inputNum == 8 :
        print('Bye~')
        break
    a = float(input('첫번째 숫자 입력: '))
    b = float(input('두번째 숫자 입력: '))

    if inputNum == 1 :
        print('{} + {} = {}'.format(a, b, add(a,b)))
    elif inputNum == 2 :
        print('{} - {} = {}'.format(a, b, sub(a,b)))
    elif inputNum == 3 :
        print('{} * {} = {}'.format(a, b, mul(a,b)))
    elif inputNum == 4 :
        print('{} / {} = {}'.format(a, b, div(a,b)))
    elif inputNum == 5 :
        print('{} % {} = {}'.format(a, b, mod(a,b)))
    elif inputNum == 6 :
        print('{} // {} = {}'.format(a, b, flo(a,b)))
    elif inputNum == 7 :
        print('{} ** {} = {}'.format(a, b, exp(a,b)))
    else:
        print('다시 입력하시오')
        
#출력값
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6., 7.제곱승, 8. 종료 7
첫번째 숫자 입력: 5
두번째 숫자 입력: 3.1
5.0 ** 3.1 = 146.8273678860024

연습문제 #2

  • 이동거리와 이동시간을 반환하는 함수를 만들어 보자
s = float(input('속도(km/h) 입력: '))
h = float(input('시간(h) 입력: '))
m = float(input('시간(m) 입력: '))

def distance(s, h, m):
    result = s * (h + (m / 60))
    return result
print('{}(km/h) 속도로 {}(h)시간 {}(m)분 동안 이동한거리 : {}'.format(s, h, m, distance(s,h,m)))

#출력값
속도(km/h) 입력: 120
시간(h) 입력: 2
시간(m) 입력: 45
120.0(km/h) 속도로 2.0(h)시간 45.0(m)분 동안 이동한거리 : 330.0

연습문제 #3

  • 비행기 티켓 영수증 출력 함수를 만들어보자
def add(a, b, c):
    return a + b + c
def mul(a, b):
    return a * b

childPrice = 18000
infantPrice = 25000
adultPrice = 50000
sale = 50
child = int(input('유아 입력: '))
childSale = int(input('할인대상 유아 입력: '))
infant = int(input('소아 입력: '))
infantSale = int(input('할인대상 소아 입력: '))
adult = int(input('성인 입력: '))
adultSale = int(input('할인대상 성인 입력: '))


print('유아 {}명 요금: {}'.format(child, mul(child,mul(child,childPrice))))
print('유아 할인 대상 {}명 요금: {}'.format(childSale,mul(childSale,childPrice/sale)))
print('소아 {}명 요금: {}'.format(infant, mul(infant,mul(infant,infantPrice))))
print('소아 할인 대상 {}명 요금: {}'.format(infantSale,mul(infantSale,childPrice/sale)))
print('성인 {}명 요금: {}'.format(adult, mul(adult,mul(adult,adultPrice))))
print('성인 할인 대상 {}명 요금: {}'.format(adultSale,mul(adultSale,adultPrice/sale)))
print('Total: {}명'.format(add(child, infant, adult)))
totalPrice = mul(child,childPrice)
print('TotalPrice : {}'.format((mul(child,mul(child,childPrice))-mul(childSale,childPrice/sale))
                                 +(mul(infant,mul(infant,infantPrice))-mul(adult,mul(adult,adultPrice))
                                                                         +(mul(adult,mul(adult,adultPrice))
                                                                              -mul(adultSale,adultPrice/sale)))

고칠점

단순히 연산함수로 하다가 복잡하게 해서 시간을 다 잡아먹었다.
함수를 만드는 의미를 생각도 못하고 생각없이 만든 것 같다.
다음부턴 함수의 존재 의미를 생각하고 더 간단하고 재사용 가능하게끔 만들어야겠다.

모범답안

childPrice = 18000
infantPrice = 25000
adultPrice = 50000
saleNum = 50


def airpalneReceipt(c1, c2, i1, i2, a1, a2):
    cp = c1 * childPrice
    cpDc = int(c2 * childPrice * 0.5)
    print('유아 {}명 요금: {}원 '.format(c1, cp))
    print('유아 할인대상 {}명 요금: {}원'.format(c2, cpDc))
    ip = i1 * infantPrice
    ipDc = int(i2 * infantPrice * 0.5)
    print('소아 {}명 요금: {}원 '.format(i1, ip))
    print('소아 할인대상 {}명 요금: {}원'.format(i2, ipDc))
    ap = a1 * adultPrice
    apDc = int(a2 * adultPrice * 0.5)
    print('성인 {}명 요금: {}원 '.format(a1, ap))
    print('성인 할인대상 {}명 요금: {}원'.format(a2, apDc))

    print('Total: {}명'.format(c1 + c2 + i1 + i2 + a1 + a2))
    print('TotalPrice: {}원'.format(cp + cpDc + ip + ipDc + ap + apDc))

childCnt = int(input('유아 입력: '))
specialChildCnt = int(input('할인대상 유아 입력: '))
infantCnt = int(input('소아 입력: '))
specialInfantCnt = int(input('할인대상 소아 입력: '))
adultCnt = int(input('성인 입력: '))
specialAdultCnt = int(input('할인대상 성인 입력: '))

airpalneReceipt(childCnt, specialChildCnt, infantCnt, specialInfantCnt,
                adultCnt, specialAdultCnt)
                
#출력값
유아 입력: 1
할인대상 유아 입력: 1
소아 입력: 2
할인대상 소아 입력: 1
성인 입력: 2
할인대상 성인 입력: 0
유아 1명 요금: 18000원 
유아 할인대상 1명 요금: 9000원
소아 2명 요금: 50000원 
소아 할인대상 1명 요금: 12500원
성인 2명 요금: 100000원 
성인 할인대상 0명 요금: 0원
Total: 7명
TotalPrice: 189500

연습문제 #4

  • 단리/월복리 계산기 함수를 만들어보자
def formated(n):
    return format(n,',')
def basic_RateCalculator(m,y,r): #단리 계산기 
    rateMoney = 0
    totalMoney = 0
    for i in range(y):
        rateMoney += m * (r * 0.01)
    totalMoney = m + rateMoney
    return totalMoney
def month_RateCalculator(m, y, r): #월복리 계산기 
    y = y * 12
    month_rateMoney = (r / 12) * 0.01
    totalMoney = m
    for i in range(y):
        totalMoney += totalMoney * month_rateMoney
    return totalMoney
deposit = int(input(f'예치금(원):'))
year = int(input(f'기간(년):'))
rate = float(input(f'연 이율(%):'))
print(f'[단리 계산기]')
print('='*50)
print(f'예치금: {deposit}원 ')
print(f'예치기간 : {year}년')
print(f'연 이율: {rate}%')
print('-'*50)
print(f'{year}년 후 총 수령액:{formated(int(basic_RateCalculator(deposit,year,rate)))}원')
print('=' * 50)
print(f'[월복리 계산기]')
print('=' * 50)
print(f'예치금: {deposit}원 ')
print(f'예치기간 : {year}년')
print(f'연 이율: {rate}%')
print('-' * 50)
print(f'3년 후 총 수령액:{formated(int(month_RateCalculator(deposit,year,rate)))}원')
print('=' * 50)

#출력값
예치금(): 10000000
기간(): 3
연 이율(%): 3
[단리 계산기]
==================================================
예치금: 10000000원 
예치기간 : 3년
연 이율: 3.0%
--------------------------------------------------
3년 후 총 수령액:10,900,000==================================================
[월복리 계산기]
==================================================
예치금: 10000000원 
예치기간 : 3년
연 이율: 3.0%
--------------------------------------------------
3년 후 총 수령액:10,940,514==================================================

연습문제 #5

  • 등차 수열의 n번째 값과 합을 출력하는 함수를 만들어보자
def sequence(n1, d, n):
    valueN = 0; sumN = 0;

    i = 1
    while i <= n:
        if i == 1:
            valueN = n1
            sumN += valueN
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')
            i += 1
            continue

        valueN += d
        sumN += valueN
        print(f'{i}번째 항의 값: {valueN}')
        print(f'{i}번째 항까지의 합: {sumN}')
        i += 1

inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

sequence(inputN1, inputD, inputN)

#출력겂
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

연습문제 #6

  • 다음과 같이 출력 될 수 있도록 등비 수열의 n번째 값과 합을 출력하는 함수를 만들어보자
def sequence(n1, r, n):
    valueN = 0; sumN = 0

    i = 1
    while i <= n:

        if i == 1:
            valueN = n1
            sumN = valueN
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 값: {sumN}')

            i += 1
            continue

        valueN *= r
        sumN += valueN
        print(f'{i}번째 항의 값: {valueN}')
        print(f'{i}번째 항까지의 값: {sumN}')
        i += 1

inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))

연습문제 #7

  • 과목별 점수를 입력하면 합격 여부를 출력하는 모듈을 만들어보자.
    (평균 60이상 합격, 과락 40으로 한다.)

  • 모듈 만들기(모듈명: test)

def examResult(s1,s2,s3,s4,s5):
    avgScoreLimit = 60
    limitScore = 40
    def totalScore():
        total = s1+s2+s3+s4+s5
        print(f'총점: {total}')
        return total
    def avgScore():
        avg = totalScore() / 5
        print(f'평균: {avg}')
        return avg
    def sub_PassOrFail():
        print(f'{s1} : Pass' if s1 >= limitScore else (f'{s1} : Fail'))
        print(f'{s2} : Pass' if s2 >= limitScore else (f'{s2} : Fail'))
        print(f'{s3} : Pass' if s3 >= limitScore else (f'{s3} : Fail'))
        print(f'{s4} : Pass' if s4 >= limitScore else (f'{s4} : Fail'))
        print(f'{s5} : Pass' if s5 >= limitScore else (f'{s5} : Fail'))
    def final_PassOrFail():
        if avgScore() >= avgScoreLimit:
            if s1>=40 and s2>=40 and s3>=40 and s4>=40 and s5>=40:
                print('Final Pass!')
            else:
                print('Final Fail!')
        else:
            print('Final Fail')
    sub_PassOrFail()
    final_PassOrFail()

모듈을 만들고 내용을 입력하면 함수부분에서 다뤘던것처럼 동일하게 함수부를 작성하고 맨아래 실행까지 완벽하게 작성한다.

  • 실행부 만들기 (test 모듈)
import test as t
if __name__ == '__main__':
    sub1 = int(input('과목1 점수 입력:'))
    sub2 = int(input('과목2 점수 입력:'))
    sub3 = int(input('과목3 점수 입력:'))
    sub4 = int(input('과목4 점수 입력:'))
    sub5 = int(input('과목5 점수 입력:'))
    t.examResult(sub1,sub2,sub3,sub4,sub5)
#실행결과 
과목1 점수 입력:100
과목2 점수 입력:100
과목3 점수 입력:80
과목4 점수 입력:90
과목5 점수 입력:70
100 : Pass
100 : Pass
80 : Pass
90 : Pass
70 : Pass
총점: 440
평균: 88.0
Final Pass!

연습문제 #8

  • 상품 구매 개수에 따라 힐인율이 결정되는 모듈을 만들어 출력되는 프로그램을 만들어보자

  • 모듈 만들기(모듈 이름은 test)
def totalGoodsPrice(bags):
    if len(bags) < 0: #장바구니에 담긴 상품이 하나도 없다면
        print('구매상품이 없습니다') #구매 상품 없다고 출력
        return #return 의 또다른 기능은 문장의 '종료' 기능
    rate = 25 #최대 할인률은 25%
    totalPrice = 0 #장바구니에 담긴 합계 가격을 우선 0 으로 기준 잡음
    rates = {1:5,2:10,3:15,4:20}
    if len(bags) in rates: #위 할인율 튜플에서 장바구니안 상품의 갯수가 있다면
        rate = rates[len(bags)] # 할인율을 결정하자
    for goods in bags: #장바구니안의 상품을 하나씩 꺼내어
        totalPrice += goods * (1- rate * 0.01) #상품의 할인가를 구해 for문을 돌려 계속 더해주자.
        return(rate, int(totalPrice)) #할인율과 상품합계가격을 반환함
  • 실행부 만들기
import test as t
if __name__ == '__main__': #전역변수 실행
    flag = True
    bags = []  # 장바구니 비워두기
    while flag:
        selectNum = int(input('상품을 구매 하시겠어요? 1.구매 2.종료:'))
        if selectNum == 1:
            goodsPrice = int(input('상품 가격을 입력하세요:'))
            bags.append(goodsPrice) # 입력한 상품 가격을 장바구니에 집어넣기
        elif selectNum == 2:
            result = t.totalGoodsPrice(bags)
            flag = False
    print(f'할인율:{result[0]}')
    print(f'합계:{result[1]}')

연습문제 #9

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

  • 모듈 만들기(모듈 이름은 test)

import random

userNums = []; randNums = []; collNums = []
bonusNum = 0

def setUserNums(ns):
    global userNums
    userNums = ns

def getUserNums():
    return userNums

def setRandomNums():
    global randNums
    randNums = random.sample(range(1, 46),6)

def setBonusNum():
    global bonusNum

    while True:
        bonusNum = random.randint(1,45)
        if bonusNum not in randNums:
            break

def getBonusNum():
    return bonusNum

def lottoResult():
    global userNums
    global collNums

    collNums = []
    for i in userNums:
        if i in randNums:
            collNums.append(i)
    if len(collNums) == 6:
        print('1등 당첨!')
        print(f'번호: {collNums}')
    elif (len(collNums) == 5) and (bonusNum in userNums):
        print('2등 당첨!')
        print(f'번호: {collNums}, 보너스 번호: {bonusNum}')
    elif len(collNums) == 4:
        print('3등 당첨!')
        print(f'번호: {collNums}, 보너스 번호: {bonusNum}')
    elif len(collNums) == 3:
        print('4등 당첨!')
        print(f'번호: {collNums}, 보너스 번호: {bonusNum}')
    else:
        print('아쉽습니다. 다음 기회에~')
        print(f'기계 번호: {randNums}')
        print(f'보너스 번호: {bonusNum}')
        print(f'선택 번호: {userNums}')
        print(f'일치 번호: {collNums}')
def startLotto():
    n1 = int(input('번호(1~45) 입력: '))
    n2 = int(input('번호(1~45) 입력: '))
    n3 = int(input('번호(1~45) 입력: '))
    n4 = int(input('번호(1~45) 입력: '))
    n5 = int(input('번호(1~45) 입력: '))
    n6 = int(input('번호(1~45) 입력: '))

    selectNums = [n1, n2, n3, n4, n5, n6]

    setUserNums(selectNums)
    setRandomNums()
    setBonusNum()

    lottoResult()
import test as lt

lt.startLotto()

#출력값
번호(1~45) 입력: 4
번호(1~45) 입력: 16
번호(1~45) 입력: 27
번호(1~45) 입력: 39
번호(1~45) 입력: 40
번호(1~45) 입력: 18
아쉽습니다. 다음 기회에~
기계 번호: [11, 1, 43, 10, 31, 12]
보너스 번호: 26
선택 번호: [4, 16, 27, 39, 40, 18]
일치 번호: []

연습문제 #10

profile
+database

0개의 댓글