본문 바로가기
제로베이스 데이터 스쿨/일일 스터디 노트

3일차 스터디노트/ 파이썬 반복문, 연습 문제 풀이(데이터와 변수, 연산자) / 제로베이스 데이터 취업 스쿨

by 김뎀뎀 2023. 1. 6.

📗 3일차 공부 내용 요약

[ 파이썬 ]

1. 반복문 : for~, while~ 등 반복문에 대해 배웠다.

2. 연습문제 풀이 : 그동안 학습한 '데이터와 변수'와 '연산자'에 대한 연습문제를 풀고, 해설을 학습했다.

 


📖  3일차 공부 내용 자세히

1. 반복문

■ 반복문?

  • 반복문이란 특정 실행을 반복하는 것이다
  • 반복문을 사용하면 프로그래밍이 간결하고 유지 보수가 쉽다

 

■ 반복문의 종류

  1. 횟수에 의한 반복 : 횟수 지정 → 횟수만큼 반복 실행 [ for문 ]
  2. 조건에 의한 반복 : 조건지정  → 조건을 만족할 때까지 반복 실행 [ while 문 ]

 

for ~ in range ( 시작, 끝, 단계 )
  • 단계 매개 변수 생략 : 단계가 1인 경우에는 생략이 가능하다
  • 시작 매개 변수 생략 : 시작이 0인 경우에는 생략이 가능하다
#1부터 10까지 1씩 증가하면서 반복
for i in range(1,11,1)
#1,2,3,4,5,6,7,8,9,10 총 10회 반복

#0부터 9까지 2씩 증가하면서 반복
for i in range(0,10,2)
#0,2,4,6,8 총 5회 반복

#5부터 9까지 1씩 증가하면서 반복
for i in range(5,10,1)
#5,6,7,8,9 총 5회 반복

 

while  조건식 :
          실행문
  • 들여쓰기를 꼭 유의해서 해야 한다.
endNum = 10
n = 0

while n <= endNum : #조건식
	print(n) #실행문
	n += 1   #실행문

 

■ 무한 루프

  • 반복문을 빠져나올 수 없는 경우를 무한 루프라고 한다
  • 조건식에 논리형 데이터를 사용해서 무한루프를 실행시키거나 중단시킬 수 있다.
#하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 때,
#누적 독감 환자 수가 최초 10,000명을 넘는 날짜를 구해보자

import random

day = 0
sumPatient = 0
flag = True

while flag :
    dailyPatient = random.randint(50,100)
    sumPatient += dailyPatient
    day += 1
    print('{}일 환자 수 : {}, 누적 환자수 : {}'.format(day, dailyPatient, sumPatient))

    if sumPatient >= 10000 :
        flag = False

 

■ 반복문 제어

continue
  • 반복 실행 중 continue를 만나면 실행을 생략하고, 다음 반복 실행문으로 넘어간다
for i in range(100):
	if i % 7 != 0
		continue  #이하 반복 실행 생략

	print('{}는 7의 배수입니다.'.format(i))

 

else
  • else의 실행문은 반복이 종료된 후 실행된다
cnt = 0

for i in range(100):
	if i % 7 != 0
		continue  #이하 반복 실행 생략

	print('{}는 7의 배수입니다.'.format(i))
  cnt += 1

else:
	print('99까지의 정수 중 7의 배수는 {}개입니다.'.format(cnt))

 

break
  • 반복 실행 중 break를 만나면 반복문을 빠져나온다.
num = 0

while True :
	print('Hello~')
	
	num+=1
	if (num>=5):
		break

2. 연습문제 풀이 

새로 알게 된 함수 

len ( ) 문자의 길이 반환
변수명 . find( ) 특정 문자열의 위치를 찾아 반환함
str[0] str에 저장된 문자열에서 첫 번재 문자를 반환함
변수명.isdigit( ) 숫자인지 확인(숫자이면 True, 아니면 False)

 

기억에 남는 문제 

Q. 국어, 영어, 수학 점수 입력 후 총점, 평균, 최고점수 과목, 최저점수 과목, 그리고 최고점수와 최저 점수의 차이를 각각 출력해보자.
kor = int(input('국어 점수 입력 : '))
ing = int(input('영어 점수 입력 : '))
mat = int(input('수학 점수 입력 : '))

