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