앞 글들을 통해 파이썬이 무엇인지, 그리고 파이썬의 변수, 연산자에 대해서 알아보았다.
이제 간단한 프로그램들을 만들어보면서 직접 실습을 해보려 한다.
프로그램을 작성할 때, 사용할 수 있는 세 가지의 기본적인 제어 구조가 있다.
- 순차 구조 sequence - 여러 명령이 순차적으로 실행되는 구조
- 선택 구조 selection - 여러 개 중 하나의 명령문을 선택하여 실행하는 구조
- 반복 구조 iteration - 동일한 명령이 반복되면서 실행되는 구조
우리가 앞서 만들어보았던 아주 간단한 프로그램들은 순차 구조에 속한다.
코드의 흐름이 마치 자동차가 직진만 하듯이 쭉 내려오면서 실행되는 것이다.
이제 우리는 어떠한 조건에 따라서 코드가 다르게 실행되는 "선택 구조" 를 만들어보려고 한다.
선택 구조는 질문을 한 후에 결정하는 것이다.
만약 선택 구조가 없다면 프로그램은 항상 동일한 동작만을 되풀이 하고, 동일하게 정해진 결론에 도달할 것이다.
상황에 따라 반응하는 유연한 프로그램을 만들 수 없다면, 현실에서 별로 쓸모가 없을 것이다.
어떠한 조건을 만족하는지 그렇지 않은지를 판정하는 식을 조건식 condition expression 이라고 한다.
이 조건식은 참 또는 거짓의 값을 갖는 부울 bool 형으로 평가된다.
조건식으로 이용될 수 있는 수식으로는 앞장에서 살펴본 관계 연산자와 논리 연산자가 있다.
관꼐 연산자의 결과는 True 아니면 False 로 나타난다.
조건식을 사용하여 구조를 만들어보자.
선택 구조를 만들 때에는 if 문을 사용하면 된다.
if 조건식 :
실행할 내용
위 방식으로 코딩을 하면 조건식을 평가한 결과가 True 이면 실행할 내용이 실제로 실행되고,
그렇지 않으면 실행할 내용을 실행하지 않고 건너 뛰어 넘어간다.
실제 코드로 확인해보자.
x = 100
if x > 1 :
print("x는 1보다 큽니다")
위 코드는 변수 x 에 100을 넣어준 후, 조건식 결과가 True 가 되면 문자열이 출력되는 방식이다.
x 가 100 이므로 x > 1 가 True 를 반환한다.
따라서 아래 실행할 내용이 실행되어 문자열이 출력되는 것을 볼 수 있다.
여기서 주의할 점은 파이썬은 if 문을 괄호로 감싸지 않는다.
조건식 이후 : (콜론) 을 붙이는데
콜론 아래의 줄은 반드시 들여쓰기를 해야 한다.
콜론 아래의 들여쓰기 되어있는 라인들은 조건문에 해당한다고 인식한다.
만약 조건이 참인 경우에 여러 개의 문장이 실행되어야 한다고 하면,
여러 개의 문장을 각각 들여쓰기 하여 묶으면 된다.
아래 코드는 그 예시이다.
if score > 90 :
print('축하합니다.')
print('합격입니다.')
print('장학금을 수령하세요.')
score 변수의 값이 90 보다 크다면, 세 개의 print() 가 다 실행된다.
이와 같이 파이썬에서 문장 앞에 동일한 개수의 공백이 있으면 이들 문장들은 하나의 블록에 속하게 된다.
만약 동일한 블록에 속해야 하는데 공백을 더 많이, 또는 더 적게 추가하였다면 오류가 발생한다.
파이썬에서 들여쓰기는 항상 신경써야 하는 부분이다.
파이썬에서는 선택 구조를 위하여 if-else 문을 제공한다.
if-else 문은 "조건이 참이면 이것을 실행하고, 조건이 참이 아니라면 저것을 실행해" 라고 말하는 것과 같다.
예시를 보는 것이 더 이해가 빠를 것 같다.
if score >= 60 :
print('합격입니다.')
else :
print('불합격입니다.')
점수가 60 이상이면 합격 메세지를 출력하고, 그게 아니면 불합격 메세지를 출력해야 한다고 하자.
이런 경우엔 위 코드와 같이 작성하여 주면 된다.
어떤 조건을 만족하는 경우 if 블록에, 해당 조건이 만족하지 않는 경우엔 else 블록에 실행문을 넣어주면 된다.
이러한 if-else 구문은 중첩해서 작성할 수도 있다.
예를 들어 사용자로부터 임의의 정수를 입력받은 후, 짝수인지 홀수인지를 판별하는 코드를 작성해보자.
다만 입력받은 값이 음수인 경우에는 음수라는 메세지만 출력하도록 하자.
num = int(input('정수를 입력하시오 : '))
if num < 0 :
print('음수입니다.')
else :
print('양수입니다.')
if num % 2 == 0 :
print('짝수입니다.')
else :
print('홀수입니다.')
위 코드를 하나씩 살펴보도록 하자.
먼저 num 변수의 값이 음수이면 "음수입니다." 메세지만 출력하고 프로그램은 끝이 난다.
그게 아니라면 "양수입니다." 메세지를 출력하고, 중첩된 조건식을 체크한다.
num 변수의 값을 2로 나눈 나머지가 0이라면 곧 짝수라는 뜻이므로 "짝수입니다." 메세지를 출력하고,
나머지가 0이 아니면 홀수이므로 "홀수입니다." 메세지를 출력한다.
그렇다면 이번엔 앞서 배운 터틀 그래픽을 이용하여 조건에 따라 동작하는 프로그램을 만들어보자.
터틀 그래픽을 모르겠다면 해당 글을 참고하자.
파이썬 쉘에서 'l' 을 입력하면 거북이가 왼쪽으로 100픽셀 이동하고,
'r'을 입력하면 거북이가 오른쪽으로 100픽셀 이동하는 프로그램을 작성해보자.
이러한 프로그램에서는 계속해서 반복되는 것이 좋다. 이때는 아직 배우지 않았지만 무한 루프 구조를 사용한다.
이 프로그램은 Ctrl+c 를 누르면 중지한다.
import turtle
t = turtle.Turtle()
t.shape('turtle')
t.width(3) # 거북이가 그리는 선의 두께를 3으로 한다.
t.shapesize(3, 3) # 거북이의 크기를 3배 확대
# 무한 루프로 진입. 이 루프는 Ctrl+c를 입력받아 종료
while True :
command = input('명령을 입력하세요 : ')
if command == 'l' :
t.left(90)
t.forward(100)
if command == 'r' :
t.right(90)
t.forward(100)
해답 코드는 다음과 같다.
위 코드를 실행하여 보면 다음과 같이 동작하는 것을 볼 수 있다.
if-else 문에서 조건이 거짓일 때 다른 조건을 검색할 수 있다.
이때는 elif 키워드를 사용하면 된다. elif 는 "else if"를 합친 것이다.
사용자로부터 정수를 입력받아서 이 값을 보고 양수인지, 0인지, 음수인지를 판별하여 출력하는 프로그램을 만들어보자.
해당 코드는 다음과 같이 작성할 수 있다.
num = int(input('정수를 입력하시오 : '))
if num > 0 :
print('양수입니다.')
elif num == 0 :
print('0입니다.')
else :
print('음수입니다.')
이제 마지막으로 난수를 이용하여 간단한 축구 게임을 작성하여 보자.
random 모듈에 대해서 모르겠다면 아래 게시글을 참고하자.
사용자가 컴퓨터를 상대로 패널티킥을 시도하고 있는 상황이다. 사용자는 '왼쪽', '중앙', '오른쪽' 의 3가지 중
하나를 선택하여 패널티킥을 한다. 컴퓨터도 난수를 생성하여 3개의 영역 중에서 하나를 수비한다.
출력은 다음과 같이 나타나도록 하자.
앞장에서 살펴본 랜덤모듈을 이용해서 1, 2, 3 중 하나의 값을 생성하고,
그리고 if-elif-else 문을 이용하여 컴퓨터의 수비 위치를 정한다.
다음으로 사용자의 입력을 받아서 사용자의 입력값과 비교하여 그 결과가 일치하면
사용자가 공격에 실패한 것이고, 그렇지 않으면 공격에 성공한 것이다.
해답 코드는 다음과 같다.
import random
n = random.randint(1, 3)
if n == 1 :
computer_choice = '왼쪽'
elif n == 2 :
computer_choice = '중앙'
else :
computer_choice = '오른쪽'
user_choice = input('어디를 공격하시겠어요? (왼쪽, 중앙, 오른쪽) : ')
if computer_choice == user_choice :
print('공격에 실패하셨습니다.')
else :
print('축하합니다!! 공격에 성공하였습니다.')
print('컴퓨터의 수비위치 : ', computer_choice)
이번 장에서는 조건문에 대해서 알아보았다.
무한 루프를 사용하면서 이미 반복문 구조가 살짝 나왔지만
반복문에 대해서 다음 장에서 자세히 알아보도록 하자.
이번 장에서 배운 조건문은 코딩을 하는 데 있어 빠질 수 없는 부분이다.
코드를 짤 때, 이러한 조건에 따른 코드의 흐름을 잘 따져서 설계를 해 놓은 후 코드를 짜는 것이
중요하다는 것을 이번 장을 공부하며 느꼈다.
또한 간단한 코딩이라도 막히는 부분이 있다면, 문제를 작게 쪼개서 작은 문제부터 해결하는 습관을 들이자 :)
출처 : 따라하며 배우는 파이썬과 데이터 과학 - 천인국, 박동규, 강영민