ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Day 03, TIL] 파이썬 조건문과 반복문
    컴퓨터, AI/(국비) Bio-Health AI 2026. 4. 1. 13:30

    2026.03.27(금) 3일차 교육내용

     

    1. 파이썬 조건문 : 단순 비교를 넘어선 논리 구조

    True or False

     

    ▶  숫자 변수  1 = True, 0 = False 이다.

    num = 0
    # 1 = True, 0 = False
    if num : # num이 True일때 print를 실행하겠다
    	print(num)
    else :
    	print('not num')
    if not num : # num을 부정 -> False가 True가 되어 print 실행
    	print('not num')

     

    ▶ 문자열에서 null = False

         - 공백도 문자열이라서 ' '도 문자열로 본다.

    city = ' ' #null문자열 = False
    if not city :
    	print('empty city') 
        # city = 0 False 값, not city = 1 True 값 출력
    
    if len(city) > 0 :
    	print(city)
        # 공백도 문자열이라 ' '로 하면 공백이 프린트 된다

     

    에러방지를 위한 if문

     

    city = 'incheon'
    cities = ['seoul', 'suwon']
    
    # 여기서 단순하게 아래와 같이 없는 문자열을 출력하려면 에러가 나온다
    # print(cities.index('ddd'))
    
    # 에러 방지를 위한 if문 추가
    if 'ddd' in cities :
    	print(cities.index('ddd'))

     

     

    조건문 ( if, elif, else)
    • 파이썬에서 조건문은 프로그램의 흐름을 결정하는 가장 기본적인 도구이다.
    • 논리값의 판단 : 숫자 0, 빈 문자열 " ", 빈 리스트 [ ] 등은 False로 간주한다.
    • 멤버십 연산자 (in, not in) : 리스트나 문자열 안에 특정 값이 있는지 확인할 때 사용하고, index error를 방지하는데 유용하다.
    • 코끼리 연산자 :=     : 변수 할당과 조건 검사를 한 번에 처리하여 코드 길이를 줄여주는 파이썬 기능 (구버전에서는 작동 안됨)
    # 중첩 if를 이용하여 학점 계산 프로그램 만들기
    
    score = int(input('점수를 입력하세요 :'))
    print(f'입력된 점수 : {score}')
    
    if score >= 60 : 
    	print("🎉합격입니다!")
        if score >= 90 :
        	grade = 'A'
        elif score >= 80 :
        	grade = 'B'
        elif score >= 70 :
        	grade = 'C'
        else :
        	grade = 'D'
        print(f'당신의 학점은 {grade}입니다.')
    else :
    	print('😔불합격입니다.')
        print('다음에 다시 도전하세요!')
    print('프로그램 종료')

     

     

     

    가비지 컬렉션 garbage collection
    • 더 이상 사용되지 않는 (참조 하지 않는, 참조 횟수가 0인) 객체를 파이썬이 자동으로 메모리에서 삭제해주는 기능
     ==   vs    is  
    • == : 객체에 담긴 값이 같은지 비교
    • is : 객체가 저장된 메모리 주소가 같은지 비교
    x = [1, 2, 3]
    y = [1, 2, 3]
    
    print(x == y) # True
    print(x is y) # False
    
    # is 는 메모리 주소가 같아야 한다.
    
    a = [1, 2]
    b = a # 주소값을 넘겨준다(복사)
    
    print(a == b) # True
    print(a is b) # True

     

    반복문 for, while

     

    • for 문 : 정해진 횟수나 데이터 집합을 순회할 때 사용 // range(초기값, 한계값, 증감값) 함수와 찰떡궁합
    • while :  조건이 참인 동안 무한히 반복 // break(반복 탈출), continue(다음 반복으로 건너 뛰기)
    • 중첩 루프 : for 안에 for 문이 들어가는 구조
    # 문제 횟수 카운트 프로그램
    total = 0
    count = 0
    
    for i in range(1, 11) :
    	count += 1
        total += 1
    
    print(f'1부터 10까지의 합계 : {total}')  # 55
    print(f'1부터 10까지의 합계를 위한 반복 횟수 : {count}') # 10

     

    # 2의 배수만 더하시오
    total = 0
    count = 0
    
    for i in range(1, 11) :
    	if i % 2 == 0 : # %의 나머지가 경우의 수
        	count += 1
            total += i
    print(f'2의 배수만 더한 합계 : {total}') # 30
    print(f'2의 배수 합계 반복횟수 : {count}') # 5
    
    # 3의 배수만 더하시오
    total = 0
    count = 0
    
    for i in range(1, 11) :
    	if i % 3 == 0 :
        	count += 1
            total += i
    print(f'3의 배수만 더한 합계 : {total}') # 18
    print(f'3의 배수 합계 반복횟수 : {count}') # 3

     

    # while을 이용한 반복문
    
    total = 0
    i = 1
    while i <= 10  # 한계값
    	total += i # 처리
        i += 1     # 증감값
    print(f'1부터 10까지 합계 : {total}')

     

     

    # 0이 아닌 숫자를 입력받아서 합계를 더하는 프로그램
    # 0이 입력되면 프로그램 종료
    
    total = 0
    while (1) : # 무한루프 -> 1이 True이므로 무한루프
    	num = int(input('숫자를 입력하시오 (0 입력시 프로그램 종료) : ')
        if num == 0 :
        	break
        total += num
    print('입력받은 숫자들의 합 : ', total)

     

     

    list comprehension 리스트 컴프리헨션
    • 리스트를 간결하게 생성할 수 있는 유용한 문법
    • 구조 : [ (변수) for (변수) in (반복 가능한 객체) ]
    • 작동원리 : for x in range(10) 이 실행 되어 나오는 각각의 x 값을 대괄호 [ ] 제일 앞에 있는 x 자리에 집어 넣는다
    # 일반 for문 + if문 방식
    list = []
    for x in range(10) :
    	if x % 2 == 0 : #짝수일때 실행
        	list.append(x)
    print(list) # [0, 2, 4, 6, 8]
    
    # list comprehension 방식
    result = [x for x in range(10) if x % 2 == 0] # 조건이 참인 경우에만 x위치로 전달
    print(result) # [0, 2, 4, 6, 8]

     

     

    '''
    <예제>
    0부터 9까지의 제곱값을 구하되, 그 제곱값이 30미만인 경우만 뽑아서 리스트로 생성하시오
    '''
    
    list = []
    for i in range(1, 10) :
    	if i**2 < 30 :
        	list.append(i**2)
    print(list) # [0, 1, 4, 9, 16, 25]
    
    # 컴프리헨션 방식
    result = [x**2 for x in range(10) if x**2 <30]
    print(result) # [0, 1, 4, 9, 16, 25]

     

    변수 작성 규칙
    • 변수이름으로부터 데이터가 추상 가능해야한다.

    <예제>

    2개의 데이터를 입력받아 숫자면 더해서 출력하고, 숫자인지 아닌지 출력하시오

    ※ isdigit() 함수 : 문자열이 모든 문자가 숫자인지를 검사. 소수점, 음수 기호, 지수 표기법 등의 추가 문자가 있는 경우 False

    num1 = input('첫번째 데이터를 입력하시오 : ')
    num2 = input('두번재 데이터를 입력하시오 : ' )
    
    if num1.isdigit() and num2.isdigit() :
    	print('합계는', str(eval(num1) + eval(num2)))
    elif not num1.isdigit() :
    	if not num2.isdigit() :
        	print('둘 다 숫자가 아님')
        else : 
        	print('처음 수가 숫자가 아님')
    else :
    	print('두번째 수가 숫자가 아님')

     

     

    <예제>

    수입(income)과 지출(cost)를 입력받아 순수입을 출력하는 프로그램을 작성하시오

    ※ 조건

    1) 수입과 지출이 동일한 경우를 고려하시오 (손익분기점)

    2) 소수점 둘째자리까지 출력하시오

    3) 결과에 따라 순수입과 순지출을 계산해서 출력하시오

    4) 경우의 수 (1. 수입=지출 / 2.수입>지출 / 3.수입<지출)

    income = eval(input('수입을 입력하시오'))
    cost = eval(input('지출을 입력하시오'))
    
    if income == cost :
    	print('손익분기점 입니다.')
    else : 
    	if cost < income :
        	profit = income - cost
            result = f'순수익 = {round(profit, 2)}'
        else :
        	loss = cost - income
            result = f'순손실 = {round(loss, 2)}'
    print(result)

     

     

    <예제>

                       STEADY         FLASHING

    BLUE          화창한날           구름낀날 

    RED            비오는날           눈오는날

    color와 mode를 입력받아서 날씨를 텍스트로 출력하는 프로그램 만드시오

     

    #### 내가 만든 ver. ####
    color = input('BLUE 또는 RED를 적어주세요')
    mode = input('STEADY 또는 FLASHING을 적어주세요')
    
    if color == 'BLUE' and mode == 'STEADY' :
    	print('화창한 날')
    elif not color == 'BLUE' :
    	if not mode == 'FLASHING' :
        	print('비오는 날')
        else :
        	print('눈오는 날')
    else : 
    	print('구름낀 날')
    
    #### 교수님 정답 ver. ####
    color = input('BLUE 또는 RED를 적어주세요')
    mode = input('STEADY 또는 FLASHING을 적어주세요')
    
    color = color.upper()
    mode = mode.upper()
    result = ''
    
    if color == 'BLUE' and mode == 'STEADY' :
    	result = '화창한 날'
    elif color == 'BLUE' and mode == 'FLASHING' :
    	result = '구름낀 날'
    elif color == 'RED' and mode == 'STEADY' :
    	result = '비오는 날'
    else :
    	result = '눈오는 날'
    
    print(f'예측된 날씨는 {result}입니다.)

     

     

    <예제>

    3개의 수를 입력받아, 제일 큰 수를 출력하시오

    num1 = eval(input('숫자 입력1 : '))
    num2 = eval(input('숫자 입력2 : '))
    num3 = eval(input('숫자 입력3 : '))
    
    max = num1
    if num2 > max :
    	max = num2
    if num3 > max :
    	max = num3
    print('제일 큰 수는', str(max))

     

    zip : 요소마다 2개씩 처리해야할 때 사용

     

    seq1 = ['a', 'b', 'c']
    seq2 = [10, 20]
    zipped = zip(seq1, seq2)
    list(zipped) #[('a', 10,), ('b', 20)]

     

     

    <과제> 컴퓨터와 숫자 맞추기 게임 프로그램

    게임이 끝나면 몇전 몇승 몇패 인지 출력하시오 + Q가 들어가면 종료

     

    더보기
    import sys
    import random
    
    total_count = 0
    win_count = 0
    lose_count = 0
    
    while(True) :
    	print('컴퓨터가 게임을 위한 수를 선택했습니다. (1 ~ 100)')
        com = randint(1, 100)
        count = 0
        
        while(True) :
        	person = input('숫자를 입력하세요. (종료를 원하면 Q를 입력하세요.)')
            if person.upper() == 'Q' :
            	print('\n', f'게임결과 : 총 {total_count}판을 실행하여, {win_count}승 {lose_count}패 입니다.')
            person_ans = int(person)
            count += 1
            
            if com > person :
            	print('컴퓨터의 숫자가 더 큽니다.')
            elif com < person :
            	print('컴퓨터의 숫자가 더 작습니다.')
            else :
            	print('정답니다!')
                win_count += 1
                total_count += 1
                break
            if count >= 10 :
            	print(f'게임 가능 횟수를 초과했습니다. 게임에 졌습니다. 정답은 {com}입니다.')
                lose_count += 1
                total_count += 1
                break

     

     

     

     

     

     

     

Designed by Tistory.