자운최고지식인되기/파이썬 공부

3-1. 선택과 반복 [이론 및 실습]

ssoy1206 2025. 3. 5. 18:39

선택과 반복

프로그램 구조

순차구조

 

명령어가 적힌 순서대로 위에서 부터 아래로 순차적으로 실행되는 구조
- 별다른 실행 순서가 배정되어 있지 않아 단순하게 실행 가능
- 결과값을 내기 위해 시작 단계부터 끝단계까지 모든 코드를 거침

 

선택구조 / 반복구조

선택구조
- 특정한 외부에서 주어지는 조건 혹은 프로그램 자체가 가지는 판단에 의해서 수행가능한 실행모듈 중 일부를 선택하여 실행함
- 어떠한 실행모듈을 수행하더라도 최종 목적을 달성하는데에 지장이 없는 경우
- 선택구조를 구현하는 문장을 조건문으로 칭함

반복구조
- 특정한 명령어를 주어진 조건 하에서 조건이 만족하는 동안 계속해서 반복하는 형태
- 반복구조를 구현하는 문장을 반복문으로 칭함

조건문 : if문

if-else 문의 기본 구조

if 조건 : #조건의 참, 거짓에 따라 실행 결정
	문장1 ⌉ #조건이 참일 때 실행
	문장2 ⌋ #조건이 참일 때 실행

else :
	문장1 ⌉ #조건이 거짓일 때 실행
	문장2 ⌋ #조건이 거짓일 때 실행

문장3 #조건문을 빠져 나왔을 때 실행

🔸실행할 명령어 범위는 들여쓰기로 표시

같은 폭의 들여쓰기가 되어 있는 연속적인 명령문들을 한 묶음으로 간주

🔸 if절은 보통 else와 같이 쓰임

else없이 if만 단독으로 쓰이기도 함

🔸 문장3은 if-else와 같은 레벨에 위치

→ 문장1,2의 경우 if절과 else절 안에 들어가 있기 때문에 그 내부에서만 시행되는 (즉, 조건이 충족되어 실행을 행해야할 경우에만 실행이 됨) 명령문인데, 문장3의 경우 if-else와 동일한 레벨에 있기 때문에 독립적인 별도의 문장으로서 조건에 따라 if절 혹은 else절이 실행된 이후 순차적으로 실행된다.

🔸 if절과 else절 다음에 반드시 콜론 사용 (파이썬 문법)

🔸 if와 else 절에서 수행하는 명령문이 간단할 경우 전체 조건문을 한 줄로 작성 가능

x , y = 5 , 7
max = x if x > y else y  # x>y 일 경우, max에 x값 대입, 아닐 경우 max에 y값 대입
print(max)

 

들여쓰기 오류의 예

if 조건 :
	문장1
	문장2
		문장3

문장1 : 한 번 들여쓰기로 참일 때 실행할 문장임을 나타냄

문장2 : 연이어 한 번 들여쓰기로 역시 참일 때 실행할 문장임을 나타냄

문장3 : 오류 발생 (두 번의 들여쓰기로 인해 어떤 범주에 속하는지 모호함)

if 조건 :
	문장1
문장2
	문장3

 

문장1 : 한 번 들여쓰기로 참일 때 실행하는 문장임을 나타냄

문장2 : 들여쓰기를 하지 않아 참일 때 실행되는 문장이 아님을 나타냄 (if절 내의 조건문 수행 후 조건문을 빠져나와서 순차 수행)

문장3 : 오류 발생 (아무런 의미 없이 들여쓰기를 사용하여 인터프리터가 문장을 해석하는데 모호성이 발생)

 

💡 두번째 케이스의 경우,

문장 1~3 모두 조건이 참일 경우에만 조건절로서 실행되어야하면 문장2를 들여씀으로서 오류 해결.

문장1만 조건절이고 2,3이 조건절과 관계없이 독립적으로 반드시 실행되어야하면 문장3을 문장2와 같은 레벨로 옮겨서 오류해결.

 

비교연산자 : True 또는 False 반환

수학기호 파이썬 기호 (True를 리턴하는 경우) 거짓 (False를 리턴하는 경우)
a = b a == b a b가 같으면 a b가 다르면
a ≠ b a != b a b가 다르면 a b가 같으면
a b a < b a b보다 작으면 a b보다 크거나 같으면
a ≤ b a <= b a b보다 작거나 같으면 a b보다 크면
a b a > b a b보다 크면 a b보다 작거나 같으면
a ≥ b a >= b a b보다 크거나 같으면 a b보다 작으면
프로그램을 실행 했을 때 조건절에 a==b 라는 파이썬 비교연산자가 있는 경우,
a의 값이 b의 값과 같으면 True return
a의 값이 b의 값과 다르면 False return

 

비교연산자 - 조건절 예시

