목차
주어진 자연수가 홀수이면 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
입력으로 들어오는 모든 수의 평균을 계산하는 함수를 만들어 보자.
단, 입력되는 숫자의 개수는 정해져 있지 않다.
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)
를 이용해
전체 합 / 입력된 숫자의 개수
를 계산한다.
다음 프로그램은 두 개의 숫자를 입력받아 더하는 프로그램이다.
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())
처럼 자료형을 변환해야 한다.
다음 중 출력 결과가 다른 하나를 찾아보자.
① 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
다음 프로그램은 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()를 이용해 파일을 닫아 주는 습관을 들이는 것이 좋다.
사용자가 입력한 내용을 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
처럼 계속 내용이 추가된다.
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)
다음과 같이 실행했을 때 입력한 숫자를 모두 더해 출력하는 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)
| 문제 | 핵심 개념 |
|---|---|
| Q1 | 함수, 조건문, % 연산자 |
| Q2 | *args, for, len() |
| Q3 | input(), int() |
| Q4 | print(), 문자열 연결, join() |
| Q5 | 파일 읽기/쓰기, close() |
| Q6 | 파일 추가 모드 a |
| Q7 | read(), replace(), write() |
| Q8 | sys.argv, 명령행 인수 |
04장에서 가장 중요하게 기억할 부분은 함수의 입력과 반환값,
input()은 문자열이라는 점, 파일 모드r,w,a의 차이, 그리고sys.argv를 이용한 프로그램 입력 처리이다.