-
[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'컴퓨터, AI > (국비) Bio-Health AI' 카테고리의 다른 글
TIL (보충) 파이썬 비트연산자 (0) 2026.03.31 [Day 02, TIL] 파이썬 자료구조 : 데이터를 효율적으로 담는 바구니 (0) 2026.03.30 [Day 01, TIL] 파이썬의 메모리 구조와 객체 지향의 이해 (0) 2026.03.30