price = int(input("주문금액 입력 : "))
shipping_cost=3000

if price >= 50000: # 비교연산자 사용
 shipping cost = 0 # 위의 조건이 True일 때만 실행

print("총 지불 금액은",price+shipping_cost,"원 입니다.")

if절에 대해 True가 return된 경우(左) / if 절에 대해 False가 return된 경우(右)

 

논리연산자 : True 또는 False 반환

논리 기호 설명
x and y (논리곱 AND) x y 모두 참이면 참(True), 하나라도 거짓이면 거짓(False)
x or y (논리합 OR) x 또는 y 둘 중 하나라도 참이면 참(True), 모두 거짓이면 거짓(False)
not x (논리 부정 NOT) x가 거짓이면 참(True), x가 참이면 거짓(False)

 

논리연산자 - 조건절 예시

price=int(input("주문금액 입력 : "))
card=input('카드 종류 입력 : ')

if price>=30000 and card=='python': # 모두 참일 때만 참
 print('배송료가 없습니다.') #위의 조건이 True일 때 실행
else:
 print('배송료는 3,000원 입니다.') # 위의 조건이 False일 때 실행

if절에 대해 논리연산자가 True를 return하는 경우

  • 첫번째 조건 : 주문금액이 30,000원 이상인가
  • 두번째 조건 : 카드가 python인가
  • and 연산자 이므로 둘다 만족해야 if절 전체가 True가 됨

if절에 대해 논리연산자가 False를 return하는 경우

💡 논리연산자는 비교연산자보다 우선순위가 낮음

⇒ if절 내에서 조건을 수행할 때 price와 card의 비교연산자를 각각 수행한다음 해당 수행에 대한 True와 False를 논리연산자(AND)가 비교하는 순서로 처리됨


조건문 고급

중첩 if문

💡 if문 내에 다른 if문이 사용된 경우

price=int(input("주문금액 입력 : "))
local=input('지역 입력 : ')

if local == '제주도':
 if price>=100000:
  print('배송비는 0원 입니다.')
 else :
  print('배송비는 8000원 입니다')
else :
 if price>=50000:
  print('배송비는 0원 입니다.')
 else :
  print('배송비는 3000원 입니다.')
  • 서로 대응되는 if와 else는 들여쓰기 폭이 같아야 함
  • local(지역)변수를 구분하는 if와 else를 구분한 후, 각각의 if절과 else절 안에 주문금액에 따른 if-else가 추가됨

중첩 if문 - 예시 실행 결과

 

 

연속 if문 : (else + if)

💡 셋 이상의 요소에 대해 각각 배타적인 조건검사를 해야할 경우에 사용할 수 있는 if절

⇒ if, elif, else… / if, elif ⁿ ⁺ ¹ , elif ⁿ ⁺ ², … , else 형태로 나열

⇒ if, elif, else는 같은 레벨에 위치해야함

⇒ if절을 빠져나올 때 까지, 순차적으로 결과(True or False)를 판단하기에 속성이 중복되지 않도록 순서 배열 필요

만약, 나열된 조건 중간에 True가 반환된다면, 그 이후 조건에 대해 더 이상 검정하지 않고 if-else문을 빠져나온다

 

연속 if문 예시

점수 평점
90점 이상 A
80점 이상 90점 미만 B
70점 이상 80점 미만 C
60점 이상 70점 미만 D
60점 미만 F

🔸 평점 A,B,C,D,E는 각각 배타적인 속성을 지님

🔸 input으로 입력된 Number형 자료(점수)에 대해 String(평점)을 판단하고 출력해내는 프로그래밍을 작성한다고 가정

 

score = int(input('점수입력 : '))

if score>=90:
 grade='A'
elif score>=80: # 위의 모든 조건이 False일 때 검사
 grade='B'
elif score>=70: # 위의 모든 조건이 False일 때 검사
 grade='C'
elif score>=60: # 위의 모든 조건이 Flase일 때 검사
 grade='D'
else:           # 위의 모든 조건이 False일 때 검사
 grade='F'

print(f'입력한 점수 {score} 에 대한 등급은 {grade} 입니다.')

🔸 첫번째 시행 점수 (98점)에서 if score≥90을 검사해서 참으로 통과했으므로 elif, else조건 검사 없이 해당 조건절을 벗어나고 결과값을 출력함

🔸 elif-else절에서 별도로 n점 미만의 조건을 주지 않는 이유는, 위의 조건에서 이미 false된 점수들을 대상으로 True, False를 판단하기에, 이미 elif≥80 포함 아래절들에 넘어온 순간 90점 이상이라는 조건을 만족시키지 못했으므로 자연스럽게 90미만의 점수들이다.

🔸 효율성을 위해, 즉, 위에서 거짓이라고 판명된 조건은 다시 검사하지 않음