03-2 ~ 03-3 (p.130 ~ p.145)

 

벌써 오늘 3장이 끝났다. 30일치를 반으로 줄이니까 확실히 진도가 빠르다.

아직까지는 이해가 잘 되어서 다행이다. 앞으로도 계속 텐션을 유지했으면 좋겠다.

 

 

이대로 쭉 가즈아

 


 

03-2 while문

 

while문은 반복해서 문장을 수행해야 할 경우에 사용한다. 그래서 반복문이라고도 부른다.

# while문의 기본 구조
while 조건문:
    수행할 문장1
    수행할 문장2
    수행할 문장3
    ...
# 조건문이 참인 동안에 while문 아래의 문장이 반복해서 수행
# while문의 예
treeHit = 0 # 나무를 찍은 횟수
while treeHit < 10: # 나무를 찍은 횟수가 10보다 작은 동안 반복
    treeHit = treeHit + 1 # 나무를 찍으 횟수 1씩 증가
    print("나무를 %d번 찍었습니다." % treeHit)
    if treeHit == 10: # 나무를 열 번 찍으면
        print("나무 넘어갑니다.")

>>> 나무를 1번 찍었습니다.
    나무를 2번 찍었습니다.
    나무를 3번 찍었습니다.
    ...
    나무를 10번 찍었습니다.
    나무 넘어갑니다.

 

while문 강제로 빠져나가기

커피 자판기에서 커피가 떨어졌을 때 판매를 중단하고 '판매 중지' 문구를 사용자에게 보여줘야 하는 상황처럼 조건문이 참이지만 강제로 while문을 빠져나가고 싶을 때는 break문을 사용한다.

# break문이 포함된 커피자판기 코드의 예
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

 

while문의 맨 처음으로 돌아가기

while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우에는 continue문을 사용한다.

# continue문 사용의 예 (1부터 10까지의 숫자 중 홀수만 출력하는 코드)
a = 0
while a < 10:
    a = a + 1
    if a % 2 == 0: continue # a를 2로 나누었을 때 나머지가 0이면 맨 처음으로 돌아간다.
    print(a)

>>> 1
    3
    5
    7
    9

 

무한 루프

파이썬에서 무한 루프는 while문으로 구현할 수 있다.

# 무한 루프의 기본 구조
while True:
    수행할 문장 1
    수행할 문장 2
    ...
# 무한 루프의 예
while True:
    print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")

>>> Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
    .
    .
    .

 

 

03-3 for문

 

파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 for문이다. while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 들어온다는 장점이 있다.

# for문의 기본 구조
for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...
# for문의 예
# 1. 전형적인 for문
test_list = ['one', 'two', 'three']
for i in test_list: # one, two, three를 순서대로 i에 대입
    print(i)

>>> one
    two
    three

# 2. 다양한 for문의 사용
a = [(1, 2), (3, 4), (5, 6)]
for (first, last) in a:
    print(first + last)

>>> 3 # first : 1, last : 2
    7 # first : 3, last : 4
    11 # first : 5, last : 6

# 3. for문의 응용
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생들에게 붙여 줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
    number = number + 1
    if mark >= 60:
        print("%d번 학생은 합격입니다." % number)
    else:
        print("%d번 학생은 불합격입니다." % number)

>>> 1번 학생은 합격입니다.
    2번 학생은 불합격입니다.
    3번 학생은 합격입니다.
    4번 학생은 불합격입니다.
    5번 학생은 합격입니다.

* for문에도 while문처럼 continue문을 사용할 수 있다.

 

for문과 함께 자주 사용하는 range함수

range 함수는 숫자 리스트를 자동으로 만들어 준다.

# range 함수의 사용법
a = range(10)
a
>>> range(0, 10) # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
# range 함수의 예
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
    if marks[number] < 60: continue
    print("%d번 학생 축하합니다. 합격입니다." % (number+1))

>>> 1번 학생 축하합니다. 합격입니다.
    3번 학생 축하합니다. 합격입니다.
    5번 학생 축하합니다. 합격입니다.

# for와 range를 사용한 구구단
for i in range(2, 10)
    for j in range(1, 10)
        print(i * j, end = " ") # 결괏값을 출력할 때 다음 줄로 넘지 않고 그 줄에 계속 출력하기 위해 end 삽입
    print('') # 2단, 3단 등을 구분하기 위해 두 번째 for문이 끝나면 결괏값을 다음 줄부터 출력하게 해주는 문장

>>> 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

 

리스트 내포 사용하기

리스트 안에 for문을 포함하는 리스트 내포를 사용하면 더 직관적으로 만들 수 있다.

# 리스트 내포의 기본 구조
[표현식 for 항목 in 반복 가능 객체 if 조건]

# 2개 이상 사용도 가능
[표현식 for 항목1 in 반복 가능 객체1 if 조건1
        for 항목2 in 반복 가능 객체2 if 조건2
        ...
        for 항목n in 반복 가능 객체n if 조건n]
# 리스트 내포의 예
a = [1, 2, 3, 4]
result = [num * 3 for num in a]
print(result)
>>> [3, 6, 9, 12]

a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]
print(result)
>>> [6, 12]

 

+ Recent posts