점프 투 파이썬 DAY11(4장 문제)

정지범·2026년 9월 20일

점프 투 파이썬

목록 보기
18/37

04장 되새김 문제

목차

  • Q1. 홀수, 짝수 판별하기
  • Q2. 모든 입력의 평균값 구하기
  • Q3. 프로그램 오류 수정하기 1
  • Q4. 출력 결과가 다른 것 찾기
  • Q5. 프로그램 오류 수정하기 2
  • Q6. 사용자 입력 저장하기
  • Q7. 파일의 문자열 바꾸기
  • Q8. 입력값을 모두 더해 출력하기

Q1. 홀수, 짝수 판별하기

주어진 자연수가 홀수이면 True, 짝수이면 False를 반환하는 함수를 만들어 보자.

def is_odd(number):
    if number % 2 == 1:
        return True
    else:
        return False

실행해 보면

print(is_odd(1))
print(is_odd(2))
print(is_odd(3))
print(is_odd(4))

실행 결과

True
False
True
False

💡 풀이

%는 나머지를 구하는 연산자이다.

number % 2

숫자를 2로 나누었을 때

나머지 1 → 홀수
나머지 0 → 짝수

이므로 다음 조건을 사용한다.

if number % 2 == 1:

더 간단하게 작성하면 다음과 같이 표현할 수도 있다.

def is_odd(number):
    return number % 2 == 1

Q2. 모든 입력의 평균값 구하기

입력으로 들어오는 모든 수의 평균을 계산하는 함수를 만들어 보자.

단, 입력되는 숫자의 개수는 정해져 있지 않다.

def avg_numbers(*args):
    result = 0

    for i in args:
        result += i

    return result / len(args)

실행

print(avg_numbers(1, 2))
print(avg_numbers(1, 2, 3, 4, 5))

실행 결과

1.5
3.0

💡 풀이

입력되는 값의 개수가 정해져 있지 않으므로 여러 개의 입력값을 받는 *args를 사용한다.

def avg_numbers(*args):

예를 들어

avg_numbers(1, 2, 3, 4, 5)

를 실행하면 args에는 다음과 같이 값이 저장된다.

args = (1, 2, 3, 4, 5)

for문으로 모든 값을 더한다.

for i in args:
    result += i

그리고

result / len(args)

를 이용해

전체 합 / 입력된 숫자의 개수

를 계산한다.


Q3. 프로그램 오류 수정하기 1

다음 프로그램은 두 개의 숫자를 입력받아 더하는 프로그램이다.

input1 = input("첫 번째 숫자를 입력하세요: ")
input2 = input("두 번째 숫자를 입력하세요: ")

total = input1 + input2

print("두 수의 합은 %s입니다." % total)

예를 들어

첫 번째 숫자 → 3
두 번째 숫자 → 6

을 입력하면 예상 결과는 9이지만 실제 결과는

36

이 된다.

💡 원인

input()으로 입력받은 값은 기본적으로 문자열(str) 이다.

즉,

input1 = "3"
input2 = "6"

이므로

input1 + input2

는 숫자 덧셈이 아니라 문자열 연결이 된다.

"3" + "6"
    ↓
"36"

수정

int()를 사용하여 문자열을 정수로 변환한다.

input1 = int(input("첫 번째 숫자를 입력하세요: "))
input2 = int(input("두 번째 숫자를 입력하세요: "))

total = input1 + input2

print("두 수의 합은 %s입니다." % total)

실행 결과

첫 번째 숫자를 입력하세요: 3
두 번째 숫자를 입력하세요: 6
두 수의 합은 9입니다.

💡 핵심

input()

의 반환값은 문자열이므로 숫자 계산이 필요하다면

int(input())

처럼 자료형을 변환해야 한다.


Q4. 출력 결과가 다른 것 찾기

다음 중 출력 결과가 다른 하나를 찾아보자.

① print("you" "need" "python")
② print("you" + "need" + "python")
③ print("you", "need", "python")
④ print("".join(["you", "need", "python"]))

정답

③

①

print("you" "need" "python")

실행 결과

youneedpython

문자열을 연속해서 작성하면 하나의 문자열처럼 연결된다.


②

print("you" + "need" + "python")

실행 결과

youneedpython

+ 연산자를 사용하여 문자열을 연결한다.


③

print("you", "need", "python")

실행 결과

you need python

print()에서 여러 값을 ,로 구분하면 기본적으로 값 사이에 공백이 들어간다.

따라서 다른 결과가 나온다.


④

print("".join(["you", "need", "python"]))

실행 결과

youneedpython

join()을 사용하여 리스트의 문자열을 연결한다.

앞의 ""가 빈 문자열이므로 문자열 사이에 아무 문자도 추가되지 않는다.

💡 핵심

