[5일차] 파이썬 기초문풀 4~5(반복문)

하은·2023년 10월 18일
0
post-custom-banner

반복문(for문, while문)

- 반복문을 이용해서 프로그램의 실행을 반복한다.

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

for i in range(1, 101):
    # 1의 자리 홀짝구분
    if i <= 9:
        if i % 2 == 0:
            print('[{}]: 짝수!'.format(i))
        else:
            print('[{}]: 홀수!'.format(i))
    # 10의 자리 홀짝구분
    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))
        
-->

[1]: 홀수!
[2]: 짝수!
[3]: 홀수!
[4]: 짝수!
[5]: 홀수!
[6]: 짝수!
[7]: 홀수!
[8]: 짝수!
[9]: 홀수!
[10] 십의자리: 홀수, 일의자리: 0
[11] 십의자리: 홀수, 일의자리: 홀수
[12] 십의자리: 홀수, 일의자리: 짝수
...

2. 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 #곱하기니까 초기값 1로 해줌
for i in range(1, fNum + 1):
        factorialResult *= i

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

-->
정수 입력: 15
합 결과: 120
홀수 합 결과: 64
짝수 합 결과: 56
팩토리얼 결과: 1,307,674,368,000

? 3. '*'를 이용해서 다음과 같이 다양한 모양을 출력해보자(횟수)

for i in range(1, 6):
    for j in range(i): #i가 3이 들어오면 3만큼 반복
        print('*', 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 i1 in range(5, 0, -1):  # 띄어쓰기 + 출력
    for i2 in range(5 - i1):
        print(' ', end='')
    for i3 in range(i1):
        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: #i는 행, j는 열. 행과 열이 같을 때만
            print('*', end='')
        else:
            print(' ', end='')
    print()

-->
*    
 *   
  *  
   * 
    *

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

  • 버스 A, B(공배수로 계산)
    오전 6시 첫차, 오후 23시 운행종료
    버스 A: 15분 간격 운행
    버스 B: 13분 간격 운행

  • 버스 C
    오전 6시 20분 첫차, 오후 22시 운행종료
    버스 C: 8분 간격 운행

busA = 15
busB = 13
busC = 8

totalMin = 60 * 17 #총 17시간 운행
for i in range(totalMin + 1):
    if i < 20 or i > (totalMin - 60): # 6시 20분 전
        if i % busA == 0 and i % busB == 0:
            print('busA와 busB가 동시 정차!', end='')
            hour = 6 + i // 60 # 6시에 시작, i를 60으로 나눈 몫이 시간
            min = i % 60
            print('\t{}:{}'.format(hour, min))

    else:
        if i % busA == 0 and i % busB == 0:
            print('busA와 busB가 동시 정차!', end='')
            hour = 6 + i // 60 # 6시에 시작, i를 60으로 나눈 몫이 시간
            min = i % 60
            print('\t{}:{}'.format(hour, min))
        elif i % busB == 0 and i % busC == 0:
            print('busB와 busC가 동시 정차!', end='')
            hour = 6 + i // 60 # 6시에 시작, i를 60으로 나눈 몫이 시간
            min = i % 60
            print('\t{}:{}'.format(hour, min))
        elif i % busA == 0 and i % busC == 0:
            print('busA와 busC가 동시 정차!', end='')
            hour = 6 + i // 60 # 6시에 시작, i를 60으로 나눈 몫이 시간
            min = i % 60
            print('\t{}:{}'.format(hour, min))

? 5. 톱니가 각각 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)))

-->

GearA 톱니 수 입력:8
GearB 톱니 수 입력:18
최초 만나는 톱니수(최소공배수): 72톱니
gearA 회전수: 9회전
gearB 회전수: 4회전

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

  • 연도가 4로 나눠떨어지고, 100으로 나눠떨어지지 않으면 윤년이다
    또는 연도가 400으로 나눠떨어지면 윤년이다
year = int(input('연도 입력: '))

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

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

0개의 댓글