강의자료에 남아있는 몇 가지 반복문 연습문제를 더 풀어봤다.
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부터 정수까지의 합, 홀수 합, 짝수 합, 팩토리얼 출력.
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, ','))
# 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.전체 운행시간을 분으로 환산
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 톱니수와 바퀴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)))
# 윤년 조건
# 연도가 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)
<후기>
파이썬의 가장 기초적인 문법이라고는 하지만 결코 쉽진 않았다. 어떤 기능을 구현하기 위해서는 그 기능의 핵심적인 메커니즘을 숫자와 논리로 표현하기 위해 끊임없이 고민해야 했다. 최소공배수가 이럴 때 도움이 된다고 누가 학교 다닐 때 얘기해줬다면 조금은 더 열심히 하지 않았을까 싶다.