① youneedpython
② youneedpython
③ you need python  ← 정답
④ youneedpython

Q5. 프로그램 오류 수정하기 2

다음 프로그램은 test.txt 파일에 문자열을 저장한 뒤 다시 읽어 출력한다.

f1 = open("test.txt", "w")
f1.write("Life is too short")

f2 = open("test.txt", "r")
print(f2.read())

원하는 결과가 정상적으로 나오도록 수정해 보자.

정답

f1 = open("test.txt", "w")
f1.write("Life is too short")
f1.close()

f2 = open("test.txt", "r")
print(f2.read())
f2.close()

실행 결과

Life is too short

💡 풀이

파일을 쓰기 모드인 "w"로 열어 데이터를 작성한 뒤

f1.close()

를 이용해 파일을 먼저 닫아 주어야 한다.

파일 열기
   ↓
내용 작성
   ↓
close()
   ↓
파일 다시 열기
   ↓
내용 읽기

파일 작업이 끝났다면 close()를 이용해 파일을 닫아 주는 습관을 들이는 것이 좋다.


Q6. 사용자 입력 저장하기

사용자가 입력한 내용을 test.txt에 저장하는 프로그램을 만들어 보자.

단, 프로그램을 다시 실행해도 기존 내용은 유지하고 새로운 내용만 추가해야 한다.

user_input = input("저장할 내용을 입력하세요: ")

f = open("test.txt", "a")
f.write(user_input)
f.write("\n")
f.close()

💡 풀이

기존 내용을 유지하면서 새로운 내용을 추가해야 하기 때문에

"a"

모드를 사용한다.

모드설명
r파일 읽기
w파일 쓰기
a파일 마지막에 내용 추가

만약 "w"를 사용하면 기존 파일의 내용이 지워지고 새로 작성되므로 주의해야 한다.

f.write("\n")

은 입력한 내용 뒤에 줄바꿈을 추가한다.

예를 들어 프로그램을 여러 번 실행해서

Python
Java
Linux

를 입력하면 파일에는

Python
Java
Linux

처럼 계속 내용이 추가된다.


Q7. 파일의 문자열 바꾸기

test.txt 파일에 다음 내용이 있다고 하자.

Life is too short
you need java

여기서 "java"를 "python"으로 변경해 다시 저장해 보자.

f = open("test.txt", "r")
body = f.read()
f.close()

body = body.replace("java", "python")

f = open("test.txt", "w")
f.write(body)
f.close()

변경 결과

Life is too short
you need python

💡 풀이

먼저 파일을 읽기 모드로 연다.

f = open("test.txt", "r")

파일 전체 내용을 body 변수에 저장한다.

body = f.read()

현재 body에는 다음 문자열이 저장되어 있다.

Life is too short
you need java

replace()를 사용한다.

body = body.replace("java", "python")

그러면

java
 ↓
python

으로 변경된다.

이후 파일을 "w" 모드로 다시 열어 변경한 내용을 저장한다.

f = open("test.txt", "w")
f.write(body)

Q8. 입력값을 모두 더해 출력하기

다음과 같이 실행했을 때 입력한 숫자를 모두 더해 출력하는 myargv.py를 작성해 보자.

python myargv.py 1 2 3 4 5 6 7 8 9 10

결과

55

정답

# myargv.py

import sys

args = sys.argv[1:]

result = 0

for arg in args:
    result += int(arg)

print(result)

실행

python myargv.py 1 2 3 4 5 6 7 8 9 10

실행 결과

55

💡 풀이

명령행에서 전달한 값은 sys.argv에 저장된다.

import sys

예를 들어

python myargv.py 1 2 3

을 실행하면 sys.argv는 다음과 비슷하다.

["myargv.py", "1", "2", "3"]

여기서

sys.argv[0]

은 실행한 파일 이름이다.

myargv.py

따라서 실제 입력값만 가져오기 위해

sys.argv[1:]

을 사용한다.

args = sys.argv[1:]

결과

["1", "2", "3"]

주의할 점은 sys.argv에 들어 있는 값도 문자열이라는 것이다.

따라서 숫자로 더하기 위해

int(arg)

를 사용한다.

for arg in args:
    result += int(arg)

💡 04장 되새김 문제 핵심 정리

문제핵심 개념
Q1함수, 조건문, % 연산자
Q2*args, for, len()
Q3input(), int()
Q4print(), 문자열 연결, join()
Q5파일 읽기/쓰기, close()
Q6파일 추가 모드 a
Q7read(), replace(), write()
Q8sys.argv, 명령행 인수

04장에서 가장 중요하게 기억할 부분은 함수의 입력과 반환값, input()은 문자열이라는 점, 파일 모드 r, w, a의 차이, 그리고 sys.argv를 이용한 프로그램 입력 처리이다.

profile
성실하자:)

0개의 댓글