새소식

인기 검색어

개인공부/Python

python 심사문제 UNIT(25 ~ 35)

  • -

25.8 심사 문제 : 딕셔너리에서 특정 값 삭제하기

문제 : 표준 입력으로 문자열 여러 개와 숫자 여러 개가 두 줄로 입력되고, 첫 번째 줄은 키, 두 번째 줄은 값으로 하여 딕셔너리를 생성합니다. 다음 코드를 완성하여 딕셔너리에서 키가 'delta'인 키-값 쌍과 값이 30인 키-값 쌍을 삭제하도록 만드세요.

 

정답 : 

 

keys = input().split()
values = map(int, input().split())

x = dict(zip(keys, values))

print({keys: values for keys, values in x.items() if keys != 'delta' and values != 30})

 

26.9 심사문제 : 공약수 구하기

문제 : 표준 입력으로 양의 정수 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 공약수를 세트 형태로 구하도록 만드세요. 단, 최종 결과는 공약수의 합으로 판단합니다.

 

정답 : 

x, y = map(int, input().split())
a = {i for i in range(1, x + 1) if x % i == 0}
b = {i for i in range(1, y + 1) if y % i == 0}

divisor = a & b

result = 0
if type(divisor) == set:
    result = sum(divisor)

print(result)

27.6 심사문제: 특정 문자가 들어있는 단어 찾기

문자열이 저장된 words.txt 파일이 주어집니다(문자열은 한 줄로 저장되어 있습니다). words.txt 파일에서 문자 c가 포함된 단어를 각 줄에 출력하는 프로그램을 만드세요. 단어를 출력할 때는 등장한 순서대로 출력해야 하며 ,(콤마)와 .(점)은 출력하지 않아야 합니다.

 

import pickle

with open('words.txt', 'r') as file:
    lines = file.read().split()
    for i in lines:
        if i.find('c') != -1:
            print(i.replace(',', '').replace('.', ''))

28.4 심사문제: 파일에서 회문인 단어 출력하기

 

단어가 줄 단위로 저장된 words.txt 파일이 주어집니다. words.txt 파일에서 회문인 단어를 각 줄에 출력하는 프로그램을 만드세요. 단어를 출력할 때는 등장한 순서대로 출력해야 합니다. 그리고 파일에서 읽은 단어는 \n이 붙어있으므로 \n을 제외한 뒤 회문인지 판단해야 하며 단어를 출력할 때도 \n이 출력되면 안 됩니다(단어 사이에 줄바꿈이 두 번 일어나면 안 됨).

with open('words.txt', 'r') as file:
    lines = file.read().split()
    for i in lines:
        if i == ''.join(reversed(i)):
            print(i)

 

29.4 심사문제: 사칙 연산 함수 만들기

표준 입력으로 숫자 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 덧셈, 뺄셈, 곱셈, 나눗셈의 결과가 출력되게 만드세요. 이때 나눗셈의 결과는 실수라야 합니다.

x, y = map(int, input().split())


def calc(x, y):
    a = x + y
    s = x - y
    m = x * y
    d = x / y
    return a, s, m, d


a, s, m, d = calc(x, y)
print('덧셈: {0}, 뺄셈: {1}, 곱셈: {2}, 나눗셈: {3}'.format(a, s, m, d))

30.7 심사문제: 가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기

표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 다음 소스 코드를 완성하여 가장 높은 점수, 가장 낮은 점수, 평균 점수가 출력되게 만드세요. 평균 점수는 실수로 출력되어야 합니다.

korean, english, mathematics, science = map(int, input().split())


def get_min_max_score(*args):
    return min(args), max(args)


def get_average(korean=0, english=0, mathematics=0, science=0):
    arr = [korean, english, mathematics, science]
    return sum(arr) / len([i for i in arr if i != 0])


min_score, max_score = get_min_max_score(korean, english, mathematics, science)
average_score = get_average(korean=korean, english=english,
                            mathematics=mathematics, science=science)
print('낮은 점수: {0:.2f}, 높은 점수: {1:.2f}, 평균 점수: {2:.2f}'
      .format(min_score, max_score, average_score))

min_score, max_score = get_min_max_score(english, science)
average_score = get_average(english=english, science=science)
print('낮은 점수: {0:.2f}, 높은 점수: {1:.2f}, 평균 점수: {2:.2f}'
      .format(min_score, max_score, average_score))

 

31.5 심사문제: 재귀호출로 피보나치 수 구하기

