본문 바로가기

STUDY/Python

[데이터 과학을 위한 파이썬 프로그래밍_2판] 4. 조건문과 반복문

연습문제 풀이.

 

1. 다음은 입력된 나이에 따라 학교를 구분하는 함수다. ABC를 입력했을 때 결과는?

year = int(input('나이를 입력하세요 : '))

if 1<=year<=7:
    print('미취학아동입니다')
elif 8<=year<=13:
    print('초등학생입니다')
elif 14<=year<=16:
    print('중학생입니다')
elif 17<=year<=19:
    print('고등학생입니다')
elif 20<=year:
    print('성인입니다')
else:
    print('1부터의 정수를 입력해 주세요')

- 답 및 해설

=> year는 입력받은 input 데이터를 int형 데이터로 바꾼다. ABC는 int형 자료로 바뀔 수 없기 때문에, ValueError가 뜬다.

 

 

 

2. 다음과 같이 코드를 작성했을 때, 실행 결과는?

for a in range(8):
    a *= (a-1)
print(a)

- 답 및 해설

=> a *= (a-1)은 a = a * (a-1)의 의미를 갖는다. 그러나, a는 매번 for문이 시행될 때 마다 0, 1, ... , 7로 초기화가 되기 때문에 맨 마지막 for문 시행 외에 나머지 시행은 의미가 없다.

즉 출력되는 a값은 7 * (7-6) = 42

 

 

 

3. 변수 age의 자료형이 정수형일 때는 '숫자'가 출력되고, 문자형일 때는 '문자'가 출력되는 코드를 작성했다. 빈 칸에 알맞은 코드를 고르시오.

ages = ['one', 8, 'twenty', 40]

for age in ages:
    if 빈칸 : 
        print(age, '숫자')
    else:
        print(age, '문자')

① type(age) == 'int'     ② type(age) == int     ③ type(age) == 'str'     ④ type(age) = int     ⑤ type(age) == str

 

- 답 및 해설

② type(age) == int

=> 'int'나 'str'는 int, str라는 문자형 데이터이고, =는 '같다'는 의미를 나타내는 것이 아닌 변수에 데이터를 할당하라는 의미이다.

 

 

 

5. 다음 코드를 실행했을 때, 입력값과 결과값이 동일하게 나오려면 어떤 값을 입력해야 하는지 고르시오.

x = int(input())
if 15<x<20:
    print(x+3)
elif 21<x<30:
    print(x-5)
else:
    print(f'{x}입니다')

① 26     ② 17     ③ 25     ④ 20     ⑤ 10

 

- 답 및 해설

⑤ 10

=> 범위 16 ~ 29 내의 정수는 코드의 if문과 elif문에 의해 값이 변한다. 즉 입력값이 변하지 않고 그대로 출력되려면 15 이하 30 이상의 정수를 입력하면 된다.

 

 

 

8. 다음은 a가 1부터 10까지 중에서 짝수만 출력하도록 작성한 코드다. 빈 칸에 들어갈 알맞은 코드를 고르라.

a=1
while 빈칸 :
    if a%2==0:
        print(a)
        a+=1
    else:
        a+=1
    
    if a==0:
        break

① a==10     ② a!=10     ③ a<10     ④ a>10     ⑤ a<11

 

- 답 및 해설

⑤ a<11

=> ①, ③, ④는 초기 a값이 1이기 때문에 while 아래 코드가 아예 실행되지 않고, ②는 a가 10이 되면 반복이 멈추기 때문에 2~8까지만 출력된다.

 

 

 

13. 아래 코드의 실행 결과는?

a = [1,2]
b = [3,4]
for i in a:
    for j in b:
        result = i+j
print(result)

- 답 및 해설

=> for문이 매번 돌 때마다, result에 어떤 값이 추가되거나 하는 게 아닌, result = i+j이다. 즉, 위의 2번과 비슷한 문제로, 맨 마지막에 시행된 for문만 보면 된다. 즉 result의 값은 2+4 = 6

 

 

 

14. 아래 코드의 실행 결과는?

list_1 = [[1,2],[3],[4,5,6]]
a,b,c=list_1
list_2=a+b+c
print(list_2)

- 답 및 해설

=> a, b, c에는 list_1을 언패킹한 값이 할당된다. 즉 a = [1, 2], b = [3], c = [4,5,6]

list_2는 a+b+c이고, list의 합연산은 list를 연결하는 것이니까 실행 결과는 [1,2,3,4,5,6]