본문 바로가기
Python/PY4E

PY4E Chapter 5. Loops and Iterations

by 전자여우 2022. 8. 5.

1. While문 (While loop)

While문은 특정 조건이 참일 경우 그것이 거짓이 될 때까지 반복하는 반복문이며, while 명령어를 통해 만들 수 있다. 범위 값을 정해주고 하는 반복문이 아니기 때문에 반복을 제어하는 코드를 작성하지 않으면 컴퓨터의 배터리가 다 되거나, 프로그램을 강제 종료하기 전까지 무한 반복된다.

# While문의 일반적인 사용법
n = 5
while n > 0:
    print(n)
    n = n - 1 # 반복문의 제어를 위한 구문. 5번을 돌면 조건이 False가 된다.
print('Blastoff!')
print(n)

# 무한반복문
n = 5
while n > 0:
    print('Lather')
    print('Rinse')
print('Dry off!') # n의 값이 변동을 하지 않아 무한히 반복되기에 이 줄은 실행되지 않는다.

# Zero-trip
n = 0
while n > 0: # 조건을 만족하지 못 하기에 실행되지 않는다.
    print('Lather')
    print('Rinse')
print('Dry off!')

 

2. 반복 제어 요소(loop control statement) break/continue

반복문은 명령어 break와 continue를 이용해서 반복을 제어할 수 있다.

break는 반복을 즉시 탈출하게 해주는 명령어이다.

continue는 현재 진행 중인 반복을 그만두고 반복문의 가장 위로 올라가 다음 반복을 진행하게 해주는 명령어이다.

While True:
    line = input('> ')
    if line == 'done':
        break # line input에 done을 입력하면 반복문을 즉시 탈출해준다.
    if line[0] == '#':
        continue # #으로 시작하는 값을 입력 받으면 스킵하고 다음 반복으로.
    print(line)
print('Done!')

 

3. 유한 반복문 (Definite loop)

유한 반복문은 for문이라고도 한다. 어떠한 집합에 따라 반복되는 반복문이며, for명령어를 통해 만들 수 있다. 만들기 쉽고 반복 변수를 처리할 필요가 없기 때문에 선호되는 반복문이다.

for i in [5, 4, 3, 2, 1]:
	print(i)
print('Blastoff!')

# friends에게 신년 인사를 해주는 프로그램
friends = ['Joseph', 'Glenn', 'Sally']
for friend in friends:
	print('Happy New Year,', friend)
print('Done!')

 

4. 루프 관용구(Loop idioms)

루프 관용구란 루프를 설계할 때 일반적으로 사용하는 패턴이며 일반적으로 아래와 같이 구성된다.

1) 루프를 시작하기 전에 하나 이상의 변수를 초기화한다.

2) for thing in data:

        루프 본문에서 각 항목에 대해 필요한 작업을 수행해 변수를 변경한다.

3) 루프가 완료되면 결과를 확인한다.

# 가장 큰 값 찾기
largest = -1
print('Before', largest) # 처음은 -1로 시작한다.
for num in [9, 41, 12, 3, 74, 15]:
	if num > largest:
    	largest = num
    print(largest, num) # 현재까지 가장 큰 숫자와 루프를 돌고 있는 숫자가 무엇인지 출력
print('After', largest) # 결과 발표


# 반복 횟수 카운팅
count = 0
print('Before', count) # 처음은 0으로 시작한다.
for num in [9, 41, 12, 3, 74, 15]:
	count = count + 1 # 루프가 반복될 때마다 1씩 더해준다. count += 1 로도 표현 가능.
    print(count, num)
print('After', count) # 결과 발표


# 총 합계 구하기
sum = 0
print('Before', 0) # 처음은 0으로 시작한다.
for num in [9, 41, 12, 3, 74, 15]:
	sum = sum + num # 루프마다 sum에 num의 요소를 더해준다. sum += num으로도 표현 가능
    print(sum, num) # 진행상태를 나타내는 출력문   
print('After', sum) # 결과 발표


# 평균값 구하기
count = 0
sum = 0
print('Before', count, sum) # 평균은 총합/개수이기 때문에 두 개의 변수가 필요하다.
for num in [9, 41, 12, 3, 74, 15]:
	count = count + 1 # 횟수 구하기. count += 1 로도 표현 가능.
	sum = sum + num # 총합 구하기. sum += num으로도 표현 가능
    print(count, sum, num)
print('After', sum / count) # 나누기 연산자(/)로 평균을 출력

# 필터링
print('Before') # 변수의 사전 세팅이 필요 없다.
for num in [9, 41, 12, 3, 74, 15]:
    if num > 20:
    	print('Large number', num)
print('After')

# 어떠한 요소의 존재 여부를 True/False로 확인하기
found = False
print('Before', found)
for num in [9, 41, 12, 3, 74, 15]:
    if num == 3:
    	found = True # 찾았다!
    print(found, num)
print('After', found)

# 가장 작은 값 찾기
smallest = None
print('Before')
for num in [9, 41, 12, 3, 74, 15]:
	if smallest is None:
		smallest = num # 없다면 값 채우기
	elif num < smallest:
    	smallest = num # 있다면 크기 비교하기
    print(smallest, num)
print('After', smallest)

명령어 is/is not과 비교 연산자 ==/!=는 공통적으로 비교대상이 서로 같은지, 다른지에 대한 결괏값을 반환하는 요소이다. 다만 ==/!=는 값만을 비교해주고 is/is not은 값과 자료형도 같은지 비교해준다는 점에서 서로 다르다.

예를 들어 이런 식이다.

0 == 0.0 # True
0 is 0.0 # False

x = 2
int(x) != float(x) # False
int(x) is not float(x) # True

 

Assignment

Assignment 5.2는 사용자가 done이라고 입력을 하기 전까지 반복적으로 정수 값을 요구하고, done이 입력되면 숫자 중 가장 크고 가장 작은 숫자를 출력하는 프로그램을 만드는 것이었다. 다만, 사용자가 유효한 숫자 이외의 다른 것을 입력하면 try/except를 사용하여 해당 input을 확인한 뒤 적절한 메시지를 표시하고 해당 input을 무시해야 했다. 코드 체크 시 7, 2, bob, 10, 4를 입력해야 했고, 원하는 출력과 일치하도록 출력 코드 또한 작성해야 했다.

나의 풀이는 아래와 같다.

# ex_5_2
largest = 0
smallest = None
while True:
    num = input("Enter a number: ")
    if num == "done":
        break
    try:
        num = int(num)
        if largest < num:
            largest = num
        if smallest is None:
            smallest = num
        elif smallest > num:
            smallest = num
    except:
        print('Invalid input')

print("Maximum is", largest)
print("Minimum is", smallest)

 

이것으로 PY4E의 첫 번째 강의인 Programming for Everybody를 마치게 되었다.

'Python > PY4E' 카테고리의 다른 글

PY4E Chapter 7. Files  (0) 2022.08.07
PY4E Chapter 6. Strings  (0) 2022.08.05
PY4E Chapter 4. Functions  (0) 2022.08.02
PY4E Chapter 3. Conditional Execution  (0) 2022.08.02
PY4E Chapter 2. Variables, expressions and statements  (0) 2022.08.02

댓글