파이썬 기초를 활용한 연습문제까지 공부한 내용을 정리했다.😎
🔻 나의 풀이
# 1부터 100까지 반복하는 과정에서
# 일의자리와 십의자리의 홀짝을 구분하는 함수를 만들어보자.
for i in range(101):
if i < 10:
if i % 2 != 0:
print('[{}]: 홀수!'.format(i))
else:
print('[{}]: 짝수!'.format(i))
else:
ten = i // 10 # 십의 자리 수
one = i % 10 # 일의 자리 수
if one == 0 and ten % 2 != 0:
print('[{}] 십의자리: 홀수!!, \t 일의자리: 0'.format(i))
elif one == 0 and ten % 2 == 0:
print('[{}] 십의자리: 짝수!!, \t 일의자리: 0'.format(i))
elif one % 2 != 0 and ten % 2!= 0:
print('[{}] 십의자리: 홀수!!, \t 일의자리: 홀수!!'.format(i))
elif one % 2 != 0 and ten % 2 == 0:
print('[{}] 십의자리: 짝수!!, \t 일의자리: 홀수!!'.format(i))
elif one % 2 == 0 and ten % 2 != 0:
print('[{}] 십의자리: 홀수!!, \t 일의자리: 짝수!!'.format(i))
elif one % 2 == 0 and ten % 2 == 0:
print('[{}] 십의자리: 짝수!!, \t 일의자리: 짝수!!'.format(i))
위의 풀이가 비효율적이고, 복잡하다는 것을 알게됐다. 강사님의 풀이와 비교해보자.
🔻 강사님 풀이
for i in range(101):
if i < 10:
if i % 2 != 0:
print('[{}]: 홀수!'.format(i))
else:
print('[{}]: 짝수!'.format(i))
else:
ten = i // 10 # 십의 자리 수
one = i % 10 # 일의 자리 수
result10 = ''
if ten % 2 == 0:
result10 = '짝수'
else:
result10 = '홀수'
result1 = '0' # 일의 자리수는 0으로 초기화해놓고
if one != 0: # 0이 아닐 경우에만 아래를 시행
if one % 2 == 0:
result1 = '짝수'
else:
result1 = '홀수'
print('[{}] 십의자리: {}!!, \t 일의자리: {}'.format(i, result10, result1))
🔻 나의 풀이
# 1부터 사용자가 입력한 정수까지의 합,홀수의 합,짝수의 합 그리고 팩토리얼을 출력하는 프로그램을 만들어보자.
num = int(input('정수 입력: '))
# 일반 합
sum = 0
for i in range(1,num+1):
sum += i
# 홀수 합
oddsum = 0
for i in range(1,num+1,2):
oddsum += i
# 짝수 합
evensum = 0
for i in range(0,num+1,2):
evensum += i
# 팩토리얼
fact = 1
for i in range(num,1,-1):
fact *= i
print('합 결과: {}'.format(sum))
print('홀수 합 결과: {}'.format(oddsum))
print('짝수 합 결과: {}'.format(evensum))
print('팩토리얼 결과: {}'.format(format(fact,',')))
1. 별이 1 ~ 5개로 나타내는 일반적인 피라미드 모형
# 별이 1 ~ 5개까지 있는 피라미드 모양을 만들어보자.
for i in range(1,6):
print('*'*i)
🔻 강사님 풀이
for i in range(1,6):
for j in range(i):
print('*', end='')
print()
2. 1번의 모양에서 오른쪽으로 붙은 피라미드 모형
# 별이 1 ~ 5개까지 있는 피라미드 모양에서 오른쪽으로 붙은 모양
for i in range(1,6):
print(' '*(6-i) + '*'*i)
🔻 강사님 풀이
for i in range(1,6):
for j in range(6-i-1):
print(' ', end='')
for k in range(i):
print('*', end='')
print()
3. 별이 5 ~1개로 줄어드는 피라미드 모형
# 별이 5 ~ 1개로 줄어드는 피라미드 모형
for i in range(5,0,-1):
print('*'*i)
🔻 강사님 풀이
for i in range(5,0,-1):
for j in range(i):
print('*', end='')
for k in range(5-i):
print(' ', end='')
print()
4. 3번에서 오른쪽으로 붙은 피라미드 모형
# 3번에서 오른쪽으로 붙은 모형
for i in range(5,0,-1):
print(' '*(5-i) + '*'*i)
🔻 강사님 풀이
for i in range(5,0,-1):
for k in range(5-i):
print(' ', end='')
for j in range(i):
print('*', end='')
print()
5. 증가하다가 감소하는 피라미드 모형
# 1 ~ 5로 증가했다가 5 ~ 1로 줄어드는 모형 -> 전체 반복되는 줄은 9줄이다
for i in range(1,10):
if i < 5: # 5줄 이전까지는
for j in range(i):
print('*', end='')
else:
for k in range(10-i):
print('*', end='')
print()
6. 각 줄에 해당하는 칸에만 '*'가 붙는 모형
# 1 ~ 5까지 증가하는데, 줄 수에 해당하는 곳에서만 '*' 찍기
for i in range(1,6): # i : 1 ~ 5
for j in range(1,6): # j : 1 ~ 5
if i == j:
print('*', end='')
else:
print(' ', end='')
print()
7. 6과 반대되는 모형
# 위에서 반대
for i in range(1,6): # 1 ~ 5까지 내려가면서
for j in range(5,0,-1): # 5 ~ 1까지 내려오면서
if i == j:
print('*', end='')
else:
print(' ', end='')
print()
8. 1 ~ 9까지 홀수만큼 증가하다가 다시 감소하는 모형
최소 공배수 문제
# 버스 a,b,c 가 있을 때
# 2대 이상의 버스가 정차하는 시간대를 구해보자.
# 버스 a,b : 오전 6시 첫차, 오후 23시 운행 종료
# 버스 a : 15분 간격, b : 13분 간격
# 버스 c : 6시 20분 첫차, 오후 22시 운행 종료, 8분 간격
busa = 15
busb = 13
busc = 8
# 운행하는 시간 -> 분으로 치환
totalMin = 60 * (23 - 6)
for i in range(totalMin+1): #분 간격으로 돌면서 중복되는 시간을 확인
# a와 b만 운행하는 시간대 : 6시 ~ 6시 20분 사이, 22시 ~ 23시 사이
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))
# a,b,c 모두 운행하는 시간대
else:
if i % busa == 0 and i % busb == 0: # 동시에 정차하는 시간
print('busA와 busB 동시 정차!', end='')
hour = 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
min = i % 60
print('\t {}:{}'.format(hour,min))
elif i % busb == 0 and i % busc ==0:
print('busB와 busC 동시 정차!', end='')
hour = 6 + i // 60
min = i % 60
print('\t {}:{}'.format(hour,min))
최소 공배수 문제
# 톱니의 개수가 n1, n2인 톱니바퀴가 맞물려 움직일 때,
# 회전을 시작한 후 처음 맞물린 톱니가 최초로 다시 만나게 될때까지의 톱니수와 각각의 바퀴회전수를 출력하자. (n2가 n1 보다 크다)
n1 = int(input('톱니 A 톱니수 입력: '))
n2 = int(input('톱니 B 톱니수 입력: '))
print('톱니 A의 수: {}, 톱니 B의 수: {}'.format(n1,n2))
# n1과 n2의 최소공배수 구하기
list = []
for i in range(1, n1*n2+1):
if i % n1 == 0 and i % n2 == 0:
list.append(i)
min_num = min(list) # 최소공배수
n1_circle = min_num // n1
n2_circle = min_num // n2
print('최초 만나는 톱니수(최소공배수): {}톱니'.format(min_num))
print('톱니 A 회전수: {}회전'.format(n1_circle))
print('톱니 B 회전수: {}회전'.format(n2_circle))
1번. 간단한 조건
# 윤년 계산기를 만들어보자
# 연도가 4로 나누어떨어지고, 100으로 나누어떨어지지 않으면 윤년이다.
# 또는 연도가 400으로 나누어떨어지면 윤년이다.
year = int(input('연도 입력: '))
result = ''
if (year % 4 == 0 and year% 100 != 0) or (year % 400 == 0):
result = '윤년!!'
else:
result = '평년'
print('{}년: {}'.format(year, result))
파이썬 중급 학습 예정이다. 어려워져도 포기하지 말자🔥