반복문
특정한 코드를 반복 실행
- for문
- while문
for
▶ 기본구조
for 변수 in 반복가능객체(list, tuple, String..) :
수행할 문장1
수행할 문장2
...
▶ 1~9까지 출력
li1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in li1 :
print(i)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
▶ 변수가 두개 이상, 리스트의 데이터가 두개 이상인 경우
변수가 두개 이상인 경우 변수의 데이터 개수와 리스트 안의 데이터 개수가 동일해야한다.
for(a, b, c) in [(1, 2, 3), (3, 4, 5), (5, 6, 7)] :
print ("%d + %d + %d = %d" % (a, b, c, (a + b + c)))
# 1 + 2 + 3 = 6
# 3 + 4 + 5 = 12
# 5 + 6 + 7 = 18
▶ 변수가 하나인 경우 리스트 안의 데이터 개수가 다수여도 상관없다.
for a in [(1, 3), {5, 7}, 9, {1:1}] :
print(a)
print(type(a))
# (1, 3)
# <class 'tuple'>
# {5, 7}
# <class 'set'>
# 9
# <class 'int'>
# {1: 1}
# <class 'dict'>
▶ 각각의 데이터형마다 다른 반복문 추출
- Stirng : 문자열이 인덱싱되어 추출된다.
- List : 리스트가 인덱싱되어 추출된다.
- Tuple : 튜플이 인덱싱되어 추출된다.
- Dictionary : 사전은 순서가 없지만 key만 순서대로 인덱싱되어 추출된다.
- Set : 집합은 순서가 없지만 순서대로 인덱싱되어 추출된다.
d_str = "hi"
d_list = [1, 2]
d_tuple = (1, 2, 3)
d_dict = {"one":1, "two":2, "three":3}
d_set = {1, 2, 3}
print("Stirng : ")
for a in d_str :
print(a)
print("-"*50)
print("List : ")
for a in d_list :
print(a)
print("-"*50)
print("Tuple : ")
for a in d_tuple :
print(a)
print("-"*50)
print("Dictionary : ")
for a in d_dict :
print(a)
print("-"*50)
print("Set : ")
for a in d_set :
print(a)
# Stirng :
# h
# i
# --------------------------------------------------
# List :
# 1
# 2
# --------------------------------------------------
# Tuple :
# 1
# 2
# 3
# --------------------------------------------------
# Dictionary :
# one
# two
# three
# --------------------------------------------------
# Set :
# 1
# 2
# 3
▶ for문을 활용한 전화번호 하이픈 제거
number = input("하이픈(-)을 포함한 휴대폰 번호를 입력하세요.")
for i in number :
if i != "-" :
print(i, end="")
# 하이픈(-)을 포함한 휴대폰 번호를 입력하세요.010-1323-1423
# 01013231423
▶ for문을 활용한 전화번호 하이픈 추가
number = input("하이픈(-)을 뺀 11자리의 휴대폰 번호를 입력하세요.")
phone = ""
for i in range(len(number)) :
phone += number[i]
if i == 2 or i == 6 :
phone += "-"
print(phone)
# 하이픈(-)을 뺀 11자리의 휴대폰 번호를 입력하세요.01098766789
# 010-9876-6789
number = input("하이픈(-)을 뺀 11자리의 휴대폰 번호를 입력하세요.")
phone = ""
for i in number :
phone += i
if len(phone) == 3 or len(phone) == 8 :
phone += "-"
print(phone)
# 하이픈(-)을 뺀 11자리의 휴대폰 번호를 입력하세요.01099891823
# 010-9989-1823
▶ 길이 단위 환산표
print("-"*50)
print("{:<10}{:<13}{:<10}{:<10}".format("cm", "inch", "ft", "yd"))
print("-"*50)
for cm in range(10, 201, 10) :
print("{:<10}{:<13}{:<10}{:<10}".format(str(cm) + "cm", str(round((cm / 2.54), 2)) + "inch", str(round((cm / 30.48), 2)) + "ft", str(round((cm / 91.44), 2)) + "ft"))
print("-"*50)
# --------------------------------------------------
# cm inch ft yd
# --------------------------------------------------
# 10cm 3.94inch 0.33ft 0.11ft
# 20cm 7.87inch 0.66ft 0.22ft
# 30cm 11.81inch 0.98ft 0.33ft
# 40cm 15.75inch 1.31ft 0.44ft
# 50cm 19.69inch 1.64ft 0.55ft
# 60cm 23.62inch 1.97ft 0.66ft
# 70cm 27.56inch 2.3ft 0.77ft
# 80cm 31.5inch 2.62ft 0.87ft
# 90cm 35.43inch 2.95ft 0.98ft
# 100cm 39.37inch 3.28ft 1.09ft
# 110cm 43.31inch 3.61ft 1.2ft
# 120cm 47.24inch 3.94ft 1.31ft
# 130cm 51.18inch 4.27ft 1.42ft
# 140cm 55.12inch 4.59ft 1.53ft
# 150cm 59.06inch 4.92ft 1.64ft
# 160cm 62.99inch 5.25ft 1.75ft
# 170cm 66.93inch 5.58ft 1.86ft
# 180cm 70.87inch 5.91ft 1.97ft
# 190cm 74.8inch 6.23ft 2.08ft
# 200cm 78.74inch 6.56ft 2.19ft
# --------------------------------------------------
▶무게 단위 환산표
print("-"*50)
print("{:<10}{:<13}{:<10}".format("kg", "lb", "oz"))
print("-"*50)
for kg in range(10, 101, 5) :
print("{:<10}{:<13}{:<10}".format(str(kg) + "kg", str(round((kg *2.205), 2)) + "lb", str(round((kg *35.274), 2)) + "oz"))
print("-"*50)
# --------------------------------------------------
# kg lb oz
# --------------------------------------------------
# 10kg 22.05lb 352.74oz
# 15kg 33.08lb 529.11oz
# 20kg 44.1lb 705.48oz
# 25kg 55.12lb 881.85oz
# 30kg 66.15lb 1058.22oz
# 35kg 77.17lb 1234.59oz
# 40kg 88.2lb 1410.96oz
# 45kg 99.23lb 1587.33oz
# 50kg 110.25lb 1763.7oz
# 55kg 121.28lb 1940.07oz
# 60kg 132.3lb 2116.44oz
# 65kg 143.33lb 2292.81oz
# 70kg 154.35lb 2469.18oz
# 75kg 165.38lb 2645.55oz
# 80kg 176.4lb 2821.92oz
# 85kg 187.43lb 2998.29oz
# 90kg 198.45lb 3174.66oz
# 95kg 209.47lb 3351.03oz
# 100kg 220.5lb 3527.4oz
# --------------------------------------------------
range()
반복할 대상 자리에는 range가 들어갈 수 있습니다.
- range(end)
- range(start, end)
- range(start, end, 증가 또는 감소값)
▶ range()를 이용한 1~10까지의 출력
아래의 예시를 보면 1이상 11미만의 범위를 가지고 있다는것을 알 수 있다.
num = 1
for i in range(1, 11) :
print(i)
▶ range()를 활용한 예시
for i in range(0, 10) :
print(i, end = "")
print()
for i in range(1, 11) :
print(i, end = " ")
print()
for i in range(1, 10, 2) :
print(i, end = " ")
print()
for i in range(20, 1, -2) :
print(i, end=" ")
# 0123456789
# 1 2 3 4 5 6 7 8 9 10
# 1 3 5 7 9
# 20 18 16 14 12 10 8 6 4 2
▶ 섭씨, 화씨 온도 구하기
print("-"*50)
print("섭씨 | 화씨")
print("-"*50)
for i in range(-20, 30, 5) :
print("%-5s| %-5.1f" % (i , (i *1.8)+32))
print("-"*50)
# --------------------------------------------------
# 섭씨 | 화씨
# --------------------------------------------------
# -20 | -4.0
# -15 | 5.0
# -10 | 14.0
# -5 | 23.0
# 0 | 32.0
# 5 | 41.0
# 10 | 50.0
# 15 | 59.0
# 20 | 68.0
# 25 | 77.0
# --------------------------------------------------
end 제어
print문 안에 매개변수 end의 값을 수정하여 결과값을 출력 할 떄 다음줄로 넘기지 않고 그 줄에 이어서 출력이 가능하다.
a = 0
for i in range(1, 10):
a += i
print(a, end = " ")
# 1 3 6 10 15 21 28 36 45
▶ 총합 구하기
a = 3
b = 10
c = 2
li1 = []
for i in range(a, b, c):
print(i, end=" ")
li1.append(i)
print()
print("%d에서 %d까지 %d씩 건너뛴 총합은 %d입니다." % (a, b-1, c, sum(li1)))
# 3 5 7 9
# 3에서 9까지 2씩 건너뛴 총합은 24입니다.
리스트 내포
리스트 안에 for문을 사용하여 리스트 생성이 가능하다.
▶ 기본 구문
표현식 for 항목 in 반복가능객체 if 조건문
# if 조건문은 옵션
▶ [3, 6, 9, 12, 15] 출력 하기
result = [i * 3 for i in range(1, 6, 1)]
print(result)
li1 = [1, 2, 3, 4, 5]
result = [i * 3 for i in li1]
print(result)
# 조건문 추가
li1 = [1, 2, 3, 4, 5]
result = [i * 3 for i in li1 if i % 2 ==0]
print(result)
# [6, 12]
중첩 for문
▶ 구구단 출력
for i in range(2, 10, 1) :
print("%d단" % i, end = " :")
for x in range(1, 10, 1) :
print("{:>3}".format(i*x), end = " ")
print()
# 2단 : 2 4 6 8 10 12 14 16 18
# 3단 : 3 6 9 12 15 18 21 24 27
# 4단 : 4 8 12 16 20 24 28 32 36
# 5단 : 5 10 15 20 25 30 35 40 45
# 6단 : 6 12 18 24 30 36 42 48 54
# 7단 : 7 14 21 28 35 42 49 56 63
# 8단 : 8 16 24 32 40 48 56 64 72
# 9단 : 9 18 27 36 45 54 63 72 81
# 세로로 출력
for i in range(2, 10, 1) :
print("%d단 " % (i))
for x in range(1, 10, 1) :
print("%d * %d = %d" % (i, x, (i*x)))
print()
enumerate()
리스트의 원소에 순서값을 부여해주는 함수
name_list = ["홍", "박", "Kim"]
for no, name in enumerate(name_list) :
print("no:%d, name:%s" % (no, name))
zip()
여러 개의 순회 가능한 객체를 인자로 받아서 원소에게 터플 형태로 반환한다.
name = ["길동", "철수", "형석"]
no = [1, 2, 3]
for a, b in zip(name, no) :
print(a, b)
종합예제
▶ 학생수와 학생의 점수를 입력받아 합격 여부를 확인하시오.
student = {}
stNum = int(input("학생 수를 입력하세요 : "))
for i in range(1, stNum+1, 1) :
student[i] = int(input(" %d번 학생의 점수를 입력하세요(0 < 점수 < 101) : " % i ))
for i in student :
msg = "합격" if student.get(i) >= 70 else "불합격"
print("%d번학생은 %s입니다." % (i, msg))
# 학생 수를 입력하세요 : 4
# 1번 학생의 점수를 입력하세요(0 < 점수 < 101) : 14
# 2번 학생의 점수를 입력하세요(0 < 점수 < 101) : 25
# 3번 학생의 점수를 입력하세요(0 < 점수 < 101) : 35
# 4번 학생의 점수를 입력하세요(0 < 점수 < 101) : 45
# 1번학생은 불합격입니다.
# 2번학생은 불합격입니다.
# 3번학생은 불합격입니다.
# 4번학생은 불합격입니다.
▶ x부터 y까지의 수를 홀수와 짝수를 선택하여 합을 구하시오.
start = int(input("시작 값을 입력하세요 : "))
end = int(input("끝의 값을 입력하세요 (시작 값보다 커야함) : "))
sel = input("짝수와 홀수 중 선택하여 입력하세요 : ")
result = 0
if sel == "짝수" :
li1 = [i for i in range(start, end, 1) if i % 2 == 0]
elif sel == "홀수" :
li1 = [i for i in range(start, end, 1) if i % 2 == 1]
result = sum(li1)
print("%d부터 %d까지 %s의 합은 %d 입니다. " % (start, end, sel, result))
# 시작 값을 입력하세요 : 2
# 끝의 값을 입력하세요 (시작 값보다 커야함) : 100
# 짝수와 홀수 중 선택하여 입력하세요 : 홀수
# 2부터 100까지 홀수의 합은 2499 입니다.
▶ 별 모양 표시하기
for i in range(1, 10) :
for y in range(1, i+1) :
print("{:<1}".format("*"), end = "")
print()
# *
# **
# ***
# ****
# *****
# ******
# *******
# ********
# *********
for i in range(1, 10) :
for y in range(1, 11-i) :
print(" ", end="")
for k in range(1, 1+i) :
print("*", end="")
print()
# *
# **
# ***
# ****
# *****
# ******
# *******
# ********
# *********
▶ 영화관 자리 표시하기
seats = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
for i in range(0, len(seats)) :
for y in range(0, len(seats[0])) :
if seats[i][y] == 1 :
print("■", end="")
else :
print("□", end="")
print()
# □□□□□□□□□□
# □□□□□□□□□□
# □□□□□■□□□□
# □□□□□□□□□□
# □□□□□□□□□□
# □□□□□■□□□□
# □□□□□□□□□□
# □□□□□□□□□□
# ■□■■□■■□■■
# □□□□□□□□□□
'Python' 카테고리의 다른 글
[Python] 예제 : 회문(Palindrom) (0) | 2022.08.29 |
---|---|
[Python] 반복문 while (0) | 2022.08.29 |
[python] 조건문 if (0) | 2022.08.25 |
[Python] 문자열 형식화, 문자열 함수 (0) | 2022.08.24 |
[Python] Tuple(튜플) (0) | 2022.08.24 |