<Ch. 2> 파이썬 기초 문제 풀이

이희준·2023년 4월 10일
0
post-thumbnail

기초문제풀이 [1]

데이터와 변수 (01)

연습 문제 1.

다음은 온라인에서 상품 구매 후 메일로 발송되는 ‘주문확인서’이다. ‘주문확인서’ 템플릿으로 만들고, 변경되는 정보만 입력하면 ‘주문확인서’가 완성될 수 있도록 프로그램을 만들어 보자.

A.

customerName = '홍길동'
productName = '야구글러브'
orderNum = 2568956
purchaseMethod = '신용카드'
productPrice = format(110000, ',')
pricePaid = format(100000, ',')
rewardPoint = 10000
purchaseDate = '2021/08/03 21:50:12'
monthlyInstallment = 6
typeInstallment = '무'

print("{} 고객님 안녕하세요.".format(customerName))
print('{} 고객님의 주문이 완료되었습니다.'.format(customerName))
print('다음은 주문건에 대한 상세 내역입니다.')
print('*' * 25)
print('상품명\t: {}'.format(productName))
print('주문번호\t: {}'.format(orderNum))
print('결재방법\t: {}'.format(purchaseMethod))
print('상품금액\t: {} 원'.format(productPrice))
print('결재금액\t: {} 원'.format(pricePaid))
print('포인트\t: {} P'.format(rewardPoint))
print('결재일시\t: {}'.format(purchaseDate))
print('할부\t\t: {} 개월'.format(monthlyInstallment))
print('할부유형\t: {}'.format(typeInstallment))
print('문의 : 02-1234-5678')
print('*' * 25)
print('저희 사이트를 이용해 주셔서 감사합니다.')

데이터와 변수 (02)

연습 문제 1.

사용자가 입력한 데이터의 길이를 출력하는 프로그램을 만들어보자.

A.

  • 직접 짠 코드 :
msg = input('메시지 입력 : ')
msgCnt = len(msg)

print('메시지 문자열 길이 : {}'.format(msgCnt))
  • 예시 답안 :
userMsg = input('메시지 입력 : ')
print('메시지 문자열 길이 : {}'.format(len(userMsg)))

연습 문제 2. (*복습)

다음 문장에서 ‘객체지향’ 문자열을 찾아 보자.

파이썬(영어: Python)은 1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python's Flying Circus〉에서 따온 것이다.

A.

article = '파이썬(영어: Python)은 1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, ' \
          '플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. ' \
          '파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python\'s Flying Circus〉에서 따온 것이다.'

strIdx = article.find('객체지향')
print('\'객체지향\' 문자열 위치: {}'.format(strIdx))

연습 문제 3.

아래 출력 결과와 같이 사용자가 입력한 데이터를 모두 실수로 변경한 후 사각형, 삼각형의 넓이를 출력해보자.

A.

width = float(input('가로 길이 입력 : '))
height = float(input('세로 길이 입력 : '))

triArea = width * height / 2
sqrArea = width * height

print('-' * 10, 'Result', '-' * 10)
print('삼각형 넓이 : %f' % triArea)
print('사각형 넓이 : %f' % sqrArea)
print('삼각형 넓이 : %.2f' % triArea)
print('사각형 넓이 : %.2f' % sqrArea)
print('-' * 28)

데이터와 변수 (03)

연습 문제 1.

원의 반지름을 입력하면 원의 넓이와 둘레 길이를 출력하되, 아래와 같은 형식으로 출력해보자.

A.

pi = 3.14
radius = float(input('반지름(cm) 입력 : '))
circleArea = pow(radius, 2) * pi
circleCircumference = radius * 2 * pi

print('원의 넓이\t\t: %dcm' % circleArea)
print('원의 둘레길이\t: %dcm' % circleCircumference)
print('원의 넓이\t\t: %.1fcm' % circleArea)
print('원의 둘레길이\t: %.1fcm' % circleCircumference)
print('원의 넓이\t\t: %.3fcm' % circleArea)
print('원의 둘레길이\t: %.3fcm' % circleCircumference)

연습 문제 2. (*복습)

사용자로부터 입력받은 개인정보를 포맷문자열을 이용해서 다음과같이 출력해보자. (단, 비밀번호와 주민번호 뒤자리는 별표로 처리하자)

A.

  • 직접 짠 코드 :
