본문 바로가기
🐍Python

[20210727] Python 기본 문법 2 - 조건문(if~else문), 반복문(for 문, while 문)

by 캔 2021. 7. 27.

조건문 - if~else문

기본적으로 구조는 다른 언어의 if문과 같으나 {} 블록을 사용하지 않고 대신 들여쓰기를 사용한다. "if 조건: 조건인 참일 때 결과 else: 조건이 거짓일 때 결과"와 같은 형식으로 사용한다. 다중 조건문은 "if 조건: 조건인 참일 때의 결과 elif 조건: 첫 번째 조건이 아닐 때의 결과 else: 첫 번째 조건도 두 번째 조건도 거짓일 때의 결과"와 같은 형식으로 사용한다.

# if~else문
"""
기본 구조
if 조건문:
    수행할 문장1
    수행할 문장2

else:
    수행할 문장A
    수행할 문장B
"""

# 단순 if문
money = True
if money:
    print("택시를")
    print("타고")
    print("가라")

# 비교 연산자: <, >, ==, !=, >=, <=
money = 2000
if money >= 3000:
    print("잔액이 충분하니,")
    print("택시를 타자.")
    
else:
    print("잔액이 부족하니,")
    print("걸어서 가자")

# and, or, not
# 조건: 돈이 3000원 이상 있거나 카드가 있으면 택시를 타고 아니면 걸어가라.
money = 2000
card = True
if money >= 3000 or card:
    print("돈이 있거나, 카드가 있으니까,")
    print("택시를 타고 가라.")
    
else:
    print("아무것도 없으니,")
    print("걸어가라.")

# x in s, x not in s 조건
# x in list     x not in list   -> x가 list 안에 있니? x가 list 안에 없니?
# x in tuple    x not  in tuple -> x가 튜플 안에 있니? x가 튜플 안에 없니?
# x in String   x not in String -> x가 문자열 안에 있니? x가 문자열 안에 없니?
print(1 in [1, 2, 3])
print(1 not in [1, 2, 3])

print('a' in ('a', 'b', 'c'))
print('j' not in 'python')

pocket = ['card', 'cellphone', 'money']
if 'card' in pocket:
    print("택시를 타고가라.")
    
else:
    print("걸어가라.")

# 조건문에서 아무 일도 하지 않게 설정할 필요가 있을 때, pass 사용
pocket = ['check', 'money', 'cellphone']
if 'money' in pocket:
    pass
    
else:
    print("카드를 꺼내라.")

# 다중 조건 if - elif - else
# 주머니에 돈이 있으면 택시를 타고, 주머니에 돈이 없지만 카드가 있으면 택시를 타고,
# 돈도 카드도 없으면 걸어가라. if, else
pocket = ['money', 'cellphone']
card = True
if 'check' in pocket:
    print("택시를 타고가라.")
    
else:
    if card:
        print("택시를 타고가라.")
        
    else:
        print("걸어가라.")

pocket = ['check', 'cellphone']
card = True
if 'money' in pocket:
    print("현금이 있으니까.")
    print("택시를 타고가자.")
    
elif card:
    print("카드가 있으니까.")
    print("택시를 타고가자.")
    
else:
    print("둘 다 없으니,")
    print("걸어가자.")

# 한 줄로 작성해도 문제 없음
pocket = ['pager', 'money', 'cellphone']
if 'money' in pocket:
    pass
    
else:
    print("카드를 꺼내라")

pocket = ['pager', 'money', 'cellphone']
if 'money' in pocket:
    pass
    
else:
    print("카드를 꺼내라")

# 조건부 표현식
score = 70
if score >= 60:
    message = "success"
    print(message)
    
else:
    message = "failure"
    print(message)

# 조건부 표현식
# 조건식이 참인 경우 if 조건문 else 조건문이 거짓을 경우
message = "success" if score >= 60 else "failure"
print(message)

 

반복문 - for문

for문 역시 다른 언어와 구조는 같고 {} 블록 대신 들여쓰기를 사용한다. range() 함수를 이용해서 반복 가능한 객체를 만들고 "for i in range(m, n): 반복할 내용"(i에 m부터 n까지의 정수를 순차적으로 대입한다.)과 같은 형식으로 사용한다.

# for문
"""
기본 구조
for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ......
"""

# 전형적인 for문
test_list = ['one', 'two', 'three', 'four']
for i in test_list:
    print(i)