표준 입력으로 정수 한 개가 입력됩니다(입력 값의 범위는 10~30). 다음 소스 코드를 완성하여 입력된 정수에 해당하는 피보나치 수가 출력되게 만드세요.

피보나치 수는 0과 1로 시작하며, 다음 번 피보나치 수는 바로 앞의 두 피보나치 수의 합입니다.

def fib(fb):
    while fb > 1:
        return fib(fb - 2) + fib(fb - 1)
    return fb


n = int(input())
print(fib(n))

 

 

32.5 심사문제: 파일 이름을 한꺼번에 바꾸기

표준 입력으로 숫자.확장자 형식으로 된 파일 이름 여러 개가 입력됩니다. 다음 소스 코드를 완성하여 파일 이름이 숫자 3개이면서 앞에 0이 들어가는 형식으로 출력되게 만드세요. 예를 들어 1.png는 001.png, 99.docx는 099.docx, 100.xlsx는 100.xlsx처럼 출력되어야 합니다. 그리고 람다 표현식을 사용해야 하며 출력 결과는 리스트 형태라야 합니다. 람다 표현식에서 파일명을 처리할 때는 문자열 포매팅과 문자열 메서드를 활용하세요.

files = input().split()
print(list(map(lambda x: '{0:03d}'.format(int(x.split('.')[0])) + "." + x.split('.')[1], files)))

 

33.6 심사문제: 카운트다운 함수 만들기

표준 입력으로 정수가 입력됩니다. 다음 소스 코드를 완성하여 함수 c를 호출할 때마다 숫자가 1씩 줄어들게 만드세요. 여기서는 함수를 클로저로 만들어야 합니다. 정답에 코드를 작성할 때는 def countdown(n):에 맞춰서 들여쓰기를 해주세요.

def countdown(n):
    def count():
        nonlocal n
        r = n
        n = n - 1
        return r

    return count


n = int(input())
print(id(n))
c = countdown(n)  # countdown(20)
for i in range(n):
    print(c(), end=' ')

 

34.6 심사문제: 게임 캐릭터 클래스 만들기

표준 입력으로 게임 캐릭터 능력치(체력, 마나, AP)가 입력됩니다. 다음 소스 코드에서 애니(Annie) 클래스를 작성하여 티버(tibbers) 스킬의 피해량이 출력되게 만드세요. 티버의 피해량은 AP * 0.65 + 400이며 AP(Ability Power, 주문력)는 마법 능력치를 뜻합니다.

 

class Annie:
    def __init__(self, health, mana, ability_power):
        self.heath = health
        self.mana = mana
        self.ability_power = ability_power

    def tibbers(self):
        print('티버: 피해량', self.ability_power * 0.65 + 400)


health, mana, ability_power = map(float, input().split())

x = Annie(health=health, mana=mana, ability_power=ability_power)
x.tibbers()

 

35.6 심사문제: 시간 클래스 만들기

표준 입력으로 시:분:초 형식의 시간이 입력됩니다. 다음 소스 코드에서 Time 클래스를 완성하여 시, 분, 초가 출력되게 만드세요. from_string은 문자열로 인스턴스를 만드는 메서드이며 is_time_valid는 문자열이 올바른 시간인지 검사하는 메서드입니다. 시간은 24시까지, 분은 59분까지, 초는 60초까지 있어야 합니다. 정답에 코드를 작성할 때는 class Time:에 맞춰서 들여쓰기를 해주세요.

class Time:
    def __init__(self, hour, minute, second):
        self.hour = hour
        self.minute = minute
        self.second = second

    @classmethod
    def is_time_valid(cls, time_string):
        Hour, Minut, sed = map(int, time_string.split(':'))
        return 0 <= Hour <= 24 and 0 <= Minut <= 60 and 0 <= sed <= 60

    @classmethod
    def from_string(cls, time_string):
        temp = time_string.split(':')
        return Time(*temp)


time_string = input()

if Time.is_time_valid(time_string):
    t = Time.from_string(time_string)
    print(t.hour, t.minute, t.second)
else:
    print('잘못된 시간 형식입니다.')

'개인공부 > Python' 카테고리의 다른 글

파일 사용하기  (0) 2022.07.28
세트  (0) 2022.07.28
딕셔너리 응용하기  (0) 2022.07.28
리스트와 튜플 응용하기  (0) 2022.07.28
python 심사문제 UNIT(22 ~ 24)  (0) 2022.07.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.