userName = input('이름 입력 : ')
emailAddr = input('메일 입력 : ')
idInput = input('아이디 입력 : ')
pwInput = len(input('비밀번호 입력 : '))
socialSecurityNum1 = int(input('주민번호 앞자리 입력 : '))
socialSecurityNum2 = input('주민번호 뒷자리 입력 : ')
currentAddr = input('주소 입력 : ')

print('-' * 25)
print('이름 : {}'.format(userName))
print('메일 : {}'.format(emailAddr))
print('아이디 : {}'.format(idInput))
print('비밀번호 : {}'.format('*' * pwInput))
print('주민번호 : {} - {}{}'.format(socialSecurityNum1, socialSecurityNum2[0], ('*' * (len(socialSecurityNum2) - 1))))
print('주소 : {}'.format(currentAddr))
print('-' * 25)
  • 예시 답안 :
name = input('이름 입력 : ')
mail = input('메일 입력 : ')
id = input('아이디 입력 : ')
pw = input('비밀번호 입력 : ')
privateNumber1 = input('주민번호 앞자리 입력 : ')
privateNumber2 = input('주민번호 뒷자리 입력 : ')
address = input('주소 입력 : ')

print('-' * 25)
print('이름 : {}'.format(userName))
print('메일 : {}'.format(emailAddr))
print('아이디 : {}'.format(idInput))
print('비밀번호 : {}'.format('*' * pwInput))
print('주민번호 : {} - {}{}'.format(socialSecurityNum1, socialSecurityNum2[0], ('*' * (len(socialSecurityNum2) - 1))))
print('주소 : {}'.format(currentAddr))
print('-' * 25)

기초문제풀이 [2]

데이터와 변수 (04)

연습 문제 1.

체중(g)과 신장(cm)을 입력하면 BMI지수가 출력되는 프로그램을 만들어 보자.

A.

# BMI Function : 몸무게(kg) / 신장(M)^2
weight = input('체중 입력(g) : ')
height = input('신장 입력(cm) : ')

if weight.isdigit():
    weight = int(weight) / 10

if height.isdigit():
    height = int(height) / 100

print('체중 : {}kg'.format(weight))
print('신장 : {}m'.format(height))

bmi = weight / pow(height,2)
print('BMI : %.2f' % bmi)

연습 문제 2.

다음 코드에서 num1과 num2의 값을 서로 바꾸고 각각 출력해보자.

A.

num1 = 10
num2 = 20
print('num1 : {}, num2 : {}'.format(num1, num2))

tempNum = num1
num1 = num2
num2 = tempNum

print('num1 : {}, num2 : {}'.format(num1, num2))

연습 문제 3.

중간, 기말고사 점수를 입력하면 총점과 평균이 출력되는 프로그램을 만들어보자.

A.

midScore = input('중간 고사 점수 : ')
finalScore = input('기말 고사 점수 : ')

if midScore.isdigit() and finalScore.isdigit():
    midScore = int(midScore)
    finalScore = int(finalScore)

    totalScore = midScore + finalScore
    avgScore = totalScore / 2

    print('총점 : {}, 평균 : {}'.format(totalScore,avgScore))

else:
    print('잘못 입력하셨습니다.')

데이터와 변수 (05)

연습 문제 1.

키오스크에서 사용하는 언어 선택 프로그램을 만들어보자.

A.

  • 직접 짠 코드 :
inputLang = input('언어 선택(Choose your language) : 1.한국어\t2.English\t')

if inputLang.isdigit():
    inputLang = int(inputLang)
    if inputLang == 1:
        print('1.샌드위치\t2.햄버거\t3.쥬스\t4.커피\t5.아이스크림')
    elif inputLang == 2:
        print('1.Sandwich\t2.Hamburger\t3.Juice\t4.Coffee\t5.Ice Cream')
    else:
        print('잘못 고르셨습니다. 다시 입력해주세요.')
else:
    print('잘못 입력하셨습니다. 다시 입력해주세요.')

-예시 답안 :

selectNumber = input('언어 선택(Choose your language) : 1.한국어\t2.English\t')

if selectNumber == '1':
    menu = '1.샌드위치\t2.햄버거\t3.쥬스\t4.커피\t5.아이스크림'
elif selectNumber == '2':
    menu = '1.Sandwich\t2.Hamburger\t3.Juice\t4.Coffee\t5.Ice Cream'

print(menu)

연습 문제 2.

나의 나이가 100살 되는 해의 연도를 구하는 프로그램을 만들어보자.

A.

import datetime

today = datetime.datetime.today()

myAge = input('나이 입력 : ')