# a 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 first, last 변수에 대입된다.
# (first, last) = (1,2)
a = [(1, 2), (3, 4), (5, 6)]
for (first, last) in a:
    print(first + last)

# for문의 응용
# 5명의 학생이 시험을 봤는데, 시험 점수가 60점이 넘으면 합격, 그렇지 않으면 불합격인 결과를 보여주자.
score = [90, 25, 67, 45, 90]
number = 0  # 학생의 번호를 임의로 줌
for i in score:
    number += 1
    if i >= 60:
        print("%d번 학생은 합격입니다." % number)
    else:
        print("%d번 학생은 불합격입니다." % number)

# for문과 continue
# 60점 이상의 학생에게 합격 메시지를 보내보자.
score = [90, 25, 67, 45, 90]
number = 0  # 학생의 번호를 임의로 줌
for i in score:
    number += 1
    if i < 60:
        continue
    print("%d번 학생 축하합니다. 합격하셨습니다." % number)

# for문과 함께 자주 사용하는 range() 함수
a = range(10)  # 0부터 10미만의 숫자를 포함하는 range 객체를 만들어 준다.
a = range(1, 11)  # range(시작 숫자, 끝 숫자) 형태, 시작 숫자 ~ 끝 숫자 - 1 까지 , 끝 숫자는 포함되지 않는다.

add = 0
for i in range(1, 11):
    add += i
print(add)

score = [90, 25, 67, 45, 80]
for number in range(len(score)):
    if score[number] < 60: continue
    print("%d번 학생 축하합니다. 합격입니다." % (number + 1))

# for문과 range를 이용한 구구단을 찍어 보자.
# 단, 곱하는 수, 이중 for, range():
for i in range(2, 10):  # 단 1번 for
    for j in range(1, 10):  # 곱하는 수 2번 for
        print(i * j, end=" ")  # end=" " 다음 줄로 넘어가지 않고 한 칸씩만 옆에 출력하게 하기 위해
    print('')  # 다음 줄로 넘어가계 하는 역할

# 리스트 내포(list comprehension) 사용하기: 리스트 안에 for문을 포함시키는 것
# [표현식 for 항목 in 반복 가능 객체 if 조건문]
# for문을 2개 이상 사용하는 것도 가능
# [표현식 for 항목1 in 반복 가능 객체1 if 조건문1
#       for 항목2 in 반복 가능 객체2 if 조건문2
#           .....
#       for 항목n in 반복 가능 객체n if 조건문n]

a = [1, 2, 3, 4]
result = []
for num in a:
    result.append(num * 3)
print(result)

a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]  # 짝수 값만 result에 값을 대입하겠다.
print(result)

result = [x * y for x in range(2, 10) for y in range(1, 10)]
print(result)

 

반복문 - while문

while문도 구조는 다른 언어와 같다. {} 블록 대신 들여쓰기를 사용한다. "while 조건: 반복할 내용"과 같은 형식으로 사용한다.

# while문
"""
기본구조
while 조건문:
    수행할 문장 1
    수행할 문장 2
    수행할 문장 3
    ......
"""

# "10번 찍어 안 넘어가는 나무 없다"를 while 반복으로 출력
treeHit = 0
while treeHit < 10:
    treeHit = treeHit + 1
    print("나무를 %d번 찍었습니다." % treeHit)
    if treeHit == 10:
        print("나무가 넘어갑니다.")

# while문 만들기
# 4를 입력할 때까지 반복, 4를 입력하면 거짓이 되어 while 반복문 탈출
prompt = """
1. Add
2. Del
3. List
4. Quit

Enter number: """
number = 0
while number != 4:
    print(prompt)
    number = int(input())

# while문 강제로 빠져 나오기: break
coffee = 10
money = 300
while money:
    print("금액을 넣었으니 커피를 서비스합니다.")
    coffee -= 1
    print("남은 커피의 양은 %d개 입니다." % coffee)
    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매 중지")
        break

# while문의 처음으로 돌아가기: continue 사용
# 홀수 출력하는 프로그램
a = 0
while a < 10:
    a += 1
    if a % 2 == 0: continue
    print(a)

# 무한 루프
while True:
    수행할 문장1
    수행할 문장2
    ...

while True:
    print("Ctrl+C를 눌러야 while문을 탈출할 수있습니다.")

 

switch~case문, do~while문은?

참고로, 파이썬에는 문법의 단순화를 위해 switch~case문이나 do~while문이 존재하지 않는다. 이들을 구현하려면 각각 if~elif~else문과 while문을 변형하여 사용하여야 한다.