쭈쌤
쭈쌤 Hello World

[Python] 기초 연습문제

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Python] 기초 연습문제≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Python] 기초 연습문제

파이썬 기초 수업중 훈련생들에게 제시한 기초 문법 관련 연습문제들 입니다.

#01. 변수와 연산자

1) 아파트에서 소음이 가장 심한 층수 출력하기

국립환경과학원에서는 아파트에서 소음이 가장 심한 층수를 구하는 계산식을 발표했습니다. 소음이 가장 심한 층은 0.2467 * 도로와의 거리(m) + 4.159입니다. 다음 소스 코드를 완성하여 소음이 가장 심한 층수가 출력되게 만드세요. 단, 층수를 출력할 때는 소수점 이하 자리는 버립니다(정수로 출력).

도로와의 거리: 12m

▶ 제시코드

1
print( ___________________ )

▶ 실행결과

1
7

소음이 가장 심한 층수를 구하는 계산식은 0.2467 * 도로와의 거리(m) + 4.159라고 했으므로 0.2467에 12를 곱한 뒤 4.159를 더해주면 된다.

계산 결과는 7.1194가 나오지만 사용자에게 보여줄 때는 7.1194층보다 7층이 더 좋기 때문에 결과를 정수로 만들어준다.

첫 번째 구현 방법

int() 함수를 사용하여 정수 형태로 형변환

1
print(int(0.2467 * 12 + 4.159))
두 번째 구현 방법

형식문자를 사용하여 정수로 출력

1
print("%d" % (0.2467 * 12 + 4.159))
1
7

2) 합격 여부 판정하기

국어, 영어, 수학, 과학 점수가 있을 때 한 과목이라도 50점 미만이면 불합격이라고 정했습니다. 다음 소스 코드를 완성하여 합격이면 True, 불합격이면 False가 출력되게 만드세요.

▶ 제시코드

1
2
3
4
5
6
korean = 92
english = 47
mathematics = 86
science = 81

print( _______________________  )

▶ 실행결과

1
False

한 과목이라도 50점 미만이라면 불합격인데 먼저 50점 이상이면 합격(True)이고, 50점 미만이면 불합격(False)이 되도록 비교 연산자를 사용해야 한다.

따라서 과목 >= 50과 같이 50보다 크거나 같을 때(이상) 참이 되도록 만든다.

그리고 한 과목이라도 점수가 낮으면 불합격이므로 모든 비교 연산자의 결과를 and 연산자로 판단해주면 된다(and는 모든 값이 참이라야 참).

1
2
3
4
5
6
korean = 92
english = 47
mathematics = 86
science = 81

print( korean >= 50 and english >= 50 and mathematics >= 50 and science >= 50 )
1
False

#02. 연속성 자료형

1) 인덱스가 홀수인 요소의 총합

다음은 2020년 4월 21일부터 4월 29일까지 코로나19의 일별 확진자 수를 정리한 표이다. 확진자 수를 리스트로 표현하고 1,3,5,7,9 … 와 같이 홀수번째 날짜에 대한 확진자 수가 얼마인지 구하라.

날짜 확진자 수
04/21 9명
04/22 11명
04/23 8명
04/24 6명
04/25 10명
04/26 10명
04/27 10명
04/28 14명
04/29 9명

▶ 실행결과

1
41명

리스트의 인덱스를 2로 나눈 나머지가 0이 아닌 경우 홀수번째 요소이다. 이 조건이 맞는 위치의 값을 0으로 초기화 한 변수에 누적 합산하여 구할 수 있다.

1
2
3
4
5
6
7
8
covid19 = [9, 11, 8, 6, 10, 10, 10, 14, 9]

total = 0
for i, v in enumerate(covid19):
    if i % 2 != 0:
        total += v
        
print("%d명" % total)

2) 가장 큰 값 찾기 (1)

확진자 수를 리스트로 표현하고 가장 많은 확진자는 몇 명인지 출력하시오.

▶ 실행결과

1
14명

최대값은 0부터 시작하는 변수 x를 미리 준비한 상태에서 리스트의 원소가 x 보다 크다면 x에 원소값을 복사하는 방식으로 리스트의 모든 원소를 스캔하여 구할 수 있다.

최대값 검색 알고리즘

1
2
3
4
5
6
7
8
9
10
11
12
covid19 = [9, 11, 8, 6, 10, 10, 10, 14, 9]

# 가장 큰 값을 저장할 변수
x = 0

for v in covid19:
    # 변수값이 특정 원소보다 작다면?
    if x < v:
        # 변수값을 더 큰 값으로 대체
        x = v
        
print("%d명" % x)

3) 가장 큰 값 찾기 (2)

위의 표를 다음과 같은 구조의 딕셔너리를 원소로 갖는 리스트로 표현하고 확진자 수가 가장 많게 나타난 날짜는 언제인지 출력하는 프로그램을 작성하시오.

