『혼자 공부하는 파이썬』 마무리 문제 풀이

mj·2024년 8월 3일

CDA

목록 보기
2/18

02-3. 변수와 입력

p.131


4. inch 단위의 자료를 입력받아 cm 단위를 구하는 코드를 작성하시오.

str_input = input("숫자 입력> ")
num_input = int(str_input)

print()
print(num_input, "inch")
print((num_input * 2.54), "cm")
num_input = int(input("숫자 입력> ")

python은 입력을 받으면 문자열로 입력받기 때문에 정수로 바꾸는 과정이 필요하다.
int(input("숫자 입력> ")처럼 입력과 정수화를 한꺼번에 실행하는 것도 가능하다.




5. 원의 반지름을 입력받아 원의 둘레와 넓이를 구하는 코드를 작성하시오.

  • 둘레 = 2×π×r2 \times \pi \times r
  • 넓이 = π×r2\pi \times r^2
str_input = input("원의 반지름 입력> ")
num_input = int(str_input)
print()
print("반지름: ", num_input)
print("둘레: ", 2 * 3.14 * num_input)
print("넓이: ", 3.14 * num_input ** 2)




6. 프로그램을 실행했을 때 문자열 두 개를 입력받고 다음과 같이 출력하는 프로그램 코드를 작성하시오. (굵은 글씨로 되어 있는 부분은 사용자 입력임)

문자열 입력> 안녕하세요
문자열 입력> 아침입니다
안녕하세요 아침입니다
아침입니다 안녕하세요

a = input("문자열 입력> ")
b = input("문자열 입력> ")

print(a,b)

a, b = b, a

print(a,b)

변수 교체를 스왑이라고 하는데, 파이썬에서는 a, b = b, a와 같이 변수를 교체할 수 있다. 하지만 이 방법보다는 임의의 변수를 하나 더 만들어서 교체하는 방법을 더 추천한다.

a = input("문자열 입력> ")
b = input("문자열 입력> ")

print(a,b)
temp = a
a = b
b = temp

print(a,b)




02-4. 숫자와 문자열의 다양한 기능

p.152 도전문제


  1. 구의 부피와 겉넓이를 구하는 프로그램을 만드시오.
  • 부피 = 43×π×r3\frac{4}{3} \times \pi \times r^3
  • 겉넓이 = 4×π×r24 \times \pi \times r^2
r = int(input("구의 반지름을 입력해주세요: "))

v = 4/3 * 3.141592 * r**3
a = 4 * 3.141592 * r**2

print(f"= 구의 부피는 {v}입니다.")
print("= 구의 겉넓이는 {}입니다.".format(a))

출력 문자열 안에 변수값을 넣을 때는 print(f"{value}")이나 print("{}".format(value)) 문법을 사용한다.



2. 피타고라스의 정리를 이용해서 밑변과 높이를 입력하면 빗변의 길이를 구하는 프로그램을 만드시오.

  • a2+b2=c2a^2 + b^2 = c^2 (a: 밑변, b: 높이, c: 빗변)
  • c=a2+b2c = \sqrt{a^2 + b^2}
a = int(input("밑변의 길이를 입력해주세요: "))
b = int(input("높이의 길이를 입력해주세요: "))

c = (a**2 + b**2)**(0.5)

print(f"= 빗변의 길이는 {c}입니다.")



03-1. 불 자료형과 if 조건문

p.175


4. 숫자 두 개를 입력받고 첫 번째 입력받은 숫자가 큰지, 두 번재 입력받은 숫자가 큰지를 구하는 프로그램을 만드시오.

a = int(input("> 1번째 숫자: "))
b = int(input("> 2번째 숫자: "))
print()

if a>b:
    print("처음 입력했던 {}가 {}보다 더 큽니다".format(a,b))

if b>a:
    print("두 번째로 입력했던 {}가 {}보다 더 큽니다".format(b,a))



03-2. if~else와 elif 구문

p.187


2. 다음 중첩 조건문에 논리 연산자를 적용해 하나의 if 조건문으로 만드시오.

if x > 10:
	if x < 20:
    	print("조건에 맞습니다.")
if x > 10 and x < 20:
    print("조건에 맞습니다.")

파이썬에서는 다음과 같이 조건문을 표현하는 것도 가능하다.

if 10 < x < 20:
    print("조건에 맞습니다.")




3. 태어난 연도를 입력받아 띠를 출력하는 프로그램을 작성하시오. 입력받은 연도를 12로 나눈 나머지를 사용하는데, 나머지가 0,1,2,3,4,5,6,7,8,9,10,11일 때 각각 원숭이, 닭, 개, 돼지, 쥐, 소, 범, 토끼, 용, 뱀, 말, 양띠이다.

str_input = input("태어난 해를 입력해 주세요> ")
birth_year = int(str_input)

if birth_year % 12 == 0:
    print("원숭이 띠입니다.")

elif birth_year % 12 == 1:
    print("닭 띠입니다.")

elif birth_year % 12 == 2:
    print("개 띠입니다.")

elif birth_year % 12 == 3:
    print("돼지 띠입니다.")

elif birth_year % 12 == 4:
    print("쥐 띠입니다.")

elif birth_year % 12 == 5:
    print("소 띠입니다.")

elif birth_year % 12 == 6:
    print("범 띠입니다.")

elif birth_year % 12 == 7:
    print("토끼 띠입니다.")

elif birth_year % 12 == 8:
    print("용 띠입니다.")

elif birth_year % 12 == 9:
    print("뱀 띠입니다.")

elif birth_year % 12 == 10:
    print("말 띠입니다.")

elif birth_year % 12 == 11:
    print("양 띠입니다.")




p.188 도전문제

1. 조건문을 사용해서 한 마디 대화를 나눌 수 있는 프로그램을 만드시오. "안녕" 또는 "안녕하세요"를 입력하면 프로그램이 "안녕하세요" 인사를 할 수 있게 하고, "지금 몇 시야?" 또는 "지금 몇 시예요?" 입력하면 시간을 응답하게 구현하시오. 또한 준비되지 않은 문장을 입력했다면 입력을 그대로 출력하도록 구현하시오.

import datetime

hour = datetime.datetime.now().hour

input_str = input("입력: ")

if ("안녕" in input_str):
    print("> 안녕하세요.")

elif ("몇 시" in input_str):
    print(f"> 지금은 {hour}시입니다.")

else:
    print(f"> {input_str}")




2. 숫자를 입력하면 그 숫자가 2, 3, 4, 5로 나누어 떨어지는 확인하고 출력하는 프로그램을 구현하시오.

input_num = int(input("정수를 입력해주세요: "))

if input_num % 2 == 0:
    print(f"{input_num}은 2로 나누어 떨어지는 숫자입니다.")
else: print(f"{input_num}은 2로 나누어 떨어지는 숫자가 아닙니다.")

if input_num % 3 == 0:
    print(f"{input_num}은 3로 나누어 떨어지는 숫자입니다.")
else: print(f"{input_num}은 3로 나누어 떨어지는 숫자가 아닙니다.")

if input_num % 4 == 0:
    print(f"{input_num}은 4로 나누어 떨어지는 숫자입니다.")
else: print(f"{input_num}은 4로 나누어 떨어지는 숫자가 아닙니다.")

if input_num % 5 == 0:
    print(f"{input_num}은 5로 나누어 떨어지는 숫자입니다.")
else: print(f"{input_num}은 5로 나누어 떨어지는 숫자가 아닙니다.")

for문을 이용하면 코드의 길이를 줄일 수 있다.
input_num = int(input("정수를 입력해주세요: "))

for i in range(2,6):
    if input_num % i == 0:
        print(f"{input_num}{i}로 나누어 떨어지는 숫자입니다.")
    else:
        print(f"{input_num}{i}로 나누어 떨어지는 숫자가 아닙니다.")

04-1. 리스트와 반복문

p.214


2. 리스트에 있는 숫자 중 100 이상의 숫자만 출력하는 프로그램을 만드시오.

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    if number > 100:
        print("- 100 이상의 수: ", number)




3. 홀수/짝수와 자릿수를 출력하는 프로그램을 만드시오.

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    if number % 2 == 0:
        print(f"{number}는 짝수입니다.")
    else:
        print(f"{number}는 홀수입니다.")

print()

for number in numbers:
    print(f"{number}{len(str(number))}자릿수입니다.")






4. numbers 리스트의 요소를 3개씩 output 리스트에 넣는 프로그램을 구현하시오.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[], [], []]

for number in numbers:
    output[numbers.index(number) % 3].append(number)

print(output)

index는 리스트에서 요소값이 들어있는 인덱스 번호를 반환하는 함수이다.

위의 코드에서 사용한 numbers.index(number)는 numbers 리스트에서 number 요소값이 들어있는 인덱스 번호를 반환한다.




5. 짝수 번째 요소를 제곱하는 프로그램을 구현하시오.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in range(0, len(numbers) // 2):
    j = 2*i + 1
    print(f"i = {i}, j = {j}")
    numbers[j] = numbers[j] ** 2

print(numbers)




04-2. 딕셔너리와 반복문

p.227


2. 딕셔너리와 리스트를 조합한 경우, 딕셔너리에 저장된 이름과 나이를 출력하는 프로그램을 구현하시오.

pets = [
    {"name": "구름", "age": 5},
    {"name": "초코", "age": 3},
    {"name": "아지", "age": 1},
    {"name": "호랑이", "age": 1},
]

print("# 우리 동네 애완 동물들")

for pet in pets:
    print("{} {}살".format(pet["name"], pet["age"]))





3. numbers 내부에 들어 있는 숫자가 등장하는 횟수를 출력하는 코드를 작성하시오.

numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3]
counter = {}

for number in numbers:
    if not number in counter:
        counter[number] = 1
    else:
        counter[number] += 1

print(counter)





4. type 함수를 사용하여 딕셔너리 내용을 출력하는 코드를 작성하시오.

character = {
    "name": "기사",
    "level": 12,
    "items":{
        "sword": "불꽃의 검",
        "armor": "풀플레이트"
    },
    "skill": ["베기", "세게 베기", "아주 세게 베기"]
}

for key in character:

    if type(character[key]) is str :
        print(f"{key} : {character[key]}")

    elif type(character[key]) is int:
        print(f"{key} : {character[key]}")
        
    elif type(character[key]) is dict:
        for key1 in character[key]:
            print(f"{key1} : {character[key][key1]}")

    elif type(character[key]) is list:
        for item in character[key]:
            print(f"{key} : {item}")
    





04-3. 범위 자료형과 while 반복문

p.248



2. 각 리스트를 조합해 하나의 딕셔너리를 만드시오.

key_list = ["name", "hp", "mp", "level"]
value_list = ["기사", 200, 30, 5]
character = {}

for i in range(len(key_list)):
    character[key_list[i]] = value_list[i]

print(character)




3. 1부터 숫자를 하나씩 증가시키면서 더할 때, 몇을 더할 때 10000을 넘는지 구하시오.

limit = 10000
i = 1

# sum은 파이썬 내부에서 사용하는 식별자이므로, sum_val라는 변수 사용
sum_val = 0

while True:
    sum_val += i
    i += 1
    if sum_val > limit:
        break

print(f"{i-1}를 더할 때 {limit}을 넘으며 그때의 값은 {sum_val}입니다.")




4. 1부터 100까지의 숫자를 다음과 같이 곱할 때 최대가 되는 경우는 어떤 숫자를 곱했을 때인지 찾으시오.

1 * 99, 2 * 98, 3 * 97, ..., 98 * 2, 99 * 1

max_value = 0
a = 0
b = 0

for i in range(1,100):
    j = 100 - i

    if i * j > max_value:
        a = i
        b = j
        max_value = i * j

print(f"최대가 되는 경우: {a} * {b} = {max_value}")





글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다.

2개의 댓글

comment-user-thumbnail
2024년 8월 9일

비밀댓글입니다.

1개의 답글