파이썬 기초 문제 풀이

2023. 3. 12. 14:59카테고리 없음

조건문 ~반복문 (56강~64강)

# 56강 조건문(04)

 

조건문을 이용해서 프로그램의 실행을 분기한다.

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

part = int(input('업종 선택(1.가정용 2. 대중탕용 3.공업용): '))
userWater = int(input('사용량 입력:' ))
unitPrice = 0

if part == 1:
    unitPrice = 540

elif part == 2:
    if userWater <= 50:
        unitPrice = 820 
        
    elif userWater > 50 and userWater <= 300:
        unitPrice = 1920
        
    elif userWater > 300:
        unitPrice = 2400
    
elif part == 3:
    if userWater <= 500:
        unitPrice = 240
    else:
        unitPrice = 470
    
print('='*30)
print('상수도 요금표')
print('-'*30)
print('사용량\t :\t 요금')
userPrice = userWater * unitPrice
print('{}\t:\t{}원'.format(userWater,userPrice))
print('='*30)

# 57강 조건문(05)

 

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

중첩 조건문 사용, 

 

import datetime
today = datetime.datetime.today() # 연월일 시분초
day = today.day

limitDust = 150   # 미세먼지 수치 150 기준으로( 이하면 5부제, 초과면 5부제)
dustNum = int(input('미세먼지 수치 입력: '))
carType = int(input('차량 종류 선택: 1.승용차   2.영업용차')) # 영업용차량은 항상 5부제 실시 
carNumber = int(input('차량 번호 입력: '))
# 미세먼지 수치, 차량 종류, 차량 번호를 입력하면 운행가능여부 출력
print('-'*30)
print(today)
print('-'*30)
if dustNum > limitDust and carType ==1:   # limitDust 초과하면 차량 2부제
    if (day%2) == (carNumber % 2):
        print('차량 2부제 적용')
        print('차량 2부제로 금일 운행제한 대상 차량입니다.')
    else:
        print('금일 운행 가능합니다.')
        
if dustNum > limitDust and carType ==2:   # 영업용차량이면 항상 5부제
    if (day%5)==(carNumber%5):
        print('차량 5부제 적용')
        print('차량 5부제로 금일 운행제한 대상 차량입니다.')
    else:
        print('금일 운행 가능합니다.')

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

# 58강 조건문 06

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

import random

rNum = random.randint(1,1000)   # 1에서 1000까지의 난수를 하나 뽑는다.
tryCount = 0  #시도 횟수
gameFlag = True  #게임이 진행되느냐 안되느냐 반복문 질문 

while gameFlag:
    tryCount += 1
    pNum = int(input('1에서 1,000까지의 정수 입력: '))
    
    if rNum == pNum:
        print('빙고!')
        gameFlag = False
        
    else:
        if rNum > pNum:
            print('난수가 크다!')
        else:
            print('난수가 작다!')
                 
print('난수: {}, 시도 횟수:{}'.format(rNum, tryCount))

* 들여쓰기 주의 

 

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

# if~ 다자택일

innerTemp = int(input('실내온도 입력: '))
if innerTemp <= 18:
    print('에어컨: OFF!!')
elif innerTemp > 18 and innerTemp <=22:
    print('에어컨: 매우 약!!')
elif innerTemp > 22 and innerTemp <=24:
    print('에어컨: 약!!')
elif innerTemp > 24 and innerTemp <=26:
    print('에어컨: 중!!')
elif innerTemp >26 and innerTemp <=28:
    print('에어컨: 강!!')
else:
    print('에어컨: 매우 강!!')

 

다양한 반복문 사용법 ( for문, while 문)

#59. 반복문(01) _ 횟수에 의한 반복문 / 중첩 반복문 

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

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 = ''    # result10에 십의 자리가 짝수인지 홀수인지 할당해준다
        if num10 % 2 == 0:
            result10 = '짝수'
        else:
            result10 = '홀수'
            
            
        result1 = '0'    # result1에 일의자리를 0으로 놓고 짝수인지 홀수인지 할당해준다.
        if num1 != 0:
            if num1 % 2 == 0:
                result1 = '짝수'
                
            else:
                result1 = '홀수'
            
        print('[{}] 십의자리: {}, 일의자리: {}'.format(i,result10,result1))

 

#60강 조건문(02)

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

fNum = int(input('정수 입력: '))

addSum = 0
for i in range(1,fNum+1):   # 반복문으로 합 구하는 법 알기
    addSum += i 
    
addSumFormated = format(addSum, ',')
print('합 결과: {}'.format(addSumFormated))

oddSum = 0 
for i in range(1, fNum+1):
    if i % 2 != 0:
        oddSum += i 
        
oddSumFormated = format(oddSum, ',')
print('홀수 합 결과: {}'.format(oddSumFormated))

evenSum = 0 
for i in range(1, fNum+1):
    if i % 2 == 0:
        evenSum += i 
        
evenSumFormated = format(evenSum, ',')
print('짝수 합 결과: {}'.format(evenSumFormated))

factorialResult = 1
for i in range(1, fNum+1):
    factorialResult *= i 
        
factorialResultFormated = format(factorialResult, ',')
print('팩토리얼 결과: {}'.format(factorialResultFormated))

#61강 조건문(03)  # * 문제 다시 풀기 

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

for i in range(1,6):
    for j in range(i):
        print('*',end='')  # end ='' 개행하지 말라
    print('') # 한줄 쓰고 개행하라

for i1 in range(1,6):
    for i2 in range(6-i1-1):
        print(' ', end='')
    for i3 in range(i1):
        print('*',end = '')
    print()

for i in range(5,0,-1):
    for j in range(i):
        print('*',end = '')
    print()
    
for i in range(5,0,-1):
    for j in range(5-i):
        print(' ',end = '')
    for j in range(i):
        print('*',end='')
    print()
    
for i in range(1,10):
    if i <5:
        for j in range(i):
            print('*',end = '')
    else:
        for j in range(10-i):
            print('*',end = '')
    print()
    
for i in range(1,6):
    for j in range(1,6):
        if j == i :
            print('*', end = '')
        else:
            print(' ', end = '')
            
    print()

#62강. 조건문(04) ---> 다시 풀기 이해안감

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

busA = 15   # 15분간격 운행
busB = 13   # 13분간격 운행
busC = 8    # 8분간격 운행 

totalMin = 60 * 17 # 오전 6시부터 23시까지 운행 총 시간 (분) = 23-6 =17시간 *60분
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
            min = i % 60
            print('\t{}:{}'.format(hour,min))
            
    else:

 

#63강. 조건문(05)  ---> 다시 풀기

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

gearATCnt = int(input('GearA 톱니수: '))
gearBTCnt = int(input('GearB 톱니수: '))

gearA = 0
gearB = 0
leastNum = 0

flag = True
while flag:
    if gearA != 0:
        if gearA != leastNum:
            gearA += gearATCnt
        else:
            flag = False
    else:
        gearA += gearATCnt
    
    
    if gearB != 0 and gearB % gearATCnt == 0 :
        leastNum = gearB
    else:
        gearB += gearBTCnt
        
print('최초 만나는 톱니수(최소공배수): {}톱니'.format(leastNum))
print('gearA 회전수 : {}회전'.format(int(leastNum / gearATCnt)))
print('gearB 회전수 : {}회전'.format(int(leastNum / gearBTCnt)))

#64강. 조건문(06)

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

* 윤년 조건

- 연도가 4로 나누어떨어지고 100으로 나누어 떨어지지 않으면 윤년이다.

- 또는 연도가 400으로 나누어 떨어지면 윤년이다.

year = int(input('연도 입력: '))
year_name = '평년'

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    year_name = '윤년!!'
    print('{}년: {}'.format(year,year_name))

else:
    print('{}년: {}'.format(year,year_name))

for i in range(2021,(2021+101)):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        print('{}년: 윤년!!'.format(year))

    else:
        print('{}년: 평년'.format(year))

   

    

※이 게시물은 제로베이스 데이터 취업스쿨의 강의 내용이 포함되어있습니다.