1
2
3
4
5
6
7
covid19 = [
    {"date": "04/21", "people": 9}, 
    {"date": "04/22", "people": 11}, 
    {"date": "04/23", "people": 8}, 
    {"date": "04/24", "people": 6}
    ... 생략 ...
]

▶ 실행결과

1
04/28

최대값을 구하기 위해 0부터 시작하는 변수 x를 미리 준비한다.

리스트의 원소v가 딕셔너리이므로 v["people"]에 대한 값이 x 보다 크다면 xv["people"]를 복사하는 방식으로 가장 큰 값을 찾을 수 있다.

문제의 요구사항은 v["people"]과 같은 인덱스에 저장된 v["date"]값을 얻는 것이므로 x에 v["people"]이 저장될 때 또다른 변수 y에 v["date"]를 저장한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
covid19 = [
    {"date": "04/21", "people": 9}, 
    {"date": "04/22", "people": 11}, 
    {"date": "04/23", "people": 8}, 
    {"date": "04/24", "people": 6}, 
    {"date": "04/25", "people": 10}, 
    {"date": "04/26", "people": 10}, 
    {"date": "04/27", "people": 10}, 
    {"date": "04/28", "people": 14}, 
    {"date": "04/29", "people": 9}
]

x = 0      # 가장 큰 확진자 수를 저장할 변수
y = None   # 가장 큰 확진자 수가 발생한 날짜

for v in covid19:
    if x < v["people"]:   # 변수값이 특정 원소보다 작다면?
        x = v["people"]   # 변수값을 더 큰 값으로 대체
        y = v["date"]
        
print(y)

#03. 조건문, 반복문

1) 369게임

빈 리스트를 준비합니다. 1부터 30까지 반복되는 동안 리스트의 원소로 각 숫자를 저장하세요.

이 때, 숫자에 3,6,9가 포함된 경우 해당 값을 출력함과 동시에 리스트에는 “짝”이라는 문자열이 저장되도록 구현해야 합니다.

힌트: 반복문에서 처리되는 인덱스값을 문자열로 변환한 후 “3”,”6”,”9”중 하나가 포함되어 있다면 참.

▶ 실행결과

1
2
3
4
5
6
7
8
9
10
11
박수치는 숫자 >>>  3
박수치는 숫자 >>>  6
박수치는 숫자 >>>  9
박수치는 숫자 >>>  13
박수치는 숫자 >>>  16
박수치는 숫자 >>>  19
박수치는 숫자 >>>  23
박수치는 숫자 >>>  26
박수치는 숫자 >>>  29
박수치는 숫자 >>>  30
[1, 2, '짝', 4, 5, '짝', 7, 8, '짝', 10, 11, 12, '짝', 14, 15, '짝', 17, 18, '짝', 20, 21, 22, '짝', 24, 25, '짝', 27, 28, '짝', '짝']

▶ 풀이 (1)

빈 리스트를 준비하고 주어진 범위 안에서 반복을 수행하면서 원하는 조건을 충족할 경우 “짝”이라는 문자열을 리스트에 추가하고 그렇지 않을 경우 반복문의 인덱스를 리스트에 추가한다.

조건은 문자열로 변환한 인덱스값에 “3”,”6”,”9”중 하나가 포함되어 있는지를 확인하는 것이다.

파이썬의 문자열 객체가 포함하는 메서드 중에서 find()함수는 파라미터로 전달된 내용이 표시되는 위치를 반환하는데 만약 내용을 찾지 못할 경우 -1을 리턴한다.

1
2
3
4
5
6
7
8
9
10
11
12
result = []

for i in range(1, 31):
    k = str(i)
    
    if k.find("3") > -1 or k.find("6") > -1 or k.find("9") > -1:
        print("박수치는 숫자 >>> ", i)
        result.append("짝")
    else:
        result.append(i)
        
print(result)

▶ 풀이 (2)

위의 문제와 같은 형태로 반복문을 수행하면서 조건을 변경한다.

count() 메서드는 특정 문자열 안에서 파라미터로 전달된 내용이 몇 번 등장하는지를 카운트한 결과를 리턴한다.

1
2
3
4
5
6
7
8
9
10
11
12
result = []

for i in range(1, 31):
    k = str(i)
    
    if k.count("3") > 0 or k.count("6") > 0 or k.count("9") > 0:
        print("박수치는 숫자 >>> ", i)
        result.append("짝")
    else:
        result.append(i)
        
print(result)

▶ 풀이 (3)

위의 문제와 같은 형태로 반복문을 수행하면서 조건을 변경한다.

in 연산자는 특정 내용이 연속성자료형에 포함되어 있는지를 판단하여 True, False를 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
result = []

for i in range(1, 31):
    k = str(i)
    
    if "3" in k or "6" in k or "9" in k:
        print("박수치는 숫자 >>> ", i)
        result.append("짝")
    else:
        result.append(i)
        
print(result)

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Python] 기초 연습문제≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus