[Python][중급] 연습 문제 _함수_모듈

·2023년 3월 10일
0

[Python] 연습 문제

목록 보기
4/12
post-thumbnail

📌 파이썬 연습문제 [함수]

📋산술연산 계산기 프로그램
def add(n1, n2):
    return print(f'{n1} + {n2} : {n1 + n2}')


def sub(n1, n2):
    return print(f'{n1} - {n2} : {n1 - n2}')


def mul(n1, n2):
    return print(f'{n1} * {n2} : {n1 * n2}')


def div(n1, n2):
    return print(f'{n1} / {n2} : {n1 / n2}')


def mod(n1, n2):
    return print(f'{n1} % {n2} : {n1 % n2}')


def flo(n1, n2):
    return print(f'{n1} // {n2} : {n1 // n2}')


def exp(n1, n2):
    return print(f'{n1} ** {n2} : {n1 ** n2}')


print('-' * 30)

while True:
    operate = int(input('1.덧셈 \t 2.뺄셈 \t 3.곱셈 \t 4.나눗셈 \t 5.나머지 \t 6.몫 \t 7.제곱승 \t 8.종료 : '))
    if operate == 8:
        print('Bye~')
        break

    n1 = float(input('첫 번째 숫자 입력 : '))
    n2 = float(input('두 번째 숫자 입력 : '))

    if operate == 1:
        add(n1, n2)
    elif operate == 2:
        sub(n1, n2)
    elif operate == 3:
        mul(n1, n2)
    elif operate == 4:
        div(n1, n2)
    elif operate == 5:
        mod(n1, n2)
    elif operate == 6:
        flo(n1, n2)
    elif operate == 7:
        exp(n1, n2)
    else:
        print('다시 입력해주세요')
📋이동거리와 이동시간을 반환하는 함수
import math

# def getDistance(s, h, m):
     return s / 60 * m + s * h

 s = float(input('속도(km/h) 입력 : '))
 h = float(input('시간(h) 입력 : '))
 m = float(input('시간(m) 입력 : '))
 d = getDistance(s, h, m)
 print(f'{s}(km/h) 속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리 : {d}(km)')
📋이동거리 이동시간 반환 함수
def getTime(speed, distance):
    time = distance / speed
    hour = int(time)
    min = (time - hour) * 60
    times = [hour, min]
    return times


s = float(input('속도(km/h) 입력 : '))
d = float(input('거리 입력 : '))
t = getTime(s, d)
print(f'{s}(km/h) 속도로 {d}(km) 이동한 시간 : {t[0]}시간 {math.trunc(t[1])}분')
📋 비행기 티켓 영수증 출력 함수
def printTicket(c, i, a, cd, id, ad):
    cp = c * 18000
    dcp = cd * 18000 * 0.5
    ip = i * 25000
    dip = id * 25000 * 0.5
    ap = a * 50000
    dap = ad * 50000 * 0.5
    price = cp + dcp + ip + dip + ap + dap

    print('=' * 30)

    print(f'유아 {c}명 요금 : {int(cp)}')
    print(f'유아 할인 대상 {cd}명 요금 : {int(dcp)}')
    print(f'소아 {i}명 요금 : {int(ip)}')
    print(f'소아 할인 대상 {id}명 요금 : {int(dip)}')
    print(f'성인 {a}명 요금 : {int(ap)}')
    print(f'성인 할인 대상 {ad}명 요금 : {int(dap)}')

    print('=' * 30)

    print(f'Total : {c + i + a + cd + id + ad}')
    print(f'Total Price : {format(int(price), ",")}')

    print('=' * 30)

    return


childPrice = int(input('유아 입력 : '))
disChildPrice = int(input('할인 대상 유아 입력 : '))
infantPrice = int(input('소아 입력 : '))
disInfantPrice = int(input('할인 대상 소아 입력 : '))
adultPrice = int(input('성인 입력 : '))
disAdultPrice = int(input('할인 대상 성인 입력 : '))
printTicket(childPrice, infantPrice, adultPrice, disChildPrice, disInfantPrice, disAdultPrice)
📋 재귀함수를 이용한 팩토리얼

def factorial(n):
    if n > 1:
        return n * factorial(n - 1)
    else:
        return 1


n = int(input('input number : '))
print(f'factorial : {format(factorial(n),",")}')
📋 단리/월복리 계산기 함수

# 단리 계산기
def singleRate(m, t, r):
    yearRate = m * (r * 0.01)
    total = yearRate * t + m
    return format(int(total), ",")


# 월복리 계산기
def multiRate(m, t, r):
    total = m
    for i in range(12 * t):
        total += total * (r / 12 * 0.01)

    return format(int(total), ",")


money = int(input('예치금(월) : '))
term = int(input('기간(년) : '))
rate = int(input('연 이율(%) : '))

print('[단리 계산기]')
print('=' * 15)
print(f'예치금 : {format(money, ",")}')
print(f'예치기간 : {term}')
print(f'연 이율 : {rate}%')
print('-' * 15)
print(f'{term}년 후 총 수령액 : {singleRate(money, term, rate)}')

