Python

[python] 반복문 for

SangRok Jung 2022. 8. 26. 22:54
반응형

반복문


특정한 코드를 반복 실행

 

  • 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