📗 4일차 공부 내용 요약
[ 파이썬 연습문제 풀이]
1. 조건문 : 단일 조건문, 양자택일 조건문 등 다양한 조건문을 작성해보는 연습문제를 풀었다.
2.반복문 : for문, while문을 활용해 최소공배수 등을 구하는 연습문제를 풀었다.
📖 4일차 공부 내용 자세히
※ 기억에 남는 문제 위주로 기재해본다
1. 조건문 연습문제 풀이
Q.미세먼지 비상저감조치로 차량 운행 제한 프로그램을 만들어보자
- 미세먼지 츨정 수치가 150 이하면 차량 5부제 실시
- 미세먼지 측정 수치가 150을 초과하면 차량 2부제 실시
- 미세먼지 수치, 차량 종류, 차량번호를 입력하면 운행 가능 여부 출력
import datetime
today = datetime.datetime.today()
day = today.day
dust = int(input('미세먼지 수치 입력 : '))
car = int(input('차량 종류 선택. 1.승용차 2.영업용차 '))
carNumber = int(input('차량 번호 입력 : '))
carNumberE = int(carNumber % 1000)
limitDust = 150
print('-'*40)
print(today)
print('-'*40)
if dust > limitDust and car ==1 : # 150 초과, 승용차, 차량 2부제
if (day %2) == (carNumber %2) : #나머지가 같으니까, 둘 다 짝수/홀수로 같게 된다
print('차량 2부제 적용')
print('차량 2부제로 금일 운행제한 대상 차량입니다')
else:
print('금일 운행 가능합니다')
if dust > limitDust and car == 2 : # 150 초과, 영업용, 차량 5부제
if (day % 5) == (carNumber % 5): # 5부제 = 5로 나눈 나머지
print('차량 5부제 적용')
print('차량 5부제로 금일 운행제한 대상 차량입니다')
else:
print('금일 운행 가능합니다')
if dust <= limitDust : # 150 이하
if (day % 5) == (carNumber % 5):
print('차량 5부제 적용')
print('차량 5부제로 금일 운행제한 대상 차량입니다')
else:
print('금일 운행 가능합니다')
print('-'*40)
'''
<결과>
미세먼지 수치 입력 : 1
차량 종류 선택. 1.승용차 2.영업용차 2
차량 번호 입력 : 1277
----------------------------------------
2023-01-07 02:30:40.175076
----------------------------------------
차량 5부제 적용
차량 5부제로 금일 운행제한 대상 차량입니다
----------------------------------------
'''
Q. PC 에서 난수를 발생하면 사용자가 맞추는 게임을 만들어보자.
- PC가 난수(1~1000)을 발생하면 사용자가 숫자(정수)를 입력한다.
- 사용자가 난수를 맞추면 게임이 종료된다.
- 만약, 못 맞추게 되면 난수와 사용자 숫자의 크고 작음을 출력한 후 사용자한테 다시 기회를 준다
- 최종적으로 사용자가 시도한 횟수를 출력한다
import random
comNum = random.randint(1,1000)
cnt = 0
gameFlag = True
while gameFlag : #while 에서 flag 활용
cnt += 1
userNum = int(input('1에서 1000까지의 정수 입력 : '))
if comNum == userNum :
print('빙고!')
gameFlag = False
else:
if comNum > userNum :
print('난수가 크다!')
else:
print('난수가 작다!')
print('난수 : {}, 시도 횟수 : {}'.format(comNum,cnt))
2. 반복문 연습문제 풀이
Q. 집 앞 버스 정류장에서 학교까지 가는 버스
[ 버스 A, B 운행 정보 ]
-오전 6 시 첫차 : 오후 23 시 운행 종료
- 버스 A : 15 분 간격 운행
-버스 B : 13 분 간격 운영
[ 버스 C 운행 정보 ]
-6 시 20 분 첫차 : 오후 22 시 운행 종료
-버스 C : 8 분 간격 운행
busA = 15
busB = 13
busC = 8
totalMin = 60 * 17 #A와 B는 6시부터 23시까지 총 17시간 운행한다
for i in range(totalMin+1): #★★★ for문을 통해 1분씩 시간이 흐름을 표현했다
if i < 20 or i > (totalMin - 60): #C가 운행하기 전, C 운행 종료 후
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:
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))
'''
< 결과 >
busA와 busB 동시 정차!! 6:0
busB와 busC 동시 정차!! 7:44
busA와 busC 동시 정차!! 8:0
busA와 busB 동시 정차!! 9:15
busB와 busC 동시 정차!! 9:28
busA와 busC 동시 정차!! 10:0
busB와 busC 동시 정차!! 11:12
busA와 busC 동시 정차!! 12:0
busA와 busB 동시 정차!! 12:30
busB와 busC 동시 정차!! 12:56
busA와 busC 동시 정차!! 14:0
busB와 busC 동시 정차!! 14:40
busA와 busB 동시 정차!! 15:45
busA와 busC 동시 정차!! 16:0
busB와 busC 동시 정차!! 16:24
busA와 busC 동시 정차!! 18:0
busB와 busC 동시 정차!! 18:8
busA와 busB 동시 정차!! 19:0
busB와 busC 동시 정차!! 19:52
busA와 busC 동시 정차!! 20:0
busB와 busC 동시 정차!! 21:36
busA와 busC 동시 정차!! 22:0
busA와 busB 동시 정차!! 22:15
'''
Q. 톱니가 각각 n1 개와 n2 개의 톱니바퀴가 서로 맞물려 회전할 때 ,
회전을 시작한 후 처음 맞물린 톱니가 최초로 다시 만나게 될 때까지의
톱니의 수와 각각의 바퀴 회전수를 출력해보자
단 , n2 는 n1 보다 크다
gearAcnt = int(input('GearA 톱니수 입력 : '))
gearBcnt = int(input('GearB 톱니수 입력 : '))
gearA = 0
gearB = 0 #회전하면서 누적되는 톱니수
leastNum = 0 #최소공배수
flag = True
while flag :
if gearA != 0 : #기어가 회전을 시작하면
if gearA != leastNum : #최소공배수가 아직 안됬다면
gearA += gearAcnt #계속 회전
else:
flag = False
else:
gearA += gearAcnt #기어 회전 시작
if gearB !=0 and gearB % gearAcnt == 0: # 기어B가 회전하는 동안 A와 맞닿았다면
leastNum = gearB
else:
gearB += gearBcnt #기어 회전 시작, 계속 회전
print('최초 만나는 톱니수(최소공배수) : {}톱니'.format(leastNum))
print('gearA 회전 수 : {}회전'.format(int(leastNum/gearAcnt)))
print('gearB 회전 수 : {}회전'.format(int(leastNum/gearBcnt)))
'''
<결과>
GearA 톱니수 입력 : 4
GearB 톱니수 입력 : 18
최초 만나는 톱니수(최소공배수) : 36톱니
gearA 회전 수 : 9회전
gearB 회전 수 : 2회전
'''
➰ 4일차 후기
반복문에서 for과 while문을 사용하는 경우를 효율적으로 구분해 활용할 것.
반복문을 통해 최소공배수, 공배수를 알아내는 예제의 코드들을 한 번 더 살펴보면서 반복문의 구조에 익숙해져야 겠다.
반복문의 무한굴레다 ~
※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.
'제로베이스 데이터 스쿨 > 일일 스터디 노트' 카테고리의 다른 글
6일차 스터디노트/ 파이썬 객체 지향 프로그래밍, 클래스, 예외 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.09 |
---|---|
5일차 스터디노트 / 파이썬 함수, 모듈, 패키지 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.08 |
3일차 스터디노트/ 파이썬 반복문, 연습 문제 풀이(데이터와 변수, 연산자) / 제로베이스 데이터 취업 스쿨 (0) | 2023.01.06 |
2일차 스터디노트 / 파이썬 데이터 입·출력, 연산자, 조건문 / 제로베이스 데이터 취업 스쿨 (0) | 2023.01.05 |
1일차 스터디노트 / 파이썬 설치, 변수, 자료형 / 제로베이스 데이터 취업 스쿨 (0) | 2023.01.03 |