학습내용
#1 : while문의 기본 구조
while 문은 조건문이 참인 동안에 while 문 아래의 문장이 반복되어 수행.
while <조건문>:
<수행할 문장1>
<수행할 문장2>
<수행할 문장3>
- 줄 간격을 잘 맞춰야(들여 쓰기) while문이 정상적으로 작동.
- 조건을 만족할 동안 수행할 문장을 수행함으로 끝을 꼭 설정해주어야 함.
- <조건문>이 참이면 <수행할 문장 1,2,3>을 수행하고 다시 <조건문> 점검 후 참이면 반복.
click = 0
while click < 5:
click = click + 1
print("마우스를 %d번 클릭하였습니다."%click)
if click == 5:
print("수고하셨습니다.")
# 마우스를 1번 클릭하였습니다.
# 마우스를 2번 클릭하였습니다.
# 마우스를 3번 클릭하였습니다.
# 마우스를 4번 클릭하였습니다.
# 마우스를 5번 클릭하였습니다.
# 수고하셨습니다.
- click이 5보다 작을 때 "마우스를 click 번 클릭하였습니다." 실행.
- 5가 되면 if문의 "수고하셨습니다." 출력.
sel = '''
1. Apple
2. Banana
3. Grape
4. Quit
Enter number: '''
number = 0
while number !=4:
print(sel)
number = int(input())
- input 값에 따라 while문을 반복.
- input 값이 4가 아니면 반복 실행, 4라면 중지.
#2 : while문 중단(break)
while문은 조건문이 참인 동안 반복해서 while문 안의 내용을 반복적으로 수행하는데, 중간에 이를 중단시키고 싶을 경우 break를 사용한다.
drink = 3
money = 1000
while money:
print('음료수 판매 중')
drink = drink - 1
print('남은 음료수: %d' %drink)
if drink == 0:
print('음료수 판매 중단')
break
# 음료수 판매 중
# 남은 음료수: 2
# 음료수 판매 중
# 남은 음료수: 1
# 음료수 판매 중
# 남은 음료수: 0
# 음료수 판매 중단
- money는 정수값인데, 정수를 조건문에서 사용했을 때 값이 '0'이 아니면 참.
- 따라서, money는 참이기에 '음료수 판매 중'이 실행된다.
- 이는 무한대로 반복될 수 있기에 if문을 추가하여 drink가 0일 때 break를 실행.
- break는 자신과 가장 가까운 반복문을 탈출시킴.
1) 자판기 작동 예시
can = 3
while True:
money = int(input('카드나 현금을 넣어주세요'))
if money == 1000:
print('음료수 지급')
can = can -1
elif money > 1000:
print('거스름돈: %d, 음료수 지급' %(money-1000))
can = can -1
else:
print('지불 금액 반환')
print('남은 음료수 : %d' %can)
if can == 0:
print('재고 부족, 판매 중단')
break
# 카드나 현금을 넣어주세요1000
# 음료수 지급
# 카드나 현금을 넣어주세요1500
# 거스름돈: 500, 음료수 지급
# 카드나 현금을 넣어주세요1200
# 거스름돈: 200, 음료수 지급
# 재고 부족, 판매 중단
- money가 1000이라면 음료수를 지급하고 can의 값을 1 줄인다.
- money가 1000보다 크다면 음료수를 지급하고 can의 값을 줄이고, 거스름돈을 출력.
- 그것이 아니라면(1000보다 작은 경우) 지불 금액 반환, 남은 음료수를 출력.
- 만약 can의 값이 1이라면(can의 재고가 없다면) '재고 부족, 판매 중단'을 출력하고 break.
#3 : while문의 맨 처음으로 돌아가기(continue)
while문 안의 문장을 수행할 때 입력 조건을 검사해서 조건이 맞지 않으면 while문을 빠져나간다. 이때 continue를 사용하면 while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아간다.
a = 0
while a < 10:
a = a + 1
if a % 2 == 0: continue
print(a)
# 1
# 3
# 5
# 7
# 9
- a가 10보다 작다면 a를 1씩 증가(a = a + 1)시킨다.
- 만약 a를 2로 나눈 나머지가 0이라면(if a % 2 == 0: continue) 다시 맨 처음(조건문)으로 돌아간다.
- a를 출력한다.
- 위 과정을 거치면서 짝수이면 출력하지 않는다.
#4 : while문 사용하여 무한 루프(infinite loop, endless loop
무한 루프란 무한히 반복한다는 의미이며 파이썬에서 while문으로 구현할 수 있다.
while True:
수행할 문장1
수행할 문장2
- while문의 조건문이 True이므로 항상 참이 되며, 이에따라 while 문 안에 있는 문장들은 무한히 수행.
while True:
print('무한 루프 실행')
- 무한 루프를 적용해 값을 출력하면 위와 같은 형태가 된다.
- 이미지를 보면 알 수 있듯이 의도한 것이 아니라면 반드시 탈출 할 수 있도록 해야 한다.
- 무한 루프는 대화형 프로그램, sleep(프로그램을 쉬었다 실행, 1초에 한 번 실행)에서 사용된다.
#5 : for문의 기본 구조
for문도 while과 똑같이 반복문이며 기능에서 차이가 거의 없다. 통상적으로 for문의 경우 '반복 횟수가 정해져 있는 경우' 많이 사용. while문은 조건을 만족하는 동안이기에 '조건을 만족할 때 실행되는 프로그램'에서 사용.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
- python에서 for문은 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 수행할 문장들이 수행된다.
list_a = ['a','b','c']
for i in list_a:
print(i)
# a
# b
# c
- i의 0번, 1번, 2번 요소가 차례대로 나오는 것.
a = [(1,2),(5,1),(7,3)]
for (first, last) in a:
print(first+last)
# 3
# 6
# 10
- 0번째에 (1, 2)가 first, last에, 1번째에 (5, 1)이 first, last에, 2번째에 (7, 3)이 first, last에 들어간다.
- 따라서 1+2 = 3, 5+1 = 6, 7+3 = 10이 출력된다.
- a안에 있는 요소를 하나씩 꺼내면서 요소 개수만큼 수행하고 종료한다.
1) for문의 응용
scores = [90, 92, 83, 55, 29, 99, 77]
i = 0
for score in scores:
i = i + 1
if score < 80:
continue
print('%d번 학생 : pass' %i)
# 1번 학생 : pass
# 2번 학생 : pass
# 3번 학생 : pass
# 6번 학생 : pass
- i는 학생의 번호를 나타내줄 변수이며 0에서부터 1씩 증가한다.
- 요소를 끄집어내면서 조건문을 만족하는지 확인.
- score가 80보다 아래이면 continue로 다시 처음으로 돌아간다.
- score가 80 이상이면 n번 학생 : pass가 출력된다.
#6 : range 함수
range 함수는 숫자 리스트를 자동으로 만들어 준다.
a = range(30)
a
# range(0, 30)
a = range(1,31)
a
# range(1, 31)
a = range(1,31,2)
a
# range(1, 31, 2)
- 30개의 요소를 만들어라는 것이며 0부터 시작해 29까지 30개의 숫자가 담긴 리스트가 만들어지는 것.
- 시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용. 이때 끝 숫자는 포함되지 않는다.
- range(시작 숫자, 끝 숫자, 증감)으로 증감을 추가하여 1씩 증가하는 숫자를 원하는 만큼씩 증가하게 할 수 있다.
1) range 함수 예시
1부터 100까지 더하는 프로그램.
add = 0
for i in range(1,101):
add = add + i
print(add)
#5050
- 첫 번째에 0+1=1, 두 번째에 (0+1)+2=3, 세 번째에 (0+1+2)+3=6, ···, 100번째에(0+1+···+99)+100까지 실행.
scores = [90, 92, 83, 55, 29, 99, 77]
for score in range(len(scores)):
if scores[score] < 80:
continue
print('%d번 학생 : pass' %(score+1))
# 1번 학생 : pass
# 2번 학생 : pass
# 3번 학생 : pass
# 6번 학생 : pass
- for문에서 조건을 만족할 때와 똑같은 결과값을 가지지만 접근 방식이 조금 다르다.
- 여기에서는 index를 조회하면서 실행되는 것으로 n번째 인덱스가 80보다 작은 지를 판별.
#7 : 이중 for문(구구단 프로그램)
for i in range(2, 10):
for j in range(1, 10):
print(i*j, end = ' ')
print('')
- 바깥쪽 for문이 실행되면 안쪽 문장들을 한 번 반복.
- i가 2일 때 j는 안에서 또 for문이 동작한다. i가 2일 때 j는 9번(1~9) 실행된다.
- i가 3일 때도 j는 9번(1~9) 실행된다. 반복.
- end = ' ' 줄 바꿈을 하지 않고, 한 칸 띄어쓰기한다는 의미.
- 마지막에서 print(' ')를 사용해 두 번째 for문이 끝나면 결과값이 다음 라인부터 출력.
#8 : 리스트 내포 사용하기(list comprehension)
리스트 안에 for문을 포함하는 것을 리스트 내포라 하며, 지능형 리스트라 불리기도 함.
1) 옛날 방식
#옛날 방식
a = [1,2,3,4,5]
b = []
for i in a:
b.append(i*7)
print(b)
#[7, 14, 21, 28, 35]
- a안에서 1~5까지 하나씩 끄집어낸다.
- b에 i와 7을 곱한 값을 추가해라.
- b를 출력할 경우 a의 요소에 7이 곱해진 값이 출력된다.
2) 리스트 내포
#리스트 내포
a = [1,2,3,4,5]
b = [i*7 for i in a]
print(b)
#[7, 14, 21, 28, 35]
- 위와 똑같은 결과를 가져오는 리스트 내포.
3) 리스트 내포에 조건문 추가
#리스트 내포에 조건문 추가
a = [1,2,3,4,5]
b = [i*7 for i in a if i % 2 == 1]
print(b)
#[7, 21, 35]
- i를 하나씩 가져오는데 그것을 2로 나눈 나머지가 1이라면(홀수라면) 7배를 해서 리스트에 저장해라.
4) 리스트 내포 사용법
# 리스트 내포의 일반적인 문법
[표현식 for 항목 in 반복가능객체 if 조건문] #if 조건문 생략 가능
# 리스트 내포 for문 2개 이상 사용
[표현식 for 항목 in 반복가능객체1 if 조건문1
for 항목 in 반복가능객체2 if 조건문2
...
for 항목 in 반복가능객체n if 조건문n]
- 리스트 내포는 위와 같이 사용할 수 있으며 다중 for문 역시 구현이 가능하다.
times = [x*y for x in range(2,10)
for y in range(1,10)]
print(times)
#[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
- 위에서 진행한 구구단 프로그램 만들기를 리스트 내포 형태로도 만들 수 있다.
느낀 점
연습이 많이 필요하다. 손에 익고, 눈에 익을 때까지 반복 학습이 필요한 영역인 것 같다.
- while : 조건을 만족(조건을 만족하는 동안)
- for - in : 리스트 안에(가지고 있는 시퀀스를 조회할 경우)
- for - range : 횟수(횟수가 정해진 경우)
'파이썬 > Basics(기초)' 카테고리의 다른 글
[Python] 14. 클래스(class), 생성자(Constructor), 상속(inheritance) (0) | 2021.10.11 |
---|---|
[Python] 13. 함수(function), 매개변수, 키워드 파라미터 (0) | 2021.10.09 |
[Python] 11. 변수(variable)의 복사와 참조 (0) | 2021.10.06 |
[Python] 10. 불(Bool), 조건문(if, elif, else) (0) | 2021.10.06 |
[Python] 9. 딕셔너리(dictionary), 데이터 만들기 (0) | 2021.10.05 |
댓글