본문 바로가기
Python

[파이썬] 반복문: for, in, while, break, enumerate, range

by eyoo 2022. 4. 25.

반복문은 for루프와 while루프가 있다.

 

먼저 for루프를 알아보자.

 

4개의 숫자를 포함한 리스트가 있다고 하고, 그 리스트의 값을 하나씩 출력하려고 한다.

 

in:

my_list = [11, 222, 30, 44]
print(my_list[0])
print(my_list[1])
print(my_list[2])
print(my_list[3])

out:

11
222
30
44

# print 함수를 하나씩 사용하여 출력할수 있지만 번거로운 작업이 필요하다.

 

 

데이터 스트럭쳐에서 데이터를 하나씩 가져와서 무엇인가 작업을 하고싶을땐 for을 사용한다.

 

in:

for data in my_list:
    print(data)

out:

11
222
30
44

# for 반복문을 사용할때 for뒤에 변수를 설정해주고, 그 뒤에 in을 작성하여 사용할 데이터 스트럭쳐 (리스트, 딕셔너리 등)을 지정한다.

# 반복문 뒤에 콜론 ' : '을 사용한다.

# for문 바로 밑줄에 반복할 액션을 정한다. 

 

 

my_list의 값에서 5를 뺀 값을 출력하려 한다.

 

in:

for item in my_list:
    print(item-5)

out:

6
217
25
39

 

 

학생들의 수학점수가 기존의 리스트인 score_list 에 저장되어 있다.
점수를 10점씩 뺀 값들을 새로운 리스트인 new_score_list로 만든다고 한다면

 

in:

score_list = [76,44,98,56,77]
new_score_list = []
for score in score_list:
    new_score_list.append(score - 10)
new_score_list

out:

[66, 34, 88, 46, 67]

# 리스트를 미리 생성한 후 append함수를 이용하여 추가시킨다.

 

 

반복문을 통해 리스트 속 문자의 대소문을 변경해줄수있다.

 

in:

fruits_eng = ['apple','mango','banana','guava']
fruits_upper = []
for fruit in fruits_eng:
    fruits_upper.append(fruit.upper())
fruits_upper

out:

['APPLE', 'MANGO', 'BANANA', 'GUAVA']

 

 

enumerate 함수를 사용해 리스트의 인덱스값과, 매칭되어 저장되어있는 값을 함께 출력할수있다.

 

in:

fruits = ['사과', '배', '망고', '바나나', '수박']
for index, data in enumerate(fruits):
    print(index, data)

out:

0 사과
1 배
2 망고
3 바나나
4 수박

 

 

딕셔너리 데이터를 반복문을 통해 나타낼수 있다.

 

in:

my_phone = {'brand':'apple', 'model':'iPhone12','color':'red','year':2021}
for data in my_phone:
    print(data)

out:

brand
model
color
year

# 딕셔너리일때는 키값만 출력된다.

# 밸류값을 출력하고 싶을때는 in뒤에 my_phone.values()를 입력한다.

# 아이템을 한꺼번에 출력하고싶을땐 in뒤에 my_phone.items()입력한다. (튜플로 출력됨)

 

 

break를 사용하여 반복문을 중단시킬수 있다.

 

망고일때 중단한다면

in:

fruits = ['사과', '배', '망고', '바나나', '수박']
for data in fruits:
    print(data)
    if data == '망고':
        break

out:

사과
배
망고

 

 

break의 우선순위를 알아보자

 

in:

# break 후 for문 밖으로 나온다
for data in fruits:
    print(data)
    if data == '망고':
        print('hello')
        break
        print('bye')
print('Nice')

out:

사과
배
망고
hello
Nice

# break 후, 바로 for문 밖으로 나온다.

 

RANGE 함수

  • range() 함수는, 숫자 리스트를 만들어 준다.
  • range() 함수는, 인덱스가 0 부터 시작한다.
  • 레인지의 괄호 안에 적는 숫자 갯수만큼 만든다.

 

레인지 함수를 이용하여 숫자를 리스트로 만들수 있다.

 

0부터 10까지의 정수를 만들어보자

 

in:

range(10 + 1)
list(range(11))

out:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 마지막 숫자에 1을 더해 포함시켜야 한다.

 

 

4부터 17까지 정수를 만들고 싶을때

 

in:

range(4,18)
list(range(4,18))

out:

[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

 

 

액션을 원하는 수 만큼 행하고 싶을때 for반복문과 range함수를 섞어서 사용하면 된다.

 

'hello'를 7번 입력해보자

in:

for data in range(7):
    print('hello')

out:

hello
hello
hello
hello
hello
hello
hello

 

 

while을 이용하여 반복문을 만들수 있다.

 

in:

i = 0
while i < 7:
    print('hello')
    i = i + 1

out:

hello
hello
hello
hello
hello
hello
hello

# 초기값 저장할 변수가 필요하다.
# while이 True일때마다 실행시킨다.
# i 값을 증가시키는 코드(i = i + 1)를 통해 정해진 수만큼만 액션이 반복된다.

 

 

While이 True면 무한루프가 된다.

 

in:

while True:
    print('hello')

out:

hello
hello
hello
hello
hello
hello
hello
...

 

 

while 반복문도 break을 통해 멈출수 있다.

 

유저한테 문장을 입력받는다.
유저가 입력한 문장을 그대로 화면에 출력한다.
단, 유저가 '그만'이라는 문자열을 입력하면 프로그램이 멈춘다.

 

in:

while True:
    sentence = input('문장 입력: ')
    if sentence == '그만':
        break
    print(sentence)

out:

문장 입력: 안녕하세요
안녕하세요
문장 입력: 그만

# strip함수를 이용하여 종료코드 옆에 공백이 있어도 멈추게 할수있다.

 

 

중첩반복문을 활용해 구구단을 만들어보자

 

in:

for x in range(2,10):
    for y in range(1,10):
        print('{}x{}={}'.format(x,y,x*y))

out:

2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
3x9=27
...
9x9=81

 

LIST COMPREHENSION

  • 원본 리스트를 가지고, 다른 리스트를 만드는 방법
  • for 나 while 없이, loop 를 실행시킬수 있다.

 

원래의 점수 리스트에서 7점씩 뺀 데이터로 리스트를 만들고 싶다면

 

in:

score= [88,76,56,91,68]
new=[]
for data in score:
    new.append(data - 7)
new

out:

[81, 69, 49, 84, 61]

 

 

리스트 컴프리헨션으로 표현해보자

 

in:

new=[data - 7 for data in score]
new

out:

[81, 69, 49, 84, 61]

# 만들 리스트 안에 바로 코드를 넣으면 된다.

# 기존의 for문 왼쪽에 새 리스트에 append할 값을 입력하면 된다.

 

 

리스트에서 점수가 짝수인것만 리스트로 만든다면

 

in:

new=[]
for data in score:
    if data%2==0:
        new.append(data)
new

out:

[88, 76, 56, 68]

 

 

리스트 컴프리헨션으로 표현해보자

 

in:

new=[data for data in score if data%2==0]
new

out:

[88, 76, 56, 68]

# if 문을 추가로 사용해야할때는 리스트 컴프리헨션을 쓰던방식에서 맨 마지막에 if문을 붙여주면 된다.

 

 

[실습]

 

다음처럼 * 모양을 7개부터 1개까지 출력하는 프로그램을 만드세요.

 

in:

i = 7
while i > 0:
    print('*'*i)
    i = i - 1

# for 반복문을 사용할때는 in 뒤에 range(7,0,-1)를 활용하면 된다.

 

 

유저한테 숫자를 6번 입력받으세요.
유저가 입력한 숫자들 중에서 음수의 갯수를 출력하세요.

 

in:

count = 0
for i in range(6):
    number = input('숫자를 입력하세요: ')
    number = int(number)
    if number < 0:
        count = count + 1
print('음수의 갯수는 {}개입니다.'.format(count))

 

 

학생 이름과 수학점수를 입력받습니다. (아래 5번 반복)
5명을 입력받으면 더 이상 입력을 받지 않고 다음을 계산하여 출력합니다.
출력) 수학 점수 평균은 ... 점입니다.

 

in: 

name = []
score = []
i = 0
while i < 5:
    nam = input('이름입력: ')
    num = input('수학 점수 입력: ')
    name.append(nam)
    score.append(int(num))
    i = i + 1
ave = sum(score)/len(score)
print('수학 점수 평균은 {}점입니다.'.format(ave))

 

위에서 수학최고점수와 그 사람이 누군지 알아내어 아래처럼 출력합니다.
"수학 최고점은 .. 점 이며, ... 입니다."

 

in:

a = max(score)
a
b = name[score.index(a)]
b
print("수학 최고점은 {} 점 이며, {} 입니다.".format(a,b))

 

 

해당 sms 문장에 스팸으로 등록한 단어가 있는지 검사하세요.
스팸 단어 리스트 = [ '대출', '금리', '도박', '잭팟']
검사한 후, 스팸 단어가 있으면, "스팸"을 출력하고, 없으면 "스팸 아님"을 출력하세요.
문장 예 ) "최저 금리로 당일 송금, 대출 100만~3000만원 가능"

 

in:

sms = "최저 금리로 당일 송금, 대출 100만~3000만원 가능"
spam = [ '대출', '금리', '도박', '잭팟']
for sp in spam:
    if sp in sms:
        print('스팸')
        break
    else:
        print('스팸 아님')
        break

 

 

 

 

 

댓글