예제 코드는 IDLE 에디터에서 작성했다. 에디터 창에서 바로 프로그램을 실행할 땐 단축키 F5를 사용한다.
01 while문
01-1 while 문의 구조
while문은 조건문이 참인 동안에 while문 아래의 문장을 반복해서 수행한다.
기본 구조는 다음과 같다.
while 조건문:
수행할 문장 1
수행할 문장 2
수행할 문장 3
...
'열 번 찍어 안 넘어가는 나무 없다'라는 속담을 구현한 예제를 보자.
#while문
treeHit = 0
while treeHit < 10:
treeHit += 1
print("나무를 %d번 찍었습니다." %treeHit)
if treeHit == 10: #만약 나무를 10번 찍으면
print("나무 넘어갑니다.")
- while문 속 if문에서 treeHit가 10이 되면 '나무 넘어갑니다.'라는 문장을 출력한다.
- 그러고 나면 treeHit < 10 조건문이 거짓이 되므로 while문을 빠져나간다.
01-2 while문 빠져나가기
- while문은 조건문이 참인 동안 계속해서 그 안의 내용을 반복 수행한다.
- 이때 강제로 while문을 빠져나가고 싶다면 break문을 사용한다.
커피 자판기 사용을 구현한 예제를 보자.
#while loop: break.py
coffee = 10
while True:
money = int(input("돈을 넣어 주세요: "))
if money == 300:
print("커피를 줍니다.")
coffee = coffee - 1
elif money > 300:
print("거스름돈 %d를 주고 커피를 줍니다" %(money - 300))
coffee = coffee - 1
else:
print("돈을 다시 돌려주고 커피를 주지 않습니다.")
print("남은 커피의 양은 %d개 입니다" %coffee)
if coffee == 0:
print("커피가 다 떨어졌습니다. 판매를 중지합니다")
break
coffee가 0이 되자 break가 실행되어 while문이 종료되었다.
01-3 while문과 continue문
- while문은 문장을 수행할 때 조건문을 보고 거짓이면 while문을 빠져나간다.
- 그런데 프로그래밍을 하다 보면 while문을 빠져나가지 않고 처음으로 돌아가게 만들고 싶은 경우가 있다.
- 이때 사용하는 것이 continue문이다.
1부터 10까지의 숫자 중 홀수만 출력하는 예제를 보자.
#while loop: continue.py
a = 0
while a < 10:
a = a + 1
if a % 2 == 0:continue #짝수면 처음으로 돌아가기
print(a)
- a가 짝수일 때 continue문을 수행해 while문의 맨 처음으로 돌아가게 했다.
- 이때 맨 처음은 조건문(a <10)을 의미한다.
01-4 무한루프
- 무한 루프는 말 그대로 무한히 반복한다는 의미이다.
- 일반 프로그램에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다.
- 파이썬에서 무한 루프는 while문으로 구현할 수 있으며 조건문에 True를 쓴다(항상 참).
무한 루프의 예제를 보자.
#while loop: InfiniteLoop.py
while True:
print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
예제에서처럼 아무 의미 없이 무한 루프를 돌리는 경우는 거의 없지만 이런 식으로 무한 루프를 구현할 수 있다.
* 코드에도 나와있듯이 무한루프를 빠져나올 땐 [Ctrl + C]를 사용한다.
02 for문
- for문은 파이썬의 직관적인 특징을 가장 잘 대변해준다.
- 이는 while문과 비슷한 반복문이며 매우 유용하고 문장 구조가 한눈에 들어온다는 장점이 있다.
02-1 for문의 구조
기본 구조는 다음과 같다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장 1
수행할 문장 2
...
for문은 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례대로 변수에 대입해 '수행할 문장 1', '수행할 문장 2' 등을 수행한다.
전형적인 for문의 예제를 보자.
#for loop
test_list = ['one', 'two', 'three']
for i in test_list:
print(i)
이를 응용하면 다음과 같이 사용할 수 있다. 시험 결과를 알려주는 프로그램을 구현해보자.
#for loop: marks1.py
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number += 1
if mark >= 60:
print("%d번 학생은 합격입니다." %number)
else:
print("%d번 학생은 불합격입니다." %number)
- 프로그램을 실행하면 mark 변수에 차례대로 marks 리스트의 값이 들어간다.
- 번호를 붙이기 위해 number 변수도 함께 사용했다.
02-2 for문과 continue문
for문에서도 while문과 마찬가지로 continue문을 만나면 처음으로 돌아간다.
앞 시험 결과 프로그램에 continue문을 사용해보자.
#for loop: marks2.py
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number += 1
if mark < 60: continue #불합격인 경우
print("%d번 학생 축하합니다. 합격입니다." %number)
점수가 60 미만이라 불합격인 경우 continue문을 사용해 처음으로 돌아가게 했다.
02-3 range 함수
for문은 숫자 리스트를 자동으로 만들어주는 range함수와 함께 사용하는 경우가 많다.
range함수의 형태는 다음과 같다.
range(시작 숫자, 끝 숫자)
*이때 끝 숫자는 리스트에 포함되지 않는다.
앞 시험 결과 프로그램에 range함수를 사용해보자.
#for loop: marks3.py
marks = [90, 25, 67, 45, 80]
number = 0
for number in range(len(marks)):
if marks[number] < 60: continue
print("%d번 학생 축하합니다. 합격입니다." %(number+1))
- 리스트 안의 요소 개수를 돌려주는 len함수를 사용했다.
- len(marks)는 5가 되고 number 변수에는 차례로 0부터 4까지의 숫자가 들어간다.
- 번호를 1부터 출력하기 위해 %(number+1)이라 작성했다.
02-4 리스트 내포
리스트 안에 for문을 사용하는 리스트 내포(List comprehension)를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
리스트 내포의 구조는 다음과 같다.
[표현식 for 항목 in 반복 가능 객체 if 조건]
*이때 if 조건 부분은 생략 가능하다.
리스트 내포 사용 전과 후를 비교해보자.
#리스트 내포 사용 전
a = [1,2,3,4]
result = []
for num in a:
result.append(num*3)
print(result)
#리스트 내포 사용 후
a = [1,2,3,4]
result = [num * 3 for num in a]
print(result)
둘 다 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담는 예제이다. 결괏값은 아래와 같다.
리스트 내포를 사용해서 구구단을 출력해보자.
#for loop: ListComprehention2.py
result = [x*y for x in range(2,10)
for y in range(1,10)]
print(result)
나무 속담도 그렇고, 커피 자판기도 그렇고 점프 투 파이썬 책은 예제가 참 참신하다🤣 3일 차 공부도 끝끝
이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.
'Programming > Python' 카테고리의 다른 글
Do it! 공부단 4일차 | ch04 프로그램의 입력과 출력_사용자 입출력과 파일 (0) | 2021.03.10 |
---|---|
Do it! 공부단 4일차 | ch04 프로그램의 입력과 출력_함수 (0) | 2021.03.10 |
Do it! 공부단 3일차 | ch03 제어문_if 문 (0) | 2021.03.04 |
Do it! 공부단 2일차 | ch02 자료형_딕셔너리, 집합, 불 (0) | 2021.03.04 |
Do it! 공부단 2일차 | ch02 자료형_리스트와 튜플 (0) | 2021.03.04 |