4. 선택 구조

【배우기】


엔트리로 해보자

파이선으로 해보자

선택 구조란 어떤 조건이나 상황에 따라 특정한 행동을 선택하는 것을 말한다. ‘만일 ~라면’이라는 조건이 참일 경우 A를 실행하고, 거짓일 경우 B를 실행한다’ 가 일반적인 선택 구조라고 할 수 있다.


이미지. 게임 스크린샷.

1엔트리로 해보자

가. 오브젝트 배치
이미지. 마룻바닥 오브젝트의 스크린샷

마룻바닥 오브젝트를 배경으로 추가한다.

이미지. 마룻바닥에 로봇청소기가 있는 화면의 스크린샷

로봇청소기(1) 오브젝트를 추가한다.

나. 로봇청소기로 청소하기
1) 로봇청소기 움직이기
이미지. 시작하기 버튼을 클릭했을 때 블록, 계속 반복하기 블록 이동방향으로 10만큼 움직이기 블록이 연결되어 있는 스크린샷

[예제코드]

[시작] 꾸러미 - [시작하기 버튼을 클릭했을 때] 블록

[흐름] 꾸러미 - [계속 반복하기] 블록

[움직임] 꾸러미 - [이동방향으로 O 만큼 움직이기] 블록

[이동방향으로 O 만큼 움직이기] 의 O에 10 입력하기

[실행결과]
이미지. 로봇 청소기가 이동방향으로 10만큼 움직이기 동영상의 스크린샷
2) 벽에 닿으면 회전하기
이미지. 시작하기 버튼을 클릭했을 때 블록에 연결된 계쏙 반복하기 블록에 이동 방향으로 10만큼 움직이기 블록, 만일 벽에 닿았는가?라면 블록, 이동 방향으로 130도 만큼 회전하기 블록이 있는 스크린샷

[예제코드]

[흐름] 꾸러미 - [만일 참이라면] 블록

[판단]꾸러미 - 벽에 닿았는가 블록을[만일 참이라면] 의 참에 삽입

[움직임] 꾸러미 - [이동방향을 O 만큼 움직이기] 블록

[이동방향으로 O 만큼 움직이기]의 O에 130도 입력하기

[실행결과]
이미지. 로봇 청소기가 벽에 닿으면 회전하기 동영상의 스크린샷
다. 코딩해보기
1) 마룻바닥 오브젝트에 냉장고와 소파를 배치하고 선택 구조를 이용해 가구에 닿지 않고 로봇청소기가 청소를 할 수 있게 해 보자.
이미지. 마룻바닥 오브젝트에 냉장고와 소파, 로봇 청소기가 있는 스크린샷
이미지. 시작하기 버튼을 클릭했을 떄 블록에 연결된, 계속 반복하기 블록, 이동 방향으로 10만큼 움직이기 블록, 만일 벽에 닿았는가?라면 이동 방향으로 133도만큼 회전하기 블록, 만일 냉장고에 닿았는가?라면 이동 방향을 133도 만큼 회전하기 블록, 만일 소파에 닿았는가? 라면 블록, 이동 방향으로 133도 만큼 회전하기 블록이 있는 스크린샷.
[실행결과]
이미지. 로봇 청소기가 가구에 닿지 않고 청소하는 동영상의 스크린샷
2) 1~20사이의 수를 하나 선택하는 물음의 대답을 들은 후 10보다 작은 경우에는 “입력한 수는 10보다 작습니다.”를 말하고, 그렇지 않은 경우에는 “입력한 수는 10보다 작지 않습니다.”를 말하게 해보자.
이미지. 시작하기 버튼을 클릭했을 때 블록, 1~20사이의 수를 입력해주세요 를 묻고 대답 기다리기 블록, 만일 대답이 10보다 작다면, 입력한 수는 10보다 작습니다를 말하기 블록,아니면 입력한 수는 10보다 작지 않습니다 를 말하기 블록이 연결되어 있는 스크린샷
[실행결과]
이미지. 숫자를 선택하는 동영상의 스크린샷

2파이선으로 해보자

파이선에서는 if 문을 통해 프로그램의 흐름을 제어할 수 있다. 예를 들면 ‘만약 “예”라고 입력하면 반복하여 실행합니다.’라는 조건문을 통해 프로그램의 흐름을 제어할 수 있다.

if 조건:

명령1

명령2

elif:

명령3

명령4

else:

명령5

명령6

if 뒤에 흐름을 제어할 조건이 오게 되며, 그 뒤에 콜론(:)을 붙여준다.

