[Python 101] Chap04 - 파이썬 반복문

(CLASS1O1의 ‘Python 101: 매일 30분, 40일 동안! LV. 1 파이썬 기초 프로젝트’ 수업에 기반한 정리) Chap04 - 파이썬 반복문

Boolean 타입과 조건문

Boolean 타입

  • 참과 거짓을 표현하는 자료형
  • 비교 연산자의 결과값 등으로 사용함

조건문

  • 어떤 조건에 따라 동작을 수행하고자 할 때 사용
  • if 라는 파이썬 키워드
  • 조건 다음에는 :이 있어야 함
  • 조건을 만족할 때 수행되는 문장은 들여쓰기 (스페이스 4칸; 탭) 되어야 함
  • 조건을 만족하면 들여쓰기 된 문장들이 순서대로 실행됨
  • 여러 조건을 사용할 경우
    • 2개: if ~ else
    • 3개 이상: if ~ elif ~ else

논리 연산자

  • and, or, not

FOR 반복문

  • for i in LIST:: i는 인덱스로써 LIST의 값과 1:1로 바인딩 됨
tickers = ['A','B','C'] 

for i in tickers:
    print(str(tickers.index(i)+1) + '번 티커: ' + i)

# 1번 티커: A
# 2번 티커: B
# 3번 티커: C
과자 = {
    "꼬갈콘":2000,
    "새우깡":3800,
    "포카칩":1100
}  

#과자.items()
#과자.keys() 
#과자.values()

for k,v in 과자.items():
    print(k,v)
  • for와 range: 정수범위 출력하는 내장함수
    • range(0,5): 0~4 숫자 생성
    • range(start,end,step): start부터 end값(미포함) 까지 step 간격으로 생성
    • range와 list는 다름. 메모리 관점에서 range가 더 효율적.
  • enumerate
    • 리스트의 원소 인덱스를 출력해주는 내장함수
과자 = ['꼬갈콘','새우깡','포카칩'] 

for i, v in enumerate(과자):  
    print(i,v)

연습문제

  • 리스트 for문
data = [ 
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
]

for i in data: # i: 1차원  리스트 
    print(i[3])    
  • 딕셔너리 for문
과자 = {
    "꼬갈콘":2000,
    "새우깡":3800,
    "포카칩":1100
} 

for j,k in 과자.items(): 
    print(j, k * 0.9)
  • FOR문과 조건문
coin = {
  'BTC':[100,120], #매수가, 매도가 
  'XRP':[600,500],
  'ETH':[1000,1100]
}

res = []

for j,k in coin.items():
  if((k[1]-k[0])/k[0] >= 0.03):
      res.append(j)
      print(j)

res # ['BTC', 'ETH']

break, continue, pass

  • 특정 조건을 만족할 때 반복문을 탈출하기 (break)
    • 조건은 if로 판단, 탈출은 break
      과자 = {
        "A":1680,
        "B":3830,
        "C":1180,
        "D":2980,
        "E":1680
    }
    
    res = 0
    res_nm = []
    
    for j,k in 과자.items():
        if(res + k > 7000): 
            break # 위의 조건 만족하는 순간, 아래 블록 실행하지 않음
          
        res_nm.append(j)
        res = res + k 
    
    print(res, res_nm)
    
  • 반복문 특정 조건만 건너뛰기 (continue)
    • 반복문에서 continue 키워드를 만나면 들여쓰기 된 코드는 수행하지 않고 다음 반복으로 이동
    for i in range(10):
      if i % 2 == 0:
        continue 
    
      print(i)
    
    # 01~69까지 승용차 의미함. 다음 번호판에서 승용차만 출력. 
    리스트 = [ 
        "01가 1234",
        "02나 1010",
        "80가 1011",
        "91다 9939",
        "61오 5341"
    ]
    
    for i in 리스트:
        if int(i[0:2]) >= 70:
            continue
        print(i)    
    
  • pass
    • 구문적으로는 명령문이 존재해야 하나 딱히 처리할 일이 없을 때 사용가능
      for i in range(3):
      pass 
      

WHILE 반복문

  • 조건이 참인 동안 while에 들여쓰기 된 문장이 수행 됨
  • for문 보다 권장
num = 1 

while num <= 5:
    print(num)
    num = num + 1
  • while문과 무한루프
    • time.sleep(5): 인터프리터가 5초 대기함
      ~~~python
      import time

    print(“Hi”)
    time.sleep(5)
    print(“Bye”)

    
    ~~~python  
    import time  
    
    while True:
      print("ING")
      time.sleep(1)
    
    • Control + C 눌러서 무한 루프 탈출 가능

사용자 입력

  • input함수는 사용자로부터 값을 하나 입력 받는 함수
    • 기본적으로 문자열 타입으로 입력 받음
    # 유저로부터 값을 입력받기 전까지 인터프리터 멈춰있음. 
    user = input("숫자를 입력하세요:")
    print(user,type(user))
    

연습문제

  • while문 사용하여 10,000원에서 5일 연속 상한가(30%) 기록한 경우의 금액 출력하라.
price = 10000
day = 1 

while day <= 5:
    price = price * 1.3 
    print(day,price)
    day = day + 1

    #1 13000.0
    #2 16900.0
    #3 21970.0
    #4 28561.0
    #5 37129.3
  • 로또번호 1~45의 숫자 6개 성성. (숫자 중복 안 됨)
import random 

lotto = [] 

while len(lotto) < 6:
    number = random.randint(1,45)
    if number not in lotto:
      # 조건문 만족 못 하면 다시 상단 (while)으로 돌아감
        lotto.append(number)
    print(lotto)

print(lotto)
  • 1~100까지에 대한 업/다운 게임 만들기.
    • 컴퓨터가 1~100 숫자 생성.
    • 사용자로부터 값을 입력받은 후 사용자가 입력한 값이 컴퓨터가 뽑은 값 보다 크면 업, 작으면 다운, 같으면 프로그램 종료.
    • 풀이와 다른데, 내 풀이가 보다 적절한 것 같음
import random 

user = int(input("1~100 사이 숫자를 입력하세요:"))
prog = random.randint(1,100)
prog_list = []

while user != prog:
    if user > prog:
        prog_list.append(prog) 
        prog = prog + 1 
        print("Up")
    elif user < prog:
        prog_list.append(prog) 
        prog = prog - 1
        print("Down")

    print(user, prog)

print(str(len(prog_list)) + "번 째에 게임 종료")

© 2021. All rights reserved.

-------Powered by Hydejack-------

Owned by POPLA0428