Python

Python(11) if, match, for, while 문

UserDonghu 2023. 9. 15. 14:13

if

if True:
    print('Hello') # Hello
 
if 10 and 9: # True나 False가 아니라 단락평가에 의해 9
    print('hello') # hello
    
if '': # F
    print('hello')
    
if ' ': # T
    print('hello') # hello
    
if []: # F
    print('hello')

if -1: # T
    print("hello") # hello

 

match

text = 'Hello World'
match text:
    case 'Hello':
        print('Hello')
    case 'World':
        print('World')
    case _:
        print('No Match') # 'No Match'
        
text = 'Hello'
match text:
    case 'Hello' | 'World': # or 이렇게 씀
        print('World')
    case _:
        print('No Match')

def test(i):
    match i:
        case 1:
            print('One')
        case 2:
            print('Two')
        case 3 | 4:
            print('Three or Four')
        case _ if i > 10:
            print('Greater than ten')
        case _:
            print('Other')
            
test(3) # Three or Four
test(9) # Other
test(11) # Greater than ten

 

for

in이랑 순회 가능한 객체와 함께 사용

vfor x in 'hi': # 순회 가능한 객체가 들어감
    print(f'현재 값은 {x}입니다.')
# 현재 값은 h입니다.
# 현재 값은 i입니다.

for x in (1, 2, 3, 4, 5):
    print(f'현재 값은 {x}입니다.')
# 현재 값은 1입니다.
# 현재 값은 2입니다.
# 현재 값은 3입니다.
# 현재 값은 4입니다.
# 현재 값은 5입니다.

d = {
    '하나' : 'one',
    '둘' : 'two',
    '셋' : 'three',
}

for k in d:
    print(k) # key값이 들어감
# 하나
# 둘
# 셋

for k, v in d.items(): # key와 value둘다 받으려면
	print(f'{k}: {p}')
# 하나: one
# 둘: two
# 셋: three

 

중첩 for문

for i in [range(3), range(5), range(7)]: # i에 range(3), range(5), range(7) 순서로 들어감
    for j in i: # range(3)들어갔을때는 0,1,2 range(5)일때는 0,1,2,3,4들어감
        print(j)
# 0
# 1
# 2
# 0
# 1
# 2
# 3
# 4
# 0
# 1
# 2
# 3
# 4
# 5
# 6

 

쌍으로 받기

skill = [
        ('고기잡이', 100, 'SS'),
        ('고기팔기', 120, 'SSS'),
        ('낚시', 5, 'C'),
        ('통발', 5, 'C'),
        ('큰그물', 5, 'C')
]

for skillName, skillLevel, skillGrade in skill:
    print(skillName, skillLevel, skillGrade
    
# 고기잡이 100 SS
# 고기팔기 120 SSS
# 낚시 5 C
# 통발 5 C
# 큰그물 5 C

 

enumerate 사용

영화누적관객수 = ['레미제라블', '뷰티풀사이트', '매트릭스', '인셉션', '어거스트 러쉬']
for i in enumerate(영화누적관객수):
    print(i)
# (0, '레미제라블')
# (1, '뷰티풀사이트')
# (2, '매트릭스')
# (3, '인셉션')
# (4, '어거스트 러쉬')

for i, j in enumerate(영화누적관객수, 1):
    print(f'누적관객수 {i}위! {j}!')
# 누적관객수 1위! 레미제라블!
# 누적관객수 2위! 뷰티풀사이트!
# 누적관객수 3위! 매트릭스!
# 누적관객수 4위! 인셉션!
# 누적관객수 5위! 어거스트 러쉬!

 

for문의 원리

__iter__() 매직 메서드가 있는지 확인함. 없으면 순회가능한 객체가 아니고 있으면 순회가능한 객체로 for문이 됨.

__iter__() 메서드가 있으면 __next__()로 하나씩 꺼내옴. StopIterationError 만나면 멈춤.

x = iter('hello') # 'hello'.__iter__() 와 같음
print(x) # <str_iterator object at 0x7cacfc5e1210>

print(next(x)) # h # x.__next__() 와 같음
print(next(x)) # e
print(next(x)) # l
print(next(x)) # l
print(next(x)) # o

print(next(x)) # StopIteration Error # for문은 StopIteration Error을 만나면 멈춤

 

while

이중 while문

i = 2
while i < 10:
    j = 1 # while문은 중첩해서 사용할 때 초기화가 필요
    while j < 10:
        if j == 3:
            break
        print(f'{i} X {j} = {i*j}')
        j += 1
    i += 1

 

왈러스 연산자

x = (n := 10) * 2 # n에 10을 할당하고 반환
print(x)  # 출력: 20
print(n)  # 출력: 10

 

왈러스 연산자와 랜덤을 사용한 while문

import random

while (x := random.randint(0, 10)) != 7: # 7이 나올때까지 계속 x출력
    print(x)

 

break, continue, pass

break : 바로 위 부모만 탈출

continue : 아래 코드를 실행하지 않고 다음 루프로 넘어감

pass : 걍 없다고 생각하면 됨

 

반복문 else

for i in range(5):
    print(i)
else:
    print('end')
# 0
# 1
# 2
# 3
# 4
# end
x = 5
while x < 10:
    x += 1
    print(x)
else:
    print('end')
# 6
# 7
# 8
# 9
# 10
# end

 

'Python' 카테고리의 다른 글

Python(13) 클래스 심화  (1) 2023.09.19
Python(12) 클래스  (0) 2023.09.17
Python(10) 리스트 컴프리헨션, 삼항 연산자  (0) 2023.09.13
Python(9) 튜플, 딕셔너리, Set(집합)  (0) 2023.09.13
Python(8) 리스트  (0) 2023.09.12