if myAge.isdigit():
    afterAge = 100 - int(myAge)
    myHundred = today.year + afterAge

    print('{}년({}년후)에 100살!!'.format(myHundred, afterAge))

else:
    print('잘 못 입력했습니다.')

연산자 (01) - ### (산술, 비교, 논리 연산자를 이용한 프로그래밍)

연습 문제 1. (*복습)

상품 가격과 지불 금액을 입력하면 거스름 돈을 계산하는 프로그램을 만들어보자. 단, 거스름 돈은 지폐와 동전의 개수를 최소로 하고, 1원단위 절사한다.

A.

money50000 = 50000; money10000 = 10000; money5000 = 5000
money1000 = 1000; money500 = 500; money100 = 100; money10 = 19

money50000Cnt = 0; money10000Cnt = 0; money5000Cnt = 0
money1000Cnt = 0; money500Cnt = 0; money100Cnt = 0; money10Cnt = 0


productPrice = int(input('상품 가격 입력 : '))
paidPrice = int(input('지불 금액 : '))


if paidPrice > productPrice:
    changeMoney = paidPrice - productPrice
    changeMoney = (changeMoney // 10) * 10
    print('거스름 돈 : {}(원단위 절사)'.format(changeMoney))

if changeMoney > money50000:
    money50000Cnt = changeMoney // money50000
    changeMoney %= money50000

if changeMoney > money10000:
    money10000Cnt = changeMoney // money10000
    changeMoney %= money10000

if changeMoney > money5000:
    money5000Cnt = changeMoney // money5000
    changeMoney %= money5000

if changeMoney > money1000:
    money1000Cnt = changeMoney // money1000
    changeMoney %= money1000

if changeMoney > money500:
    money500Cnt = changeMoney // money500
    changeMoney %= money500

if changeMoney > money100:
    money100Cnt = changeMoney // money100
    changeMoney %= money100

if changeMoney > money10:
    money10Cnt = changeMoney // money10
    changeMoney %= money10

print('-' * 30)
print('50,000 {}장'.format(money50000Cnt))
print('10,000 {}장'.format(money10000Cnt))
print('5,000 {}장'.format(money5000Cnt))
print('1,000 {}장'.format(money1000Cnt))
print('500 {}개'.format(money500Cnt))
print('100 {}개'.format(money100Cnt))
print('10 {}개'.format(money10Cnt))
print('-' * 30)

연산자 (02) - ### (산술, 비교, 논리 연산자를 이용한 프로그래밍)

연습 문제 1. (*복습)

국어, 영어, 수학 점수 입력 후 총점, 평균, 최고점수 과목, 최저점수 과목, 그리고 최고 점수와 최저 점수의 차이를 각각 출력해보자

A.

korScore = int(input('국어 점수 입력 : '))
engScore = int(input('영어 점수 입력 : '))
mathScore = int(input('수학 점수 입력 : '))

totalScore = korScore + engScore + mathScore
avgScore = totalScore / 3

bestScore = korScore
bestSubj = '국어'

if engScore > bestScore:
    bestScore = engScore
    bestSubj = '영어'

if mathScore > bestScore:
    bestScore = mathScore
    bestSubj = '수학'

worstScore = korScore
worstSubj = '국어'

if engScore < worstScore:
    worstScore = engScore
    worstSubj = '영어'

if mathScore < worstScore:
    worstScore = mathScore
    worstSubj = '수학'

bestWorstDiff = bestScore - worstScore

print('총점 : {}'.format(totalScore))
print('평균 : %.2f' % avgScore)
print('-' * 30)
print('최고 점수 과목(점수) : {}({})'.format(bestSubj, bestScore))
print('최저 점수 과목(점수) : {}({})'.format(worstSubj, worstScore))
print('최고, 최저 점수 차이 : {}'.format(bestWorstDiff))

연산자 (03) - ### (산술, 비교, 논리 연산자를 이용한 프로그래밍)

연습 문제 1.

시, 분, 초를 입력하면 초로 환산하는 프로그램을 만들어보자.

A.

hou = int(input('시간 입력 : '))
min = int(input('분 입력 : '))
sec = int(input('초 입력: '))

print('{}초'.format(format(hou * pow(60,2) + min * 60 + sec, ',')))

연습 문제 2. (*복습)

금액, 이율, 거치기간을 입력하면 복리계산하는 복리계산기 프로그램을 만들어보자.

A.

  • 직접 짠 코드 :
price = int(input('금액 입력 : '))
interestRate = float(input('이율 입력 : '))
timePeriod = int(input('기간 입력 : '))

func = price * pow((1 + interestRate / 100), timePeriod)
adjFunc = format(int(func), ',')

print('-' * 30)
print('이율 : %.1f%%' % interestRate)
print('원금 : {}원'.format(format(price, ',')))
print('{}년 후 금액 : {}원'.format(timePeriod, adjFunc))
print('-' * 30)
  • 예시 답안 :
money = int(input('금액 입력 : '))
rate = float(input('이율 입력 : '))
term = int(input('기간 입력 : '))

targetMoney = money

for i in range(term):
    targetMoney *= (targetMoney * rate * 0.01)
    
targetMoneyFormatted = format(int(targetMoney), ',')

print('-' * 30)
print('이율 : {}%'.format(rate))
print('원금 : {}원'.format(money))
print('{}년 후 금액 : {}원'.format(term, targetMoneyFormatted))
print('-' * 30)



연산자 (04) - ### (산술, 비교, 논리 연산자를 이용한 프로그래밍)

연습 문제 1. (*복습)

고도가 60m 올라갈 때마다 기온이 0.8도 내려 간다고 할 때 고도를 입력하면 기온이 출력되는 프로그램을 만들어 보자.(지면온도: 29도)

A.

baseTemp = 29
step = 60
stepTemp = 0.8

height = int(input('고도 입력 : '))

targetTemp = baseTemp - (height // step * 0.8)

if height % step != 0:
    targetTemp -= stepTemp

print('지면 온도 : {}'.format(baseTemp))
print('고도 {}m의 기온 : {}'.format(height, targetTemp))

연습 문제 2.

197개의 빵과 152개의 우유를 17명의 학생한테 동일하게 나눠 준다고 할 때, 한 명의 학생이 갖게 되는 빵과 우유 개수를 구하고 남는 빵과 우유 개수를 출력하자.

A.

bread = 197
milk = 152
studentCnt = 17

print('학생 한 명이 갖게 되는 빵 개수 : {}'.format(bread // studentCnt))
print('학생 한 명이 갖게 되는 우유 개수 : {}'.format(milk // studentCnt))

print('남는 빵 개수 : {}'.format(bread % studentCnt))
print('남는 우유 개수 : {}'.format(milk % studentCnt))

연산자 (05) - ### (산술, 비교, 논리 연산자를 이용한 프로그래밍)

연습 문제 1.

다음 내용을 참고해서 백신 접종 대상자를 구분하기 위한 프로그램을 만들어 보자.

A.

inputAge = int(input('나의 나이 입력 : '))

if inputAge <= 19 or inputAge >= 65:
    endNum = int(input('출생 연도 끝자리 입력 : '))
    if endNum == 1 or endNum == 6:
        print('월요일 접종 가능!')
    elif endNum == 2 or endNum == 7:
        print('화요일 접종 가능!')
    elif endNum == 3 or endNum == 8:
        print('수요일 접종 가능!')
    elif endNum == 4 or endNum == 9:
        print('목요일 접종 가능!')
    elif endNum == 5 or endNum == 0:
        print('금요일 접종 가능!')
else:
    print("하반기 일정 확인하세요.")

연습 문제 2.

길이(mm)를 입력하면 inch로 환산하는 프로그램을 만들어보자.(1mm = 0.039inch)

A.

byInch = 0.039
lengthMM = int(input('길이(mm) 입력 : '))
lengthInch = lengthMM * byInch

print('{}mm -> {}inch'.format(lengthMM, lengthInch))

조건문 (01)

연습 문제 1.

교통 과속 위반 프로그램을 만들어보자.

A.

speedLimit = 50
inputSpeed = int(input('속도 입력 : '))

if inputSpeed <= speedLimit:
    print('안전속도 준수!!')
if inputSpeed > speedLimit:
    print('안전속도 위반!! 과태료 50,000원 부과 대상!!')

연습 문제 2. (*복습)

문자 메시지 길이에 따라 문자 요금이 결정되는 프로그램을 만들어보자.

A.

  • 직접 짠 코드 :
message = input('메시지 입력 : ')
priceSMS = 50
priceMMS = 100
messageLen = len(message)

if messageLen <= 50:
    print('SMS 발송!!')
    print('메시지 길이 : {}'.format(messageLen))
    print('메시지 발송 요금 : {}'.format(priceSMS))
else:
    print('MMS 발송!!')
    print('메시지 길이 : {}'.format(messageLen))
    print('메시지 발송 요금 : {}'.format(priceMMS))
  • 예시 답안 :
message = input('메시지 입력 : ')
lenMessage = len(message)
msgPrice = 50

if lenMessage <= 50:
    msgPrice = 50
    print('SMS 발송!!')

else:
    msgPrice = 100
    print('MMS 발송!!')

print('메시지 길이 : {}'.format(lenMessage))
print('메시지 발송 요금 : {}'.format(msgPrice))

조건문 (02)

연습 문제 1. (*복습)

국어, 영어, 수학, 과학, 국사 점수를 입력하면 총점을 비롯한 각종 데이터가 출력되는 프로그램을 만들어보자.

A.

korScoreAvg = 85; engScoreAvg = 82
mathScoreAvg = 89; histScoreAvg = 94; sciScoreAvg = 75
avgTotalScore = korScoreAvg + engScoreAvg + \
                mathScoreAvg + histScoreAvg + sciScoreAvg
avgAvgScore = int(avgTotalScore / 5)

korScore = int(input('국어 점수 : '))
engScore = int(input('영어 점수 : '))
mathScore = int(input('수학 점수 : '))
histScore = int(input('국사 점수 : '))
sciScore = int(input('과학 점수 : '))

totalScore = korScore + engScore + \
             mathScore + histScore + sciScore
avgScore = int(totalScore / 5)

korScoreGap = korScore - korScoreAvg
engScoreGap = engScore - engScoreAvg
mathScoreGap = mathScore - mathScoreAvg
histScoreGap = histScore - histScoreAvg
sciScoreGap = sciScore - sciScoreAvg

totalScoreGap = totalScore - avgTotalScore
avgScoreGap = avgScore - avgAvgScore

print('-' * 70)
print('총점 : {}({}), 평균 : {}({})'.format(totalScore, totalScoreGap, avgScore, avgScoreGap))
print('국어 : {}({}), 영어 : {}({}), 수학 : {}({}), 국사 : {}({}), 과학 : {}({})'.format(
    korScore, korScoreGap, engScore, engScoreGap, mathScore, mathScoreGap, histScore, histScoreGap, sciScore, sciScoreGap
))
print('-' * 70)
str = '+' if korScoreGap > 0 else '-'
print('국어 편차 : {}({})'.format(str * abs(korScoreGap), korScoreGap))
str = '+' if engScoreGap > 0 else '-'
print('영어 편차 : {}({})'.format(str * abs(engScoreGap), engScoreGap))
str = '+' if mathScoreGap > 0 else '-'
print('수학 편차 : {}({})'.format(str * abs(mathScoreGap), mathScoreGap))
str = '+' if histScoreGap > 0 else '-'
print('국사 편차 : {}({})'.format(str * abs(histScoreGap), histScoreGap))
str = '+' if sciScoreGap> 0 else '-'
print('과학 편차 : {}({})'.format(str * abs(sciScoreGap), sciScoreGap))
str = '+' if totalScoreGap> 0 else '-'
print('총점 편차 : {}({})'.format(str * abs(totalScoreGap), totalScoreGap))
str = '+' if avgScoreGap> 0 else '-'
print('평균 편차 : {}({})'.format(str * abs(avgScoreGap), avgScoreGap))
print('-' * 70)

abs = 입력값의 절댓값 구하는 방법


기초문제풀이 [4]

조건문 (03)

연습 문제 1.

난수를 이용해서 홀/짝 게임을 만들어보자.

A.

import random

comNum = random.randint(1, 2)
userSelect = int(input('홀/짝 선택 : 1.홀 \t2.짝 '))

if comNum == 1 and userSelect == 1:
    print('빙고!! 홀수!!!')
elif comNum == 2 and userSelect == 2:
    print('빙고!! 짝수!!!')
elif comNum == 1 and userSelect == 2:
    print('실패!! 홀수!!!')
elif comNum == 2 and userSelect == 1:
    print('실패!! 짝수!!!')

연습 문제 2.

난수를 이용해서 가위, 바위, 보 게임을 만들어보자.

A.

import random

comNumber = random.randint(1, 3)
userNumber = int(input('가위, 바위, 보 선택 : 1.가위\t2.바위\t3.보 '))

if (comNumber == 1 and userNumber == 1) or (comNumber == 2 and userNumber == 3) or (comNumber == 3 and userNumber == 1):
    print('컴퓨터 : 패,\t유저 : 승')
elif comNumber == userNumber:
    print('무승부')
else:
    print('컴퓨터 : 승,\t유저 : 패')

print('컴퓨터 : {},\t유저 : {}'.format(comNumber, userNumber))

조건문 (04)

연습 문제 1.

아래 요금표를 참고해서 상수도 요금 계산기를 만들어보자.

A.

  • 직접 짠 코드 :
classification = int(input('업종 선택 (1.가정용\t\t2.대중탕용\t3.공업용): '))
waterUse = int(input('사용량 입력 : '))

print('=' * 30)
print('상수도 요금표')
print('-' * 30)
print('사용량\t:\t요금')

if classification == 1:
    print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 540, ',')))
elif classification == 2:
    if waterUse > 300:
        print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 2400, ',')))
    elif waterUse <=300 and waterUse >50:
        print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 1920, ',')))
    else:
        print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 820, ',')))