if 조건 콜론(:) 뒤에 들여 쓰기로 이루어진 코드 블록이 옵니다. if문 뒤의 명령은 if문의 조건이 True일 경우 실행된다.

elif는 else if의 약자로 앞에 반드시 if가 있어야 한다. elif가 있을 경우 첫 번째 if 문을 확인해 조건을 충족하면 뒤의 elif는 확인하지 않고 넘어가서 효율적이다.

if 문의 조건이 False인 경우 else 콜론(:) 뒤의 명령이 실행된다.

가. if 문

파이선에서는 변수의 이름을 직접 지어줘야 하는데, 다음 규칙을 지켜서 지어야 한다.

예제코드,4_1.py

a=int(input(“1~20사이의 정수를 입력해 주세요:”))


if a <10 :

  print(“입력한 수는 10보다 작습니다.”)


else :

  print(“입력한 수는 10보다 작지 않습니다.”)


이미지. 4_2.py의 순서도. 시작, a=int(input()), a<10 이 true면, print("입력한 수는 10보다 작습니다."), 종료, a<10이 false면 print("입력한 수는 10보다 작지 않습니다"), 종료
실행결과

> 4_1.py

1~20사이의 정수를 입력해주세요: 8

입력한 수는 10보다 작습니다.


> 4_1.py

1~20사이의 정수를 입력해주세요: 15

입력한 수는 10보다 작지 않습니다.

1행에서는 int(input( )) 함수를 사용해서 변수 a에 정수 입력 값을 받을 수 있도록 하였다. 입력하고 싶은 값은 출력할 경우 나타나는 콜론 옆에 입력하면 된다. 이때 int(input( )) 함수를 사용한 이유는 입력받은 값을 정수로 변환하여야만 수로 인식해서 비교가 가능하기 때문이다. input( ) 함수는 입력받은 값을 문자열로 전환하기 때문에 int(input()) 함수를 사용해서 입력받은 수를 정수 형태로 변환해야 하는 것이다.

3행에서 if를 사용하여 a가 10보다 작다는 조건을 만들었다. 입력받은 변수 a가 주어진 조건에 True인 경우 if 문 아래 들여 쓰기로 되어있는 행인 print(“입력한 수는 10보다 작습니다.”) 함수가 실행되지만 주어진 조건에 False인 경우 else 문 아래 들여쓰기 되어 있는 print(“입력한 수는 10보다 작지 않습니다.”)가 실행된다.

나. 코딩해 보기
1) a와 b를 입력받아 a+b의 값이 10보다 크면 “두 수의 합이 10보다 큽니다.”라고 출력되고, 그렇지 않을 경우 “두 수의 합이 10보다 크지 않습니다.”라고 출력되는 프로그램이 되도록 코딩해 보자.

a=int(input(“정수를 입력해 주세요:”))

b=int(input(“정수를 입력해 주세요:”))


if a+b>10 :

  print(“두 수의 합이 10보다 큽니다.”)

else :

  print(“두 수의 합이 10보다 크지 않습니다.”)

2) c와 d를 입력받아 “(입력한 수 중 큰 수)가 (입력한 수 중 작은 수)보다 큽니다.”라고 출력되고, 두 수가 같으면 “두 수는 같습니다.”라고 출력되는 프로그램이 되도록 코딩해 보자.

c=int(input(“정수를 입력해 주세요:”))

d=int(input(“정수를 입력해 주세요:”))


if c>d :

  print(“%d이(가) %d보다 큽니다.” % (c,d))

else :

  if d>c :

   print(“%d이(가) %d보다 큽니다.” % (d,c))

else :

   print(“두 수는 같습니다.”)

생각해 보기

1) 1~100사이의 정수를 입력받고, 입력받은 수가 10미만일 경우 “한 자릿수입니다.”, 10 이상 100미만일 경우 “두 자리 수입니다.”, 100일 경우 “세 자리 수입니다.”를 출력하도록 해 보자.

2) 1~100사이의 정수를 입력받고, 짝수일 경우에는 “짝수입니다.”를 출력하고, 그렇지 않을 경우에는 “홀수입니다.”를 출력하도록 해 보자.

3) 다음 코드의 결과 값은 무엇일까?

a = “지금까지 이런 프로그래밍 언어는 없었다. 이것은 언어인가 마술인가”

if ‘지금도’ in a:

  print(‘지금도’)

elif ‘프로그래밍’ in a and ‘언어는’ not in a:

  print(‘프로그래밍’)

elif ‘치킨’ not in a:

  print(‘치킨’)

elif ‘언어인가’ in a:

  print(‘언어인가’)

else:

  print(‘꽝’)