total = kor + ing + mat
avg = total/3

maxSbj = '국어'
maxScore = kor

if maxScore < ing : #국어보다 영어가 더 클 경우
    maxSbj = '영어'
    maxScore = ing

if maxScore < mat : 
    maxSbj = '수학'
    maxScore = mat
# 1)위에서 패스 했을 경우(국어보다 영어가 작을 경우), 국어보다 수학이 클 경우 조건에 걸리게 됨
# 2)위 조건을 수행 한 경우, 영어보다 수학이 더 클 경우, 영어보다 수학이 더 안크면 조건문을 패스하게 됨

minSbj = '국어'
minScore = kor

if minScore > ing :
    minSbj = '영어'
    minScore = ing

if minScore > mat :
    minSbj = '수학'
    minScore = mat
    
difScore = maxScore - minScore

print('*'*30)
print('총점 : ',total)
print('평균 : %.2f'%avg)
print('최고 점수 과목(점수) : {}({}))'.format(maxSbj, maxScore))
print('최저 점수 과목(점수) : {}({}))'.format(minSbj, minScore))
print('최고, 최저 점수 차이 : {}'.format(difScore))

 

Q. 상품 가격과 지불 금액을 입력하면 거스름 돈을 계산하는 프로그램을 만들어보자. 
단, 거스름 돈은 지폐와 동전의 개수를 최소로 하고, 1원 단위 절사 한다. 
- 지폐 : 50,000원 / 10,000원 / 5,000원 / 1,000원
- 동전 : 500원 / 100원 / 10원
money50000 = 50000 ; money10000 = 10000 ; money5000 = 5000 ; money1000 = 1000
money500 = 500 ; money100 = 100 ; money10 = 10

money50000cnt = 0 ; money10000cnt = 0 ; money5000cnt = 0 ; money1000cnt = 0
money500cnt = 0 ; money100cnt = 0 ; money10cnt = 0

productPrice = int(input('상품 가격 입력 : '))
payPrice = int(input('지불 금액 : '))


if payPrice > productPrice : ##지불금액이 더 높아야 거스름돈을 줄 수 있다
    changeMoney = payPrice - productPrice
    changeMoney = (changeMoney // 10 ) * 10

print('거스름 돈 : {}(원 단위 절사)'.format(changeMoney))
print('-'*30)

if changeMoney > money50000 : # 50000원보다 커야 50000원을 거슬러 줄 수 있다
    money50000cnt = changeMoney // money50000
    changeMoney %= money50000 # 50000원으로 나누면 나머지가 잔돈이 된다

if changeMoney > money10000 :
    money10000cnt = changeMoney // money10000
    changeMoney %= money10000

if changeMoney > money5000 :
    money5000cnt = changeMoney // money5000
    changeMoney %= money5000

if changeMoney > money1000 :
    money1000cnt = changeMoney // money1000
    changeMoney %= money1000

if changeMoney > money500 :
    money500cnt = changeMoney // money500
    changeMoney %= money500

if changeMoney > money100 :
    money100cnt = changeMoney // money100
    changeMoney %= money100

if changeMoney > money10 :
    money10cnt = changeMoney // money10
    changeMoney %= money10

print('50,000원 {}장'.format(money50000cnt))
print('10,000원 {}장'.format(money10000cnt))
print('5,000원 {}장'.format(money5000cnt))
print('1,000원 {}장'.format(money1000cnt))
print('500원 {}장'.format(money500cnt))
print('100원 {}장'.format(money100cnt))
print('10원 {}장'.format(money10cnt))

print('-'*30)

➰ 3일차 후기

3일차인데 벌써 기억해야 할 것 들이 많다, 쓱 한 번 보면 외워지면 좋으련만.. 반복만이 답인가 보다. 

처음 연습문제를 많이 풀어본 날이 었는데 내가 작성한 코드와, 해설의 코드가 달랐던 문제들이 있었다. 해설의 코드들을 하나씩 꼽아보며 의미를 알아보고 이해하려다 보니 시간이 꽤 걸렸지만, 좀 더 효율적이고 논리적인 코드 작성을 위해서는 어쩔 수 없는 과정인 것 같다. 언젠가 손쉽게 코드 작성하는 날이 오길 빌며...

 

 


※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.