본문 바로가기

Programming/Python

Do it! 공부단 3일차 | ch03 제어문_while문과 for문

예제 코드는 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! 점프 투 파이썬』을 읽은 후 작성한 글입니다.

 

Do it! 점프 투 파이썬

코딩을 처음 배우는 중·고등학생과 나만의 경쟁력을 갖추고 싶은 문과생, 소프트웨어 시대에 대비하여 새로운 스펙을 준비하려는 직장인까지! 모두 ‘점프 투 파이썬’으로 프로그래밍을 시작

www.easyspub.co.kr