제로베이스 데이터취업스쿨 DAY7 파이썬 중급8~9, 중급문제풀이1~2

NAYOUNG KIM·2023년 3월 13일
0

제로베이스 교육

목록 보기
7/54
post-thumbnail


# 1.사용자 예외 클래스
class PasswordLengthShortException(Exception):
    def __init__(self):
        super().__init__('길이 5 미만!!')

class PasswordLengthLongException(Exception):
    def __init__(self):
        super().__init__('길이 10 초과!!')

class PasswordWrongException(Exception):
    def __init__(self):
        super().__init__('잘못된 비밀번호!!')

adminPassword = 'admin1234'
tryPassword = input('input admin password:')

try:
    if len(tryPassword) < 5:
        raise PasswordLengthShortException()
    elif len(tryPassword) > 10:
        raise PasswordLengthLongException()
    elif tryPassword != adminPassword:
        raise PasswordWrongException()
    elif tryPassword == adminPassword:
        print('빙고!')
except PasswordLengthShortException as e1:
    print(e1)
except PasswordLengthLongException as e2:
    print(e2)
except PasswordWrongException as e3:
    print(e3)
# 2.소수만 메모장에 입력하기
uri = '/Users/nayoung/Desktop/pythonTxt/'
def writePrimeNum(n):
    file = open(uri+'primeNumber.txt', 'a')
    file.write(str(n))
    file.write('\n')
    file.close()

inputNumber = int(input('1보다 큰 정수:'))
for number in range(2,inputNumber +1):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break
    if flag:
        writePrimeNum(number)
# 3.딕셔너리, 리스트 메모장에 입력
uri = '/Users/nayoung/Desktop/pythonTxt/'
scoreDic = {'kor':85, 'eng':90, 'mat':100 }

for key in scoreDic.keys():
    with open(uri + 'scoreDic.txt', 'a') as f:
        f.write(key + '\t:' + str(scoreDic[key]) + '\n')
        # print(scoreDic, file=f) 딕셔너리 모양 그대로 입력
# 4.메모장 딕셔너리 읽기
uri = '/Users/nayoung/Desktop/pythonTxt/'
scoreDic = {}

with open(uri + 'scoreDic.txt', 'r') as f:
    line = f.readline()
    while line != '':
        tempList = line.split(':')
        scoreDic[tempList[0].strip('\t')] = int(tempList[1].strip('\n'))
        line = f.readline()   # 작성해야 다음 줄을 읽을 수 있음
print(f'scoreDic : {scoreDic}')

중급문제풀이

  1. 함수 - 계산기
def add(num1, num2):
    return num1+num2
def sub(num1, num2):
    return num1-num2
def mul(num1, num2):
    return num1*num2
def div(num1, num2):
    result = num1/num2
    return round(result , 2)
def mod(num1, num2):
    return num1%num2
def flo(num1, num2):
    return num1//num2
def exp(num1, num2):
    return num1**num2

while True:
    print('-' * 30)
    num1 = float(input('첫 번째 숫자:'))
    num2 = float(input('두 번째 숫자:'))
    print('1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 5.나머지 6.몫 7.제곱 8.종료')
    selectNum = int(input('번호 선택:'))


    if selectNum == 1:
        print(f'{num1} + {num2} = {add(num1, num2)}')
    elif selectNum == 2:
        print(f'{num1} - {num2} = {sub(num1, num2)}')
    elif selectNum == 3:
        print(f'{num1} * {num2} = {mul(num1, num2)}')
    elif selectNum == 4:
        print(f'{num1} / {num2} = {div(num1, num2)}')
    elif selectNum == 5:
        print(f'{num1} % {num2} = {mod(num1, num2)}')
    elif selectNum == 6:
        print(f'{num1} // {num2} = {flo(num1, num2)}')
    elif selectNum == 7:
        print(f'{num1} ** {num2} = {exp(num1, num2)}')
    elif selectNum == 8:
        print('종료합니다.')
        break
    else:
        print('잘못 입력했습니다.')