elif classification == 3:
    if waterUse > 500:
        print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 470, ',')))
    else:
        print('{}\t\t:\t{}원'.format(waterUse, format(waterUse * 240, ',')))
print('=' * 30)
  • 예시 답안 :
part = int(input('업종 선택 (1.가정용\t\t2.대중탕용\t3.공업용): '))
useWater = int(input('사용량 입력 : '))
unitPrice = 0

if part == 1:
    unitPrice = 540

elif part == 2:
    if useWater > 300:
        unitPrice = 2400
    elif useWater <= 300 and useWater > 50:
        unitPrice = 1920
    elif useWater <= 50:
        unitPrice = 820

elif part == 3:
    if useWater > 500:
        unitPrice = 470
    else:
        unitPrice = 240

print('=' * 30)
print('상수도 요금표')
print('-' * 30)
print('사용량\t:\t요금')
userPrice = useWater * unitPrice
print('{}\t\t:\t{}원'.format(useWater, format(userPrice, ',')))
print('=' * 30)

조건문 (05)

연습 문제 1. (*복습)

미세먼지 비상저감조치로 차량 운행제한 프로그램을 다음 내용에 맞게 만들어 보자.

A.

import datetime

today = datetime.datetime.today()
day = today.day

limitDust = 150
dustNum = int(input('미세먼지 수치 입력 : '))
carType = int(input('차량 종류 선택 : 1. 승용차\t2. 영업용차\t'))
carNum = int(input('차량 번호 입력 : '))

