Python | 반복문, for와 while

Stellar·2021년 5월 18일
0

Python

목록 보기
9/36

반복문

반복되는 코드를 for문 또는 while문으로 처리할 수 있다.


for문

✔️ 기본 문법

시퀀스 객체 : list, tuple, 문자열 등과 같이 반복적인 객체를 시퀀스 객체라 함.
변수 : for와 in 사이에 위치한 값(i, j, k 등)을 변수라고도 칭한다.

for 변수 in 시퀀스 객체 :
	print(i)

✔️ range(), 숫자로 특정 범위 만들기.

range는 범위라는 의미로 특정 값 사이를 시퀀스로 만들어 준다.

  • range(1, 10, 2) 1부터 9까지의 숫자 중에서 2칸씩 건너 뛴 숫자가 생성 됨. - 홀수만 생성.
  • range(0, 11, 2) 0부터 10까지의 숫자 중에서 2칸씩 건너 뛴 숫자가 생성 됨. - 짝수만 생성.

range 거꾸로 출력하기

num = int(input('정수를 입력하세요 : '))


for i in range(num, 0, -1) : #큰 수부터 적고 -1로 하나씩 줄여감.
    print(i)

range(1, N+1), 1부터 시작

N = int(input())

for i in range(1, N+1):
    print('*' * i)

참고. BJ2438 | 별 찍기 - 1

✔️ 시퀀스

시퀀스 예제

#시퀀스 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])

✔️ 중첩 for문에서 입력 시 다음 줄로 안 넘어갈 때

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 | 문자열 반복

for 예제.

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문도 breakcontinue가 있습니다.

for 문과 동일하게 breakwhile문을 강제종료 하고

continue는 다음 iteration 으로 넘어갑니다.

✔️ enumerate()

시퀀스보다 훨씬 간결하게 쓸 수 있다.
for문에서 인덱스와 요소를 동시에 가져올 수 있다.
enumerate(score, 1) 정수 값은 앞으로 가면 에러가 발생한다.
튜플로 반환된다.

enumerate 예제.

#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)] #인덱스, 값이 출력 됨.

enumerate 예제2.

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

✔️ for문에 변수 2개를 사용할 수 있는 경우

Q. enumerate에서 for문 변수 i, s와 같이 여러 값을 받을 수 있는 이유는? 그리고 어떨 때 사용이 가능한지?

A.enumerate()의 경우 애초에 인덱스를 돌려주는 함수라서 변수를 2개 사용할 수 있다.
한 변수에 zip()으로 두 개의 리스트를 묶은 후에 그 변수를 시퀀스 객체로 놓고 for문 변수를 2개로 설정할 경우 값을 2개로 도출해낼 수 있다.
따라서 for문에서 값을 2개로 받을 수 있는 상황을 만들수만 있다면 for문의 변수는 2개가 될 수 있다.

zip 예제.

게시글 <알고리즘 파이썬 문법 총 정리>에도 zip() 함수 정리해둠.

#zip
yoil = ['월', '화', '수', '목', '금', '토', '일']
food = ['갈비탕', '순대국', '파전', '감자탕', '칼국수']
menu = zip(yoil, food)
for y, f in menu :
    print('{}요일 메뉴 : {}'.format(y, f))

print(dict(zip(yoil, food))) #dict 타입으로도 출력 가능하다.

while문

조건에 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)

✔️ while에 조건 작성.

#숫자 맞추기 게임

print("숫자게임에 오신 것을 환영합니다.")

random = 62
an = 0

while an != random :
    an = int(input("1부터 100 사이의 숫자를 추측해보세요. : "))

print("맞았습니다.")
print("게임이 종료되었습니다.")

while 예제.

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문도 breakcontinue가 있습니다.

for 문과 동일하게 breakwhile문을 강제종료 하고

continue는 다음 iteration 으로 넘어갑니다.

Q. 문자열은 왜? 하나씩 나오는 가?

문자열을 반복문에 넣었을 경우 'code'는 'c','o','d','e' 이렇게 하나씩 나오고 1234 숫자인 경우 에러가 발생한다. 왜 그런거야?

A. 반복이 가능한 객체이기 때문.
대표적으로 배열과 문자열은 반복이 가능한 객체로 정의한다. 숫자는 반복이 불가능하여 에러가 발생하고 문자열은 문자 하나씩 뽑아낼 수 있는 것이다. 따라서 문자열의 문자는 하나씩 가져올 수 있고, 하나씩 문자를 집어 넣을 수 있다.
참고. 코드잇. for of문에서 왜 한글자씩 출력되는지 모르겠습니다.

0개의 댓글