print('-'*30)
  1. 함수 - 이동거리, 이동시간 반환
def getDistance(s,h,m):
    distance = (h + m/60) * s
    return distance

def getTimes(s,d):
    t = d/s
    h = int(t)
    m = int((t-h) * 100 * 60 / 100)
    return [h,m]

print('-'*60)
s = float(input('속도(km/h):'))
h = int(input('시간(h):'))
m = int(input('시간(m):'))
d = getDistance(s,h,m)
print(f'{s}(km/h)속도로 {h}시간 {m}분 동안 이동한 거리 : {d}(km)')
print('-'*60)

print('-'*60)
s = float(input('속도(km/h):'))
d = float(input('거리(km/h):'))
t = getTimes(s,d)
print(f'{s}(km/h)속도로 {d}(km) 이동한 시간 : {t[0]}시간 {t[1]}(m)분')
print('-'*60)
  1. 함수 - 영수증
childPrice = 18000
infantPrice = 25000
adultPrice = 50000
specialDC = 0.5

def formatedNumber(n):
    return format(n, ',')

def printAirplaneReceipt(c1,c2,i1,i2,a1,a2):
    print('=' * 50)
    cp = c1 * childPrice
    cp_dc = int(c2 * childPrice * specialDC)

    ip = i1 * infantPrice
    ip_dc = int(i2 * infantPrice * specialDC)

    ap = a1 * adultPrice
    ap_dc = int(a2 * adultPrice * specialDC)

    print(f'유아 {c1}명 요금: {formatedNumber(cp)}원')
    print(f'유아 할인 대상 {c2}명 요금: {formatedNumber(cp_dc)}원')
    print(f'소아 {i1}명 요금: {formatedNumber(ip)}원')
    print(f'소아 할인 대상 {i2}명 요금: {formatedNumber(ip_dc)}원')
    print(f'성인 {a1}명 요금: {formatedNumber(ap)}원')
    print(f'성인 할인 대상 {a2}명 요금: {formatedNumber(ap_dc)}원')
    print('=' * 50)
    total = c1+c2+i1+i2+a1+a2
    totalPrice = cp+cp_dc+ip+ip_dc+ap+ap_dc
    print('total:{}명'.format(total))
    print('total price:{}원'.format(formatedNumber(totalPrice)))
    print('=' * 50)

c1 = int(input('유아:'))
c2 = int(input('할인 대상 유아:'))
i1 = int(input('소아:'))
i2 = int(input('할인 대상 소아:'))
a1 = int(input('성인:'))
a2 = int(input('할인 대상 성인:'))
printAirplaneReceipt(c1,c2,i1,i2,a1,a2)
  1. 함수 - 단리/월복리 계산기
def formattedNum(n):
    return format(n,',')

#단리
def simpleInterest(m, y, p):
    totalMoney=0; totalRateMoney=0
    for i in range(y):
        totalRateMoney += m * (p*0.01)
    totalMoney = m + totalRateMoney
    return formattedNum(int(totalMoney))

#월복리
def multiInterest(m, y, p):
    totalMoney = 0; totalRateMoney = 0
    y = y*12
    rpm = (p/12) * 0.01

    totalMoney = m
    for i in range(y):
        totalMoney += totalMoney*rpm
    return formattedNum(int(totalMoney))

inputMoney = int(input('예치금(원):'))
years = int(input('기간(년):'))
yearPercentage = int(input('연 이율(%):'))

print('='*30)
print(f'예치금\t:{formattedNum(inputMoney)}원')
print(f'예치기간\t:{years}년')
print(f'연 이율\t:{yearPercentage}%')
print('='*30)
print('[단리 계산기]')
print(f'{years}년 후 총 수령액:{simpleInterest(inputMoney, years, yearPercentage)}원')
print('='*30)
print('[복리 계산기]')
print(f'{years}년 후 총 수령액:{multiInterest(inputMoney, years, yearPercentage)}원')
print('='*30)
  1. 함수 - 등차수열