print('-' * 30)
print(today)
print('-' * 30)

if dustNum > limitDust and carType == 1:
    if (day % 2) == (carNum % 2):
        print('차량 2부제 적용')
        print('차량 2부제로 금일 운행제한 대상 차량입니다.')
    else:
        print('금일 운행 가능합니다.')

elif dustNum > limitDust and carType == 2:
    if (day % 5) == (carNum % 5):
        print('차량 5부제 적용')
        print('차량 5부제로 금일 운행제한 대상 차량입니다.')
    else:
        print('금일 운행 가능합니다.')

elif dustNum <= limitDust:
    if (day % 5) == (carNum % 5):
        print('차량 5부제 적용')
        print('차량 5부제로 금일 운행제한 대상 차량입니다.')
    else:
        print('금일 운행 가능합니다.')

print('-' * 30)

조건문 (06)

연습 문제 1.

PC에서 난수를 발생하면 사용자가 맞추는 게임을 만들어보자.

A.

import random

randomNum = random.randint(1, 1001)
tryNum = 0
gameFlag = True

while gameFlag:
    tryNum += 1
    userNum = int(input('1에서 1000까지의 정수 입력 : '))
    if randomNum == userNum:
        print('빙고!')
        gameFlag = False
    else:
        if randomNum >= userNum:
            print('난수가 크다!')
        else:
            print('난수가 작다!')

