반복되는 코드를 for문 또는 while문으로 처리할 수 있다.
시퀀스 객체 : list, tuple, 문자열 등과 같이 반복적인 객체를 시퀀스 객체라 함.
변수 : for와 in 사이에 위치한 값(i, j, k 등)을 변수라고도 칭한다.
for 변수 in 시퀀스 객체 :
print(i)
range는 범위라는 의미로 특정 값 사이를 시퀀스로 만들어 준다.
- range(1, 10, 2) 1부터 9까지의 숫자 중에서 2칸씩 건너 뛴 숫자가 생성 됨. - 홀수만 생성.
- range(0, 11, 2) 0부터 10까지의 숫자 중에서 2칸씩 건너 뛴 숫자가 생성 됨. - 짝수만 생성.
num = int(input('정수를 입력하세요 : '))
for i in range(num, 0, -1) : #큰 수부터 적고 -1로 하나씩 줄여감.
print(i)
N = int(input())
for i in range(1, N+1):
print('*' * i)
#시퀀스 1
score = [88, 95, 70, 100, 99]
for s in score :
print('성적 : ', s)
#시퀀스 2
score = [88, 95, 70, 100, 99]
no = 1
for s in score :
print(str(no) + '번 학생의 성적 : ', s)
no += 1
#시퀀스 3
score = [88, 95, 70, 100, 99]
for no in range(len(score)) :
print(str(no + 1) + '번 학생의 성적 : ', score[no])
T = int(input())
for i in range(T):
R, S = list(input().split())
R = int(R)
for j in range(len(S)):
print(S[j] * R, end='')
print('') # 2중 for문의 상위 for문에 print('')을 하여 다음 줄로 넘어가게 해준다
중첩 for문 사용 시 print의 end를
''
으로 지정해서 쉘이 다음 줄로 안 넘어갈 때
참고. BJ 2675 | 문자열 반복
my_list = [2, 3, 4, 5, 6]
total = 0
for i in my_list:
total += i
print(total)
#print를 for안에 넣으니 my_list가 쭉 나열됨
my_list = [2, 3, 4, 5, 6]
total = 0
for i in my_list:
total += i
print(total)
#바깥으로 print를 꺼내니 합한 값이 나옴
for 문은 list나 set, dictionary 등의 data structure 등을 기반으로 코드블록을 반복 실행합니다.
while 문은 특정 조건문이 True 일동안 코드블록을 반복 실행 합니다.
for
문과 마찬가지로 while
문도 break
과 continue
가 있습니다.
for
문과 동일하게 break
는 while
문을 강제종료 하고
continue
는 다음 iteration 으로 넘어갑니다.
시퀀스보다 훨씬 간결하게 쓸 수 있다.
for문에서 인덱스와 요소를 동시에 가져올 수 있다.
enumerate(score, 1)
정수 값은 앞으로 가면 에러가 발생한다.
튜플로 반환된다.
#enumerate
score = [88, 95, 70, 100, 99]
for i, s in enumerate(score, 1) : #1을 붙여 1부터 시작한다
print(str(i) + '번 학생의 성적 : ', s)
#여기만 출력해 봄.
print(list(enumerate(score, 1))) #list 타입으로도 출력 가능하다.
=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1101\test.py ==============================
[(1, 88), (2, 95), (3, 70), (4, 100), (5, 99)] #인덱스, 값이 출력 됨.
>>> seasons = ['Spring', 'Summer', 'Autom', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Autom'), (3, 'Winter')] #인덱스와 값을 반환.
>>> for i, str in enumerate(['aaa', 'bbb', 'ccc'], 1) :
... print(i, str)
...
...
1 aaa
2 bbb
3 ccc
A.enumerate()의 경우 애초에 인덱스를 돌려주는 함수라서 변수를 2개 사용할 수 있다.
한 변수에 zip()으로 두 개의 리스트를 묶은 후에 그 변수를 시퀀스 객체로 놓고 for문 변수를 2개로 설정할 경우 값을 2개로 도출해낼 수 있다.
따라서 for문에서 값을 2개로 받을 수 있는 상황을 만들수만 있다면 for문의 변수는 2개가 될 수 있다.
게시글 <알고리즘 파이썬 문법 총 정리>에도 zip() 함수 정리해둠.
#zip
yoil = ['월', '화', '수', '목', '금', '토', '일']
food = ['갈비탕', '순대국', '파전', '감자탕', '칼국수']
menu = zip(yoil, food)
for y, f in menu :
print('{}요일 메뉴 : {}'.format(y, f))
print(dict(zip(yoil, food))) #dict 타입으로도 출력 가능하다.
조건에 True를 사용하여 무한 사용 가능
종료법ctrl
+c
#사용자 입력에 따라 거북이 움직이기
import turtle
t = turtle.Pen() #대문자 잘 확인하기.
while True :
i = input('right or left? : ')
if i == 'right' :
t.right(90)
t.forward(50)
else :
t.left(90)
t.forward(50)
#숫자 맞추기 게임
print("숫자게임에 오신 것을 환영합니다.")
random = 62
an = 0
while an != random :
an = int(input("1부터 100 사이의 숫자를 추측해보세요. : "))
print("맞았습니다.")
print("게임이 종료되었습니다.")
for
문은 list
나 set, dictionary 등의 data structure 등을 기반으로 코드블록을 반복 실행합니다.
while
문은 특정 조건문이 True
일동안 코드블록을 반복 실행 합니다.
number = 0
while number <= 10:
print(number)
number += 1
> 0
1
2
3
4
5
6
7
8
9
10
for
문과 마찬가지로 while
문도 break
과 continue
가 있습니다.
for
문과 동일하게 break
는 while
문을 강제종료 하고
continue
는 다음 iteration 으로 넘어갑니다.
문자열을 반복문에 넣었을 경우 'code'는 'c','o','d','e' 이렇게 하나씩 나오고 1234 숫자인 경우 에러가 발생한다. 왜 그런거야?
A. 반복이 가능한 객체이기 때문.
대표적으로 배열과 문자열은 반복이 가능한 객체로 정의한다. 숫자는 반복이 불가능하여 에러가 발생하고 문자열은 문자 하나씩 뽑아낼 수 있는 것이다. 따라서 문자열의 문자는 하나씩 가져올 수 있고, 하나씩 문자를 집어 넣을 수 있다.
참고. 코드잇. for of문에서 왜 한글자씩 출력되는지 모르겠습니다.