a1 = int(input('a1: '))
nd = int(input('공차: '))
an = int(input('an: '))

valueN = 0; sumN = 0
for i in range(1, an+1):
    if i==1:
        valueN = a1
        sumN = valueN
        print(f'{i}번째 항의 값 : {valueN}, 합 : {sumN}')
        continue
    valueN += nd
    sumN += valueN
    print(f'{i}번째 항의 값 : {valueN}, 합 : {sumN}')
  1. 함수 - 등비수열
a1 = int(input('a1: '))
nr = int(input('공비: '))
an = int(input('an: '))

valueN = 0; sumN = 0
for i in range(1, an+1):
    if i==1:
        valueN = a1
        sumN = valueN
        print(f'{i}번째 항의 값 : {valueN}, 합 : {sumN}')
        continue
    valueN *= nr
    sumN += valueN
    print(f'{i}번째 항의 값 : {valueN}, 합 : {sumN}')
  1. 모듈 - 과목 합격 여부
def checkScores(s1,s2,s3):
    passAvgScore=60; limitScore=40

    def getTotalScores():
        total = s1+s2+s3
        print('-'*30)
        print(f'총점:{total}')
        return total

    def getAverage():
        avg = round(getTotalScores() /3 , 2)
        print(f'평균:{avg}')
        return avg

    def passOrFail():
        print('-' * 30)
        print(f'국어({s1}):통과!') if s1 >= limitScore else print(f'국어({s1}):탈락!')
        print(f'영어({s2}):통과!') if s2 >= limitScore else print(f'영어({s2}):탈락!')
        print(f'수학({s3}):통과!') if s3 >= limitScore else print(f'수학({s3}):탈락!')

    def allPassOrFail():
        if getAverage() >= passAvgScore:
            if s1>=limitScore and s2>=limitScore and s3>=limitScore:
                print('최종: 통과!')
            else:
                print('최종: 탈락!')
        else:
            print('최종: 탈락!')

    getAverage()
    passOrFail()
    allPassOrFail()
import passOrFail as pf

if __name__ == '__main__':
    s1 = int(input('국어 점수: '))
    s2 = int(input('영어 점수: '))
    s3 = int(input('수학 점수: '))

    pf.checkScores(s1, s2, s3)
  1. 모듈 - 상품 구매 개수에 따라 할인율 적용
def calculatorTotalPrice(gs):

    if len(gs) <= 0:
        print('구매 상품이 없습니다.')
        return

    rate = 25
    totalPrice = 0

    rates = {1:5, 2:10, 3:15, 4:20}

    if len(gs) in rates:
        rate = rates[len(gs)]

    for g in gs:
        totalPrice += g * (1 - rate*0.01)
    return [rate, int(totalPrice)]
import discount as dc

if __name__ == '__main__':
    flag = True
    gs = []

    while flag:
        print('1.구매 2.종료')
        selectNum = int(input('번호 : '))

        if selectNum == 1:
            productPrice = int(input('상품 가격: '))
            gs.append(productPrice)

        elif selectNum == 2:
            result = dc.calculatorTotalPrice(gs)
            print('구매 종료')
            flag = False

    print(f'할인율 : {result[0]}%')
    print(f'가격 : {result[1]}원')
  1. 모듈 - 로또
import random

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

def setUserNums(ns):
    global userNums
    userNums = ns

def getUserNums():
    return userNums

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

def getRandNums():
    return randNums

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 randNums
    global collNums

    for un in userNums:
        if un in randNums:
            collNums.append(un)

    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) == 5:
        print('3등 당첨!')
        print(f'번호:{collNums}')

    elif  len(collNums) == 4:
        print('4등 당첨!')
        print(f'번호:{collNums}')

    elif  len(collNums) == 3:
        print('5등 당첨!')
        print(f'번호:{collNums}')

    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)
    setRandNums()
    setBonusNum()
    lottoResult()
import lottoProgram as lp

lp.startLotto()
profile
21세기 주인공

0개의 댓글