TOC
참고 강의
SWEA 파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법 #20
for문
List, Tuple, 사전, 문자열과 같은 객체 항목들을 순회하며 특정 작업을 반복해서 수행하기 위해 사용
for문의 문법
for 변수 in 순회할 객체:
명령문1
명령문2
for문을 활용한 구구단
무작정 범위 대입
dan = int(input("단을 입력하세요.: "))
for i in (1, 2, 3, 4, 5, 6, 7, 8, 9):
print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
# {2:>2} : 정렬의 방향을 우측으로 하고 자리수는 2자리
tuple이 아니라 list여도 괜찮음
Range 함수 사용
dan = int(input("단을 입력하세요.: "))
for i in range(1, 10, 1):
print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
Range() 함수
- range() 함수는 객체를 생성하는 코드
- range([시작값], 종료값, [증감치])
- 시작값은 범위에 포함, 종료값은 범위에 미포함
- 종료값은 생략할 수 없으나, 시작값과 증감치는 생략 가능
- 인자를 생략할 경우, 시작값의 default는 0, 증감치의 default는 1
# 모두 다 같은 결과를 내는 코드
range(0, 10, 1)
# 시작값(0) 생략
range(10, 1)
# 시작값(0), 증감치(1) 생략
range(10)
[결과]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- 감소하는 range() 함수
range(10, -1, -2)
[결과]
10, 8, 6, 4, 2, 0
사전 객체를 이용한 항목 출력
- 사전(Dictinary) 객체를 이용한다.
dictionary 이용 1
dogs = {1: "골든리트리버", 2: "진돗개", 3: "보더콜리"}
for key in dogs:
print("{0} : {1}".format(key, dogs[key]))
[결과]
1 : 골든리트리버
2 : 진돗개
3 : 보더콜리
dictionary 이용 2
dogs = {1: "골든리트리버", 2: "진돗개", 3: "보더콜리"}
for key, value in dogs.items(): # <class 'dict_items'> 객체 사용
print("{0} : {1}".format(key, value))
# 변수 key와 변수 value에 key 정보와 value 정보를 차례대로 대입 후 print() 함수 실행
[결과]
1 : 골든리트리버
2 : 진돗개
3 : 보더콜리
문자열을 이용한 개별 문자 출력
str = "Star"
for c in str: # Star 를 구성하는 문자 각각이 해당 cycle의 c가 됨
print("{0}".format(c)) # 문자열의 항목을 변수 c에 대입하고 print() 함수 호출
[결과]
S
t
a
r
리스트 객체를 이용해 총점 구하기
scores = [100, 95, 88, 98]
total = 0
for score in scores:
total += score
print("총점 : {0}".format(total))
[결과]
총점 : 381
중첩된 for문
for문 안에 또 다른 for문이 들어있는 형태
중첩된 for문의 문법
for 변수1 in 순회할 객체1:
for 변수2 in 순회할 객체2:
명령문1
명령문2
명령문3
중첩된 for문을 활용한 구구단 출력 코드
dan = range(2, 10)
num = range(1, 10)
for i in dan:
for k in num:
print("{0} X {1} = {2:>2}".format(i, k, i * k))
if k == 9: # True일 경우 각 단 사이에 공백행을 추가하기 위한 구문
print()
k가 9인지 검사하는 if문을 사용하고 싶지 않을 경우
dan = range(2, 10)
num = range(1, 10)
for i in dan:
for k in num:
print("{0} X {1} = {2:>2}".format(i, k, i * k))
print() # 안쪽 for문이 완료되면 바로 print() 함수 호출
while문
bool 값을 반환하는 조건식의 결과에 의해 반복 결정 조건식이 False 값을 반환해요 while문의 반복이 중지되므로 무한반복 방지 고려 필요
while문의 문법
while 조건식 :
명령문1
명령문2
명령문3
while문으로 작성한 구구단 출력 코드
dan = int(input("단을 입력하세요: "))
i = 1
while i < 10: # i가 10일 경우 False를 반환하며 while문 종료
print("{0} X {1} = {2:>2}".format(dan, i, dan * i))
i += 1 # 변수 i의 값을 1씩 증가시킴으로써 전체 while문 제어
while문에서 리스트 객체를 이용해 총점을 구하는 코드
scores = [100, 95, 88, 98] # 리스트형으로 4개의 점수 저장
total = 0
cnt = len(scores) # scores 리스트 내의 항목의 개수
i = 0
while i < cnt:
total += score[i]
i += 1
print("총점 : {0}".format(total))
[결과]
총점 : 381
break문과 continue문
- for문 : 순회할 객체의 마지막 항목까지 반복
- while문 : bool 값을 반환하는 조건식이 False를 반환할 때까지 반복
- break문 : 논리적으로 반복문을 탈출
- continue문 : 이후 코드는 건너뛰고 반복문을 계속 실행
break문
예시. 사용자의 입력값이 문자열 "q"이면 반복문을 빠져나오는 코드
answer = "" # 변수 answer는 공백 문자열("")로 초기화
while True:
answer = input("명령을 입력하세요.\n'q'를 입력하면 프로그램이 종료됩니다. : ")
if answer == "q":
break
print("'{0}'를 입력하셨습니다.".format(answer))
print("프로그램을 종료합니다...")
[결과]
명령을 입력하세요.
'q'를 입력하면 프로그램이 종료됩니다. : a
'a'를 입력하셨습니다.
'q'를 입력하면 프로그램이 종료됩니다. : c
'c'를 입력하셨습니다.
'q'를 입력하면 프로그램이 종료됩니다. : q
프로그램을 종료합니다...
continue문
예시. 1부터 10까지 저장되어 있는 리스트 객체에서 3의 배수를 제외한 합을 구하는 코드
numlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total = 0
for n in numlist:
if n % 3 == 0:
continue # 해당 n 사이클에 대한 코드 진행 종료
total += n
print("3의 배수를 제외한 총합: {0}".format(total))
[결과]
3의 배수를 제외한 총합: 37
for문과 while문을 활용해 프로그램 만들기
문제
[결과1]
*
**
***
****
[결과2]
*
**
***
****
*
**
***
****
[결과3]
*
***
*****
*******
*********
***********
나의 답안
# 문제 1
for i in range(1, 5):
print(i * "*")
# 문제 2
for i in (0, 1):
for j in range(1, 5):
print(j * "*")
# 문제 3.1. for문
for i in range(1, 12, 2):
print("{0:^11}".format(i * "*"))
# 문제 3.2. while문
i = 1
while i <= 11:
print("{0:^11}".format(i * "*"))
i += 2
모범 답안
# -*- coding: utf-8 -*-
# star.py
# Step 1.1. for문
for i in range(1, 5):
print("*" * i)
# Step 1.2. while문
i = 1
while i <= 4:
print("*" * i)
i += 1
# Step 2.1. for문
for i in range(1, 3):
for k in range(1, 5):
print("*" * k)
# Step 2.2. while문
i, k = 1, 1
while i <= 2:
while k <= 4:
print("*" * k)
k += 1
i += 1
k = 1 # 내부 루프를 마치면 외부 루프의 cnt를 하나 늘리고 내부 루프의 cnt 초기화
# Step 3.
i = 5 # 공백의 크기
k = 1 # 별의 개수
i = 1
while i >= 0:
print("{0}{1}".format(" " * i, "*" * (2 * k - 1)))
i -= 1
k += 1