명령어가 적힌 순서대로 위에서 부터 아래로 순차적으로 실행되는 구조 - 별다른 실행 순서가 배정되어 있지 않아 단순하게 실행 가능 - 결과값을 내기 위해 시작 단계부터 끝단계까지 모든 코드를 거침
선택구조 / 반복구조
선택구조 - 특정한 외부에서 주어지는 조건 혹은 프로그램 자체가 가지는 판단에 의해서 수행가능한 실행모듈 중 일부를 선택하여 실행함 - 어떠한 실행모듈을 수행하더라도 최종 목적을 달성하는데에 지장이 없는 경우 - 선택구조를 구현하는 문장을 조건문으로 칭함
반복구조 - 특정한 명령어를 주어진 조건 하에서 조건이 만족하는 동안 계속해서 반복하는 형태 - 반복구조를 구현하는 문장을 반복문으로 칭함
조건문 : 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절을 빠져나올 때 까지, 순차적으로 결과(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미만의 점수들이다.