[파이썬 기초문법] 연습문제2 (fin)

서대철·2023년 7월 6일
0

강의자료에 남아있는 몇 가지 반복문 연습문제를 더 풀어봤다.
1. 1부터 100까지 숫자 중 10의 자리와 1의 자리 숫자의 홀짝 판단

# 1부터 100까지 숫자 중 십의 자리와 일의 자리가 짝수/홀수인지 구분

for i in range(1, 101):
    if i < 10:
        if i % 2 == 0:
            print('[{}] 일의 자리: 짝수!' .format(i))
        elif i % 2 != 0:
            print('[{}] 일의 자리: 홀수!'.format(i))
    else:
        int10 = i // 10     # 10의 자리 숫자
        int1 = i % 10   # 1의 자리 숫자

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

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

        print('[{}] 십의 자리: {}, \t 일의 자리: {}' .format(i, result10, result1))
  1. 다양한 숫자 조합 출력
# 정수 입력 시 1부터 정수까지의 합, 홀수 합, 짝수 합, 팩토리얼 출력.

input_num = int(input('enter number: '))
sumNum = 0
evenSum = 0
oddSum = 0
factorial = 1

for i in range(1, input_num+1):
    sumNum += i
    if i % 2 == 0:
        evenSum += i
    elif i % 2 != 0:
        oddSum += i
    factorial *= i

print(format(sumNum, ','))
print(format(evenSum, ','))
print(format(oddSum, ','))
print(format(factorial, ','))
  1. 별모양 만들기(개인적으로 제일 까다로웠다)
# number 1
for i in range(1, 6):
    print('*' * i)

# number 1-2 (same output)
for i in range(1, 6):
    for j in range(i):
        print('*', end='')
    print()

# number 2 (blank)
for i in range(1, 6):
    for j in range(6 - i - 1):
        print(' ', end='')
    for k in range(i):
        print('*', end='')
    print()

# number 3 (big to small)
for i in range(5, 0, -1):
    print('*' * i)

# number 3-2
for i in range(5, 0, -1):
    for j in range(i):
        print('*', end='')
    print()

print()
# number 4 (blank)
for i in range(5, 0, -1):
    for j in range(5 - i):
        print(' ', end='')
    for k in range(i):
        print('*', end='')
    print()

print()
# number 5 (side mountain)
for i in range(1, 10):
    if i <= 5:
        for j in range(i):
            print('*', end='')

    else:
        for k in range(10 - i):
            print('*', end='')
    print()
print()
# number 6 (stairwise)
for i in range(1, 6):
    for j in range(1, 6):
        if j == i:
            print('*', end='')
        else:
            print(' ', end='')
    print()

print()

# number 7 (stairwise opposite)
for i in range(5, 0, -1):
    for j in range(i - 1):
        print(' ', end='')
    print('*', end='')
    print()

# number 8 (diamond)
print('diamond')
for i in range(1, 6):
    for j in range(5 - i): # blank
        print(' ', end='')

    for k in range(i * 2 - 1): # star
        print('*', end='')
    print()

for i in range(1, 6):
    for j in range(i - 1):
        print(' ', end='')
    for k in range(11 - (i * 2)):
        print('*', end='')
    print()
  1. 버스 시간표
# 버스 시간표
'''
1.전체 운행시간을 분으로 환산
2. A, B 버스 겹치는 시간만 따로 루프 생성
3. 2개 버스 간 공배수 구하기: i(현재 시간)를 버스 정차 시간으로 나눴을 때 나머지가 0
4. 시간:분으로 환산하여 출력
'''

busA = 15
busB = 13
busC = 8

totalMins = 60 * 17
for i in range(totalMins + 1):
    if i < 20 or i > (totalMins - 60):
        if i % busA == 0 and i % busB == 0:
            print('A B 동시정차', end='')
            hour = 6 + i // 60
            min = i % 60
            print('\t{}시{}분' .format(hour, min))
    else:
        if i % busA == 0 and i % busB == 0:
            print('A B 동시정차', end='')
            hour = 6 + i // 60
            min = i % 60
            print('\t{}시{}분' .format(hour, min))
        if i % busA == 0 and i % busC == 0:
            print('A C 동시정차', end='')
            hour = 6 + i // 60
            min = i % 60
            print('\t{}시{}분' .format(hour, min))
        if i % busB == 0 and i % busC == 0:
            print('B C 동시정차', end='')
            hour = 6 + i // 60
            min = i % 60
            print('\t{}시{}분' .format(hour, min))
  1. 맞물린 톱니바퀴
# 톱니바퀴
# 바퀴1 톱니수와 바퀴2 톱니수 입력 (조건문: 바퀴1 < 바퀴2)
# 바퀴1과 바퀴2의 최소공배수 구하기 (= 다시 만나는 데 걸리는 톱니 수)
# 바퀴1과 바퀴2의 회전수 구하기 (최소공배수 / 바퀴수)
# 바퀴1과 바퀴2의 회전 표현하기

gearA = int(input('enter A number of gear: '))
while True:
    gearB = int(input('enter B number of gear (greater than A): '))
    if gearA >= gearB:
        print('enter a number greater than {}' .format(gearA))
    else:
        break

rotationA = 0
rotationB = 0
minMult = 0

notMeet = True
while notMeet:
    if rotationA != 0:
        if rotationA != minMult:
            rotationA += gearA
        else:
            notMeet = False
    else:
        rotationA += gearA

    if rotationB != 0 and rotationB % gearA == 0:
        minMult = rotationB
    else:
        rotationB += gearB

print('최초 만나는 톱니수(최소공배수): {}톱니' .format(minMult))
print('gear A 회전수: {}회' .format(int(rotationA/gearA)))
print('gear B 회전수: {}회' .format(int(rotationB/gearB)))
  1. 윤년 계산기
# 윤년 조건
# 연도가 4로 나누어 떨어지고 100으로 나누어 떨어지지 않는다.
# 또는 연도가 400으로 나누어 떨어진다.

current_year = int(input('enter year: '))

print('-'*20)
for i in range(current_year, (current_year+20)):
    if (i % 4 == 0 and i % 100 != 0) or (i % 400 == 0):
        leap_year = True
    else:
        leap_year = False

    if leap_year is True:
        str = '윤년'
    else:
        str = '평년'

    print('{}년: \t {}' .format(i, str))

print('-'*20)

<후기>
파이썬의 가장 기초적인 문법이라고는 하지만 결코 쉽진 않았다. 어떤 기능을 구현하기 위해서는 그 기능의 핵심적인 메커니즘을 숫자와 논리로 표현하기 위해 끊임없이 고민해야 했다. 최소공배수가 이럴 때 도움이 된다고 누가 학교 다닐 때 얘기해줬다면 조금은 더 열심히 하지 않았을까 싶다.

0개의 댓글