print('난수 : {}, 시도 횟수 : {}'.format(randomNum, tryNum))

연습 문제 2.

실내온도를 입력하면 스마트에어컨 상태가 자동으로 설정되는 프로그램을 만들어보자.

A.

indoorTemp = int(input('실내온도 입력 : '))

if indoorTemp > 28:
    print('에어컨: 매우 강!!')
elif indoorTemp > 26 and indoorTemp <= 28:
    print('에어컨: 강!!')
elif indoorTemp > 24 and indoorTemp <= 26:
    print('에어컨: 중!!')
elif indoorTemp > 22 and indoorTemp <= 24:
    print('에어컨: 약!!')
elif indoorTemp > 18 and indoorTemp <= 22:
    print('에어컨: 매우 약!!')
elif indoorTemp <= 18:
    print('에어컨: OFF!!')

반복문 (01)

연습 문제 1.

1부터 100까지 정수 중 십의자리와 일의자리에 대해 각각 홀/짝수를 구분하는 프로그램을 만들어보자.

A.

for i in range(1, 101):
    if i <= 9:
        if i % 2 == 0:
            print('[{}]: 짝수!'.format(i))
        else:
            print('[{}]: 홀수!'.format(i))
    else:
        num10 = i // 10
        num1 = i % 10

        result10 = ''
        if num10 % 2 == 0:
            result10 = '짝수'
        else:
            result10 = '홀수'

        result1 = '0'
        if num1 != 0:
            if num1 % 2 == 0:
                result1 = '짝수'
            else:
                result1 = '홀수'

        print('[{}] 십의 자리 : {}!!, 일의 자리 : {}!!'.format(i, result10, result1))