print('[월복리 계산기]')
print('=' * 15)
print(f'예치금 : {format(money, ",")}')
print(f'예치기간 : {term}')
print(f'연 이율 : {rate}%')
print('-' * 15)
print(f'{term}년 후 총 수령액 : {multiRate(money, term, rate)}')
📋 등차수열 함수
def sequenceFunc(first, step, last):
    val = 0
    sum = 0
    for i in range(last):
        val = first + (step * i)
        sum += val
        print(f'{i + 1}번째 항의 값 : {val}')
        print(f'{i + 1}번째 항까지의 합 : {sum}')

    return


first = int(input('a1 입력 : '))
step = int(input('공차 입력 : '))
last = int(input('n 입력 : '))
sequenceFunc(first, step, last)
📋 등차수열 함수
def sequenceFunc(first, step, last):
    val = first
    sum = 0
    for i in range(last):
        if i != 0:
            val *= step

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

    return


first = int(input('a1 입력 : '))
step = int(input('공차 입력 : '))
last = int(input('n 입력 : '))
sequenceFunc(first, step, last)

📌 파이썬 연습문제 [모듈]

📋 합격 여부 출력 프로그램
💡module

def getResultScore(scoreList):
    total = 0
    result = 'Final Pass'
    for score in scoreList:
        total += score
        if score >= 40:
            print(f'{score} : Pass')
        else:
            print(f'{score} : Fail')
            result = 'Final Fail'

    result = 'Final Fail' if total / len(scoreList) < 60 else result
    print(f'총점 : {total}')
    print(f'평균 : {round(total / len(scoreList), 2)}')
    print(f'결과 : {result}')


-------------------------------------------------------
💡main

import CustomModule.printResult as pr

scoreList = []
for i in range(5):
    score = int(input(f'과목{i + 1} 점수 입력 :'))
    scoreList.append(score)

pr.getResultScore(scoreList)
📋 상품 구매 개수에 따른 할인율 적용 프로그램
💡module

def getDiscount(cnt):
    discount = 0
    if cnt >= 5:
        discount = 25
    elif cnt >= 4:
        discount = 20
    elif cnt >= 3:
        discount = 15
    elif cnt >= 2:
        discount = 10
    elif cnt >= 1:
        discount = 5
    else:
        discount = 0
    return discount


-------------------------------------------------------
💡main

import CustomModule.discount as dc

cnt = 0
sum = 0

while True:
    select = int(input('상품을 구매 하시겠어요? [1] 구매 [2] 종료 : '))
    if select == 2:
        break
    elif select == 1:
        price = int(input('상품 가격 입력 : '))
        sum += price
        cnt += 1
    else:
        print(f'다시 입력하세요')

discount = dc.getDiscount(cnt)
total = sum * (1 - dc.getDiscount(cnt) * 0.01)

print(f'할인율 : {discount}%')
print(f'합계 : {format(int(total), ",")}원')
📋 로또 프로그램
💡module

# TypeError: 'NoneType' object is not iterable

def getLottoResult(numbers: list):
    bonus = random.randint(1, 45)
    lottos: list = []
    # noinspection PyTypeChecker
    # if lottos is None or len(lottos) == 0:
    lottos = list(random.sample(range(1, 46), 6))
    finalList = lottos.copy()
    finalList.append(numbers)

    # for n in numbers:
    #     for lotto in lottos:
    #         if n == lotto:
    #             corrects.append(n)
    corrects = list(set(numbers) & set(lottos))

    if len(corrects) == 6:
        print('1등 당첨')
        print(f'번호 : {corrects}')
    elif len(corrects) == 5 and bonus in numbers:
        print('2등 당첨')
        print(f'번호 : {corrects} 보너스 : {bonus}')
    elif len(corrects) == 5:
        print('3등 당첨')
        print(f'번호 : {corrects}')
    elif len(corrects) == 4:
        print('4등 당첨')
        print(f'번호 : {corrects}')
    elif len(corrects) == 3:
        print('5등 당첨')
        print(f'번호 : {corrects}')
    else:
        print('꽝!')
        print(f'기계 번호 : {lottos}')
        print(f'보너스 번호 : {bonus}')
        print(f'선택 번호 : {numbers}')
        print(f'일치 번호 : {corrects}')

    return


-------------------------------------------------------
💡main

import random
import CustomModule.lotto as lt

numbers = []

for i in range(6):
    n = int(input('번호(1~45) 입력 : '))
    numbers.append(n)

lt.getLottoResult(numbers)
📋 순열 & 조합 계산 프로그램
💡module

from itertools import permutations

from itertools import combinations


def getPermutation(n, r, log=True):
    result = 1
    logs = []
    for i in range(n, n - r, -1):
        print(f'n : {i}')
        result *= i

    print(f'{n}P{r} : {result}')

    if log:
        for i in range(n):
            logs.append(i + 1)
        getPermutaionLog(logs, r)

    return


