알고리즘 박살내기 - 08. 파이썬 기초(조건문)
Introduction
본 포스트는 알고리즘 학습에 대한 정리를 재대로 하기 위하여 남기는 것입니다. 더불어 기본 내용은 나동빈 저의 〖이것이 취업을 위한 코딩 테스트다〗라는 교재 및 유튜브 강의의 내용에서 발췌했고, 그 외 추가적인 궁금 사항들을 검색 및 정리해둔 것입니다.
조건문
개념
- 프로그래밍 언어를 배우면서 진행하셨던 많은 분들이라면, 조건이라는 개념에 익숙하실 겁니다. 하지만 처음 시작하는 사람 입장에선 딱히 그렇지만도 않죠. 이에 대해 개념을 정리해보면 다음과 같습니다.
“컴퓨터 과학에서 조건문(條件文, conditional)이란 프로그래머가 명시한 불린 자료형 조건이 참인지 거짓인지에 따라 달라지는 계산이나 상황을 수행하는 프로그래밍 언어의 특징이다. -위키백과”
- 조건문의 핵심은 행동을 결정하는데 있다고 생각합니다. 어떤 특정 데이터나, 데이터를 활용한 수식, 그 수식이 참(True)이나 거짓(False)이냐에 따라 다음 할 일을 결정지어주고, 그것들이 쌓이고 쌓이면 우리가 이야기하는 프로그램의 작동 방식이 결정된다고… 다소 어폐가있지만 충분히 단순화 시킨다면 그렇게 볼수 있습니다.
- 조건문을 이용해서 프로그램의 로직을 수행하도록 만들수 있다고 보시면 됩니다
조건문 예제
x = int(input("숫자를 입력해주세요"))
if x >= 10:
print("x > 10")
if x >= 0:
print("x >= 0")
if x >= 30:
print("x >= 30")
"""
실행 결과
>> x = 14
숫자를 입력해주세요14
x > 10
x >= 0
"""
들여쓰기
-
공부를 하고 코드를 작성하면서, 다소 당황스러운 부분이 생기실 수 있습니다. 저도 C를 쓰다가 알고리즘을 하겠다고 파이썬을 다시 만지면서 생기는 일인데, C에선 코드 블록을 표현하는 방식이 무엇이든 상관이 없습니다. 오히려 중요한 것은 여러 줄의 코드를 합쳐 코드 블록을 만들 땐 {} 중괄호 안에 넣으면 되지요.
-
하지만 파이썬은 간혹 쓰다보면 계속 이상한 오류를 남발할 때가 있습니다. 이는, 파이썬이 코드블록을 오로지 ‘들여쓰기(Indent)’ 로 지정하여 작성하기 때문입니다.
x = int(input("숫자를 입력해주세요"))
if x >= 10: # 여기서부터
print("x > 10") # 여기까지가 코드 블록입니다.
if x >= 0: #여기서부터
print("x >= 0")
print("x가 적당하군요. ") # 여기까가 코드 블록입니다
print("조건문이 끝났습니다.") # 여긴 조건문과 상관 없는 코드입니다.
-
이러한 들여쓰기가 매우 중요한 상황에서 파이썬은 특히나 엄격합니다. 탭과 공백문자 사이에서 혼용해서 사용시 오류가 생길 수 있음을 유의하셔야 합니다.
-
파이썬 스타일 가이드라인에선
4개의 공백 문자를 사용하는 것
을 표준으로 설정하고 있습니다.
조건문의 기본형태
- if ~ elif ~ else
- 여기서 핵심은 조건문의 덩어리와 별개로 작성된 조건문은 별개의 조건문입니다.
- elif 는 다른 언어에서
else if
를 줄인 것으로 생각하시면 되며, 여러 개로 작성할 수 있습니다.
if 조건문 1:
실행될 코드
elif 조건문 2:
조건문 1이 만족되지 못하고, 2가 만족되면 실행될 코드
else :
조건문 2도 만족되지 못하면 최종적으로 실행되는 코드
if 조건문 1':
위의 조건문과는 별개의 조건문으로 만족시 실행될 코드
성적 구간에 따른 학점 출력 예제
- 정말 뻔하지만 조건문을 연습할 수 있는 좋은 예제 입니다.
score = int(input("성적을 입력하여 주십시오. 0~100(정수만 입력하여주세요.\n)"))
if score >= 90:
print("학점 : A")
elif score >= 80:
print("학점 : B")
elif score >= 70:
print("학점 : C")
else:
print("학점 : F")
연산자
비교 연산자
-
비교를 하는 연산자 종류 입니다. 유의할 점은 대입연산자(
=
)와 같음 연산자(==
)가 다른 종류라는 점입니다.비교 연산자 설명 X == Y X와 Y가 서로 같을 때 참(True)이다. X != Y X와 Y가 서로 다를 때 참(True)이다. X > Y X 가 Y 보다 클 때 참(True)이다. X >= Y X 가 Y 보다 크거나 같을 때 참(True)이다. 크기 비교 연산자는 반대 방향도 있는거 아시죠?
논리 연산자
-
논리 연산자는 참, 거짓 값(True, False) 사이의 연산을 수행하는 방식입니다.
논리연산자 설명 X and Y X와 Y 모두 참(True)일 때 참이 된다. X or Y X와 Y 중 하나만 참(True)일 때 참이 된다. not X X가 거짓(False)일 때 참(True)이 된다. 1 과 0을 활용하시면 훨씬 더 쉽게 이해 되실 겁니다.
and : 1 _ 1 = 1(True), 1 _ 0 = 0 (False)
or : 1 + 1 = 2(True), 1 + 0 = 1 (True), 0 + 0 = 0(False)
파이썬의 기타 연산자
-
다수의 데이터를 담은 자료형을 위한 in, not in 연산자를 제공합니다.
-
이는 리스트, 튜플, 문자열, 딕셔너리 모두 사용이 가능합니다.
기타 연산자 설명 X in [자료형] 해당 자료형 안에 X가 있을 때 참(True)이다. X not in [자료형] 해당 자료형 안에 X가 없을 때 참(True)이다.
파이썬의 Pass 키워드
- 아무것도 처리하고 싶지 않을 때 pass 키워드를 사용합니다.
- 이는 디버깅 과정에서 자료가 어떤 식으로 될런지를 체크하기 위해 해당 조건 등을 넘기기 위해 사용된다고 생각하시면 좋습니다.
score = 85
if score >= 80:
pass # 나중에 작성할 부분
"""만약 pass가 없다면?
파이썬에서 기대하는 코드블록이 없으므로 오류를 냅니다."""
else:
print("성적이 80점 미만입니다.")
print('프로그램을 종료합니다.')
"""
실행결과
프로그램을 종료합니다.
"""
조건문의 간소화
- 조건문에서 실행될 소스 코드가 한 줄이라면 줄 바꿈 안하고도 표현이 가능합니다.
- 조건부 표현식(Conditional Expression)은 if ~ else 문을 한 줄에 작성할 수 있도록 해줍니다.
score = 85
# 길게 쓴 버전
if score >= 80:
result = "Success"
else:
result = "Fail"
print(result)
#짧게 쓴 버전
if score >=80: result = "Success"
else: result = "Fail"
print(result)
#조건 표현식
result = "Success" if score >= 80 else "Fail"
print(result)
'''
실행결과
Success
Success
Success
'''
파이썬 조건문 내의 부등식 사용 방법
- 파이썬은 조건문 안에서 수학의 부등식을 그대로 사용할 수 있습니다.
- 예를 들어, C의 경우
x > 0 and x < 20
라고 조건을 걸어야 한면, 파이썬은0 < x < 20
같은 형태도 된다는 말입니다. - 단, 학습을 위해서 기본적으로는 전통적인 형태의 조건문을 예제로 들 것입니다.
- 더불어 왜 전통적인 형태의 경우로 부등식을 사용하는가? 를 생각해보면, 순차적인 언어라는 점, 그리고 True, False 가 1과 0이라는 정수값으로 처리되기 때문입니다.
#include <stdio.h>
int main(void)
{
int x = 25;
if (0 < x < 30)
printf("참입니다.");
return (0);
}
- 위의 예시를 통해 보며면 0 < x 는 참이 됩니다. 즉 True가 실행이 먼저 되는데, 이때 정수 값 1이 되므로 1 < 30 으로 변경되어 버리게 됩니다. 즉 무조건 참이 되는 구조가 되다보니 이 경우 정상적인 조건문 수행이 안되므로 고전적인 방법인
x < 0 and x < 30
으로 해야 정확한 계산이 가능해집니다.