반복문 (02)

연습 문제 1.

1부터 사용자가 입력한 정수까지의 합, 홀수의 합, 짝수의 합 그리고 팩토리얼을 출력하는 프로그램을 만들어보자.

A.

  • 직접 짠 코드 :
i = int(input('정수 입력 : '))
sum = 0; oddSum =0; evenSum = 0; factorialResult = 1
for i in range (1, i+1):
    sum += i
    factorialResult *= i
    if i %2 == 0:
        evenSum += i
    else:
        oddSum += i

print('합 결과 : {}'.format(sum))
print('홀수 합 결과 : {}'.format(oddSum))
print('짝수 합 결과 : {}'.format(evenSum))
print('팩토리얼 결과 : {}'.format(format(factorialResult, ',')))
  • 예시 답안 :
fNum = int(input('정수 입력 : '))

addSum = 0
for i in range(1, (fNum +1)):
    addSum += i

addSumFormatted = format(addSum, ',')
print('합 결과: {}'.format(addSumFormatted))

oddSum = 0
for i in range(1, (fNum + 1)):
    if i % 2 != 0:
        oddSum += i

oddSumFormatted = format(oddSum, ',')
print('홀수 합 결과: {}'.format(oddSumFormatted))

evenSum = 0
for i in range(1, (fNum +1)):
    if i % 2 == 0:
        evenSum += i

evenSumFormatted = format(evenSum, ',')
print('짝수 합 결과: {}'.format(evenSumFormatted))

factorialResult = 1
for i in range(1, (fNum +1)):
    factorialResult *= i

factorialResultFormatted = format(factorialResult, ',')
print('팩토리얼 결과: {}'.format(factorialResultFormatted))

반복문 (03)

연습 문제 1.

‘*’를 이용해서 다음과 같이 다양한 모양을 출력해보자.

A.

# 1. 윗줄 첫 번째 모형
for i in range (1, 6):
    for j in range(i):
        print("*", end='')
    print()

print('\n')

# 2. 윗줄 두 번째 모형
for i1 in range (1, 6):
    for i2 in range(6 - i1 -1):
        print(' ', end='')
    for i3 in range(i1):
        print('*', end='')
    print()

print('\n')

# 3. 윗줄 세 번째 모형
for i in range (5, 0 ,-1):
    for j in range(i):
        print("*", end='')
    print()

print('\n')

# 4. 윗줄 네 번째 모형
for i in range(5, 0 ,-1):
    for j in range(5 - i):
        print(' ', end='')

    for j in range(i):
        print('*', end='')
    print()

print('\n')

# 5. 아랫줄 첫 번째 모형
for i in range (1, 10):
    if i <= 5:
        for j in range(i):
            print("*", end='')
    else:
        for i in range(10 - i):
            print('*', end='')
    print()

print('\n')

# 6. 윗 줄 두 번째 모형
for i in range(1, 6):
    for j in range(1, 6):
        if j == i:
            print('*', end='')
        else:
            print(' ', end='')
    print()

print('\n')

# 7. 아랫줄 세 번째 모형
for i in range(1, 6):
    for j in range(5, 0, -1):
        if j == i:
            print('*', end='')
        else:
            print(' ', end='')
    print()

print('\n')

# 8. 아랫줄 네 번째 모형
for i in range(1, 6):
    print(' ' * (5 - i) + '*' * (i * 2 -1))
for j in range(4, 0, -1):
    print(' ' * (5 - j) + '*' * (j * 2 -1))