def getPermutaionLog(logs, r):
    logList = list(permutations(logs, r))
    print(f'{len(logs)}P{r} 개수: {len(logList)}')

    for n in logList:
        print(n, end=', ')

    print()

    return


def getCombination(n, r, log=True):
    resultP = 1
    resultR = 1
    resultC = 1
    rnr = r
    logs = []
    for i in range(n, n - r, -1):
        resultP *= i
        resultR *= rnr
        rnr -= 1

    resultC = int(resultP / resultR)

    print(f'resultP : {resultP}')
    print(f'resultR : {resultR}')
    print(f'resultC : {resultC}')
    print(f'{n}C{r} : {resultC}')

    if log:
        for i in range(n):
            logs.append(i + 1)
        getCombinationLog(logs, r)


def getCombinationLog(logs, r):
    logList = list(combinations(logs, r))
    print(f'{len(logs)}P{r} 개수: {len(logList)}')

    for n in logList:
        print(n, end=', ')

    print()

    return


if __name__ == '__main__':
    n = int(input('numN 입력 : '))
    r = int(input('numR 입력 : '))

    getPermutation(n, r)
    getCombination(n, r)
    
-------------------------------------------------------
💡main

import CustomModule.calculation as cal

if __name__ == '__main__':
    n = int(input('numN 입력 : '))
    r = int(input('numR 입력 : '))

    cal.getPermutation(n, r, False)
    

import CustomModule.calculation as cal

if __name__ == '__main__':
    n = int(input('numN 입력 : '))
    r = int(input('numR 입력 : '))

    cal.getCombination(n, r, False)

📋 공과금 비율 프로그램

💡module

income = 0
water = 0
electric = 0
gas = 0


def setIncome(i):
    global income
    income = i


def getIncome():
    return income


def setWater(w):
    global water
    water = w


def getWater():
    return water


def setElectric(e):
    global electric
    electric = e


def getElectric():
    return electric


def setGas(g):
    global gas
    gas = g


def getGas():
    return gas


def getUtility():
    bill = {}
    utility = getWater() + getElectric() + getGas()
    utilityPercent = round(utility / getIncome() * 100, 2)
    bill.update({'utility': utility})
    bill.update({'utilityPercent': utilityPercent})

    return bill


-------------------------------------------------------
💡main

import CustomModule.bill as bill

i = int(input('수입 입력 : '))
bill.setIncome(i)
w = int(input('수도 요금 입력 : '))
bill.setWater(w)
e = int(input('전기 요금 입력 : '))
bill.setElectric(e)
g = int(input('가스 요금 입력 : '))
bill.setGas(g)

bill = bill.getUtility()
print(f'공과금 : {format(bill.get("utility"), ",")}원')
print(f'공과금  비율 : {bill.get("utilityPercent")}%')
📋 # 연산 계산기 + 넓이 구하기 프로그램
💡basic_operator

def add(n1, n2):
    return n1 + n2


def sub(n1, n2):
    return n1 - n2


def mul(n1, n2):
    return n1 * n2


def div(n1, n2):
    return round(n1 / n2, 2)

💡developer_operator

def mod(n1, n2):
    return n1 % n2


def flo(n1, n2):
    return n1 // n2


def exp(n1, n2):
    return n1 ** n2

💡circle_area

def getCircleArea(radius):
    return round(radius * radius * 3.14, 2)
    
💡triangle_square_area

def getTriangleArea(w, h):
    return round(w * h / 2, 2)


def getSquareArea(w, h):
    return w * h


-------------------------------------------------------
💡main

from arithmetic.basic_operator import *
from arithmetic.developer_operator import *
from shape.triangle_square_area import *
from shape.circle_area import *

n1 = float(input('숫자1 입력 : '))
n2 = float(input('숫자1 입력 : '))
# add
print(f'{n1} + {n2} : {add(n1, n2)}')
print(f'{n1} - {n2} : {sub(n1, n2)}')
print(f'{n1} * {n2} : {mul(n1, n2)}')
print(f'{n1} / {n2} : {div(n1, n2)}')
print(f'{n1} % {n2} : {mod(n1, n2)}')
print(f'{n1} // {n2} : {flo(n1, n2)}')
print(f'{n1} ** {n2} : {exp(n1, n2)}')

w = float(input('가로 입력 : '))
h = float(input('세로 입력 : '))
print(f'삼각형 넓이 : {getTriangleArea(w, h)}')
print(f'사각형 넓이 : {getSquareArea(w, h)}')

r = float(input('반지름 입력 : '))
print(f'원의 넓이 : {getCircleArea(r)}')



후기
순열 & 조합 문제에서 파이썬에서 제공하는 라이브러리가 있는지 모르고 순열 로그를 프린트하는 함수를 구현 시도하다가 머리 깨질뻔했다.. 왠지 너무 어렵더라,, permutation, combination 모듈 외에도 파이썬에서는 여러 유용한 모듈들이 많은것같다. 유용한 모듈
profile
개발하고싶은사람

0개의 댓글