반복문 (04)

연습 문제 1. (*복습)

집 앞 버스 정류장에서 학교까지 가는 버스 A, B, C 의 운행정보가 다음과 같을 때, 2대 이상의 버스가 정차하는 시간대를 출력해보자.

A.

busA = 15
busB = 13
busC = 8

totalMin = 60 * 17

for i in range(totalMin + 1):
    if (i < 20) or i > (totalMin - 60):
        if i % busA == 0 and i % busB == 0:
            print('busA와 busB 동시 정차!!', end='')
            hour = 6 + i // 60
            minute = i % 60
            print('\t{}:{}'.format(hour, minute))
    else:
        if i % busA == 0 and i % busB == 0:
            print('busA와 busB 동시 정차!!', end='')
            hour = 6 + i // 60
            minute = i % 60
            print('\t{}:{}'.format(hour, minute))
        elif i % busA == 0 and i % busC == 0:
            print('busA와 busC 동시 정차!!', end='')
            hour = 6 + i // 60
            minute = i % 60
            print('\t{}:{}'.format(hour, minute))
        elif i % busB == 0 and i % busC == 0:
            print('busB와 busC 동시 정차!!', end='')
            hour = 6 + i // 60
            minute = i % 60
            print('\t{}:{}'.format(hour, minute))

반복문 (05)

연습 문제 1. (*복습)

톱니가 각각 n1개와 n2개의 톱니바퀴가 서로 맞물려 회전할 때, 회전을 시작한 후 처음 맞물린 톱니가 최초로 다시 만나게 될 때까지의 톱니의 수와 각각의 바퀴 회전수를 출력해보자.(단, n2는 n1보다 크다.)

A.

gearACnt = int(input('Gear A 톱니수 입력 : '))
gearBCnt = int(input('Gear A 톱니수 입력 : '))

gearA = 0
gearB = 0
leastNum = 0

flag = True

while flag:
    if gearA != 0:
        if gearA != leastNum:
            gearA += gearACnt
        else:
            flag = False
    else:
        gearA += gearACnt

    if gearB != 0 and gearB % gearACnt == 0:
        leastNum = gearB
    else:
        gearB += gearBCnt

print('최초 만나는 톱니수(최소공배수): {}톱니'.format(leastNum))
print('gearA 회전수: {}회전'.format(int(leastNum / gearACnt)))
print('gearB 회전수: {}회전'.format(int(leastNum / gearBCnt)))

반복문 (06)

연습 문제 1.

윤년 계산기를 만들어보자.

A.

lunarYr = int(input('연도 입력 : '))

if (lunarYr % 4 == 0 and lunarYr % 100 != 0) or (lunarYr % 400 == 0):
    print('{}년 : 윤년!!'.format(lunarYr))
else:
    print('{}년 : 평년!!'.format(lunarYr))
- 변형 답안 : ```python for lunarYr in range(2023, (2023 + 101)): if (lunarYr % 4 == 0 and lunarYr % 100 != 0) or (lunarYr % 400 == 0): print('{}년 : 윤년!!'.format(lunarYr)) else: print('{}년 : 평년!!'.format(lunarYr)) ``` ### · ### · ### ·

이상 데이터 취업 스쿨 파이썬 Chpt.2 기초문제풀이의 스터디노트이다.

여전히 스케줄 정상화 작업이 아직 진행 중인 상태이나, 그래도 velog 작성에 조금 익숙해지면서 작업 속도가 조금씩 빨라진다는 점을 위안 삼고 있다.

나중에 한꺼번에 모아 볼 생각으로 제출이 조금 늦어졌다는 부분이 매우 아쉽다고 느껴진다.

문제들은 대략적으로 풀 만 했으나, 후반부에서 많이 버벅이기 시작하였다.

강의를 수강하며 먼저 문제를 풀어보고, 만약 예시 답안과 많이 다르다면 두 답안을 같이 적어 놓았다.

예시 답안만큼 깔끔하게 코딩을 하는 것이 목표이나, 아직 많이 멀었다는 생각이 든다.

코드 작성 후 예시 답안과 비교하면서 어떤 부분에서 차이점이 보이는 지, 그리고 이를 통해 어떻게 코드 작성을 해야 하는지에 대하여 공부할 수 있는 기회가 되었다.

빠르게 진도를 따라잡는 것이 현재 목표이다.





이미지 출처: @waterglasstoon, 제로베이스 강의 일부

profile
On My Way

0개의 댓글