파이썬 독학/입문 강의

[파이썬독학강의] 15. 파이썬 프로그램의 입력(input)과 출력(output)

데니 by danny 2023. 5. 14. 01:50
반응형

파이썬 프로그램의 입력과 출력
파이썬 프로그램의 입력과 출력

 

님들 안녕하세요. 14년 차 IT개발자 데니예요. 오늘은 파이썬 프로그램의 입력과 출력에 대해서 학습해 볼게요. 오늘날 우리가 사용하는 모든 종류의 컴퓨터 프로그램(웹, 모바일 앱 포함)은 기본 3단계 처리 절차를 거쳐 동작한다고 보시면 돼요. 1단계는 사용자(User) 입력 단계로 프로그램은 사용자의 입력을 받기 위해 대기하며, 입력을 받게 되면 2단계 처리를 시작해요. 2단계는 사용자로부터 받은 입력 데이터를 가지고 프로그램 내부 알고리즘을 수행해요. 3단계는 2단계 처리에서 생성된 결과를 사용자에게 전달하는 단계라고 볼 수 있어요.

지금까지 학습하신 내용 중 변수, 제어문, 함수 그리고 앞으로 학습하게 될 클래스와 예외처리는 2단계를 효율적으로 처리하기 위해 필요한 부분들이에요. 오늘 학습하실 내용은 1단계와 3단계에서 사용자와 프로그램 간에 소통을 위해 주로 사용하시게 될 테니 이들의 매끄러운 소통을 이끌어 내기 위해서 꼭 마스터하시길 바랄게요.

 

 

 

 

15. 파이썬 프로그램의 입력(input)과 출력(output)

 

  ▶ 사용자 입력과 출력이란?

 

님들께 사용자 입력과 출력에 대해서 어떻게 설명드리면 직관적이고 이해하기 쉬울지 생각해 봤는데, 생각할 필요가 없다는 결론에 이르렀어요. 님들은 항상 스마트폰을 사용하시면서 SNS앱에 사용자 입력(스크린 터치)을 통해 누군가에게 메세지를메시지를 전송하시고 또 누군가로부터 전달된 메시지를 앱이 님들의 스마트폰 화면에 출력해주고 있어요. 컴퓨터를 사용하실 때에는 키보드와 마우스를 사용하여 컴퓨터 프로그램에게 사용자 입력을 전달하고 계시고 컴퓨터 프로그램은 모니터와 스피커로 사용자에게 입력에 대한 결과를 출력해주고 있어요. 님들은 그 누구보다 사용자 입력과 출력을 잘 사용하고 계시고 잘 알고 계실 거예요.

아래 그림은 윈도우용 계산기 프로그램 이미지입니다. 사용자로부터 숫자와 연산자 입력을 받아서 계산을 해주고 그 결과를 결과 창에 띄어주는 역할을 해주는 프로그램이에요.

 

윈도우 계산기 이미지
윈도우 계산기 이미지

 

 

아래 그림은 국민SNS앱인 카카오톡 대화창이에요.  앱 입력 부분에 스마트폰을 통해 메시지, 이미지, 사운드 등을 입력하고 전송하면 상대방에게 전달될 거예요. 상대방이 메시지를 보내면 앱은 님에게 해당 메세지를 출력해서 보여줄 거예요.

 

카카오톡 채팅창
카카오톡 채팅창

 

컴퓨터가 처음 나왔을 때 입력 매체는 키보드만 존재했어요. 기술 발전으로 인해 입력 매체에 마우스, 마이크, 카메라 그리고 스크린 터치 방식이 생기며 사용자 입력이 더 편리해졌어요. 

 

사용자 입력 매체와 대상
사용자 입력 매체와 대상

 

 

  ▶ 파이썬 사용자 입력 기본

파이썬은 어떻게 사용자로부터 문자와 숫자를 입력받을까요? 한 가지 함수만 알고 계신다면 파이썬에서 문자와 숫자를 쉽고 직관적으로 입력받으실 수 있어요. 파이썬은 사용자 입력을 위해 input() 함수를 제공하고 있어요. input() 함수를 호출하면 파이썬은 사용자로부터 문자와 숫자에 대한 입력을 받기 위해서 대기하고 있어요. 사용자가 입력하면 입력 받은 내용을 전달하고 함수 수행이 종료돼요. input() 함수에 대한 자세한 사용 방법은 실습을 통해서 알아볼게요.

 

1
2
3
4
5
>>> input_value = input()
Hello, python
>>> print(input_value)
Hello, python
>>>
cs

 

라인[1] input()함수를 호출했어요. 함수에서 전달하는 값은 input_value 변수에 대입돼요.

라인[2] 사용자가 Hello, python이라고 입력했어요.

라인[3]~[4] 사용자가 입력한 Hello, python이 저장된 input_value 변수 값을 출력했어요.

 

 

1
2
3
4
5
>>> input_value = input('당신의 성별을 입력하세요 : ')
당신의 성별을 입력하세요 : 남자
>>> print(input_value)
남자
>>>
cs

 

라인[1] input()함수 인수로 문자열을 전달했어요. 해당 문자열은 사용자에게 질문을 하여 사용자가 입력해야 할 내용을 명확화 시켜주는 역할을 해요.

라인[2] 사용자에게 성별을 질문하였고, 사용자는 남자라고 입력 값을 주었어요.

라인[3]~[4] 사용자가 입력한 값을 출력했어요.

 

 

  ▶ 파이썬 출력 기본

 

파이썬에서 문자와 숫자를 출력하기 위해서 print() 함수를 제공합니다. print() 함수는 이전 시간에 학습한 문자열 포맷팅 방식과 함께 사용하면 개발자가 의도한 형식에 맞춰진 문자열(숫자 포함)이 출력되어 사용자가 그 내용에 대한 의미를 명확하게 파악하는데 도움이 될 거예요.

 

1
2
3
4
5
6
7
8
9
10
>>> num = 246
>>> print(num)
246
>>> str = 'Python'
>>> print(str)
Python
>>> lst = [12345]
>>> print(lst)
[12345]
>>>
cs

 

라인[1]~[3] 숫자를 변수에 대입했어요. 변수를 출력한 결과 해당 숫자가 출력되었어요.

라인[4]~[6] 문자열을 변수에 대입하고 해당 변수 값을 출력했어요.

라인[7]~[9] 리스트를 생성하여 변수에 대입했어요. 해당 변수를 print함수를 사용하여 출력해 봤더니, 리스트가 정상적으로 출력되었어요.

 

 

1
2
3
4
5
6
7
8
9
10
>>> print('abcd' 'efgh' 'ijkl')
abcdefghijkl
>>> print('abcd'+'efgh'+'ijkl')
abcdefghijkl
>>> print('abcd''efgh''ijkl')
abcd efgh ijkl
>>> for i in range(10):
...     print(i, end = ' ')
...
0 1 2 3 4 5 6 7 8 9 >>>
cs

 

라인[1]~[2] print함수 인자로 문자열 여러 개를 전달하면 문자열이 모두 합쳐서 출력돼요.

라인[3]~[4] print함수 인자에 문자열을 + 묶어서 전달하면 문자열이 모두 합쳐서 출력돼요.

라인[5]~[6] print함수 인자에 문자열을 콤마, 로 분리하여 전달하면 콤마로 분리된 부분은 스페이스가 삽입되어 출력돼요.

라인[7]~[10] 반복문 for문과 range 함수를 사용해서 0부터 9까지 숫자를 출력해주고 있어요. print함수 인자에 출력해 줄 숫자 변수와 end = ' '를 인자로 전달했어요. end = ' '를 사용하면 출력 때마다 줄이 바뀌지 않고 한 줄에 결과 값이 출력돼요.

 

 

  ▶ 파일 생성하기

 

우리가 지금까지 작성한 파이썬 프로그램은 프로그램이 실행 중일 때만 컴퓨터 메모리에 데이터가 저장되고 프로그램이 종료되면 메모리에 저장된 데이터는 지워지게 되어 있어요. 프로그램이 종료되어도 프로그램에서 사용했던 데이터를 계속해서 저장하거나 다음에 다시 사용하고 싶다면 어떻게 해야 할까요? 다양한 방법이 있겠지만 파이썬 입문 과정을 학습하고 있는 님들이 가장 기본적으로 접근 가능한 방법은 파일을 생성하고 파일에 데이터를 기록해 놓고 프로그램이 다시 실행될 때 해당 파일에서 데이터를 읽어와서 사용하는 방법이 있어요. 워드나 한글 파일처럼 파이썬도 파일을 생성해서 내용을 쓰고 읽어 올 수 있어요.

 

파일을 생성할 때에 open() 함수를 사용해요. open() 함수는 파일 객체를 리턴해 주고 우리는 파일 객체를 사용해서 파일에 접근할 수 있어요. open() 함수의 매개변수로는 파일 이름과 파일 열기 모드가 있어요. 파일 열기 모드는 읽기 모드(r), 쓰기 모드(w), 추가 모드(a)가 있어요. 이미 존재하는 파일을 읽어야 경우 r을 인자로 전달해 주시고, 파일 이름은 이미 존재하는 읽어야 할 파일명을 작성해 주시면 돼요. 파일 열기 모드에 대한 자세한 내용은 아래 [파일 열기 모드] 표를 참고해 주세요.

 

파일 open()함수 사용 방법
파일 open()함수 사용 방법1

 

파일 open()함수 사용 방법2
파일 open()함수 사용 방법2

 

파일 열기 모드
파일 열기 모드

 

자 그럼 우리가 원하는 경로에 원하는 파일명으로 새 파일을 생성해 볼게요.

 

1
2
>>> f = open('c:/test/새파일.txt', 'w')
>>> f.close()
cs

 

라인[1] open() 함수를 사용해서 파일 객체를 생성했어요. 파일 이름은 절대 경로를 주어 경로와 파일명. 확장자까지 인자로 전달했어요.  open() 함수의 매개변수인 파일 이름은 파일의 위치 경로+파일명+확장자라고 생각하시면 이해하기 쉬워요. 파일 열기 모드는 쓰기 모드(w)로 파일이 없으면 새로 생성해서 내용을 쓸 때 사용해요. 만약 파일이 존재한다면 덮어서 새로 내용을 쓸 때 사용해요. 결과적으로 라인[1]에서는 C드라이브의 test폴더에 새파일.txt 파일을 생성해서 내용을 쓸 준비를 완료했어요.

라인[2] 파일 객체 f를 사용해서 close() 함수를 호출했어요. 라인[1]에서 내용을 쓸 준비가 되어 있는 새파일. txt을 열어 놨어요. 열린 파일은 프로그램이 종료되기 전 혹은 파일 내용 읽기나 쓰기가 완료된 후에 반드시 종료해 주어야 해요. close() 함수가 이러한 역할을 해주는 함수예요. 라인[2]에서 파일은 종료되었어요.

 

아래 그림을 보시면 위 소스 코드에서 생성한 파일이 제대로 생성되었는지 확인해 보실 수 있어요.

C드라이브 test폴더에 새파일.txt 생성 확인
C드라이브 test폴더에 새파일.txt 생성 확인

 

 

  ▶ 파일 쓰기

파일 쓰기에 사용되는 함수는 write() 함수예요. write() 함수의 인자에 쓸 내용을 전달하면 해당 내용이 파일에 기록돼요. write() 함수는 open() 함수에서 리턴한 파일 객체를 통해서 사용할 수 있어요. 구구단을 출력하는 실습 프로그램을 통하여 파일에 우리가 원하는 내용을 쓰고, 작성된 파일을 직접 실행해서 결과를 확인하는 실습을 진행해 볼게요.

 

1
2
3
4
5
6
7
>>> f = open('c:/test/구구단출력.txt', 'w')
>>> for i in range(26):
...     for j in range(110):     
...         line = f'{i} * {j} = {i * j}\n'
...         f.write(line)
...     f.write('\n')
>>> f.close()
cs

 

라인[1] open() 함수를 사용하여 c드라이브 test폴더에서 구구단 출력.txt 파일을 쓰기 모드로 열었어요.

라인[2]~[6] 중첩 for문을 사용해서 2단부터 5단까지 출력하는 로직이에요. 라인[4]를 보시면 f-string 방식으로 구구단 수식을 만들었어요. 라인[5]에서 구구단 수식을 f객체의 write() 함수의 인자로 전달했어요. write() 함수는 인자로 전달된 내용을 파일 객체에 연결된 파일에 기록해 주는 역할을 해요.

라인[7] open() 함수를 사용했다면 반드시 close() 함수를 사용해서 파일 객체를 종료해줘야 해요.

 

아래는 위 실습을 통해서 생성된 파일 위치 경로에 파일이 제대로 생성되었는지 확인하는 그림이에요.

 

c: / test / 구구단출력.txt 파일 확인
c: / test / 구구단출력.txt 파일 확인

 

아래 그림은 위 파일 위치 경로에 생성된 구구단 출력.txt 파일을 실행하여 파일 내용에 구구단 2단부터 5단까지 수식이 제대로 생성되었는지 확인하는 그림이에요.

구구단출력.txt 파일 실행 후 결과 확인
구구단출력.txt 파일 실행 후 결과 확인

 

 

위 실습에서 구구단 2단부터 5단까지 수식을 파일에 쓰고 저장해 보았어요. 이번 실습에서는 c드라이브의 test폴더에 이미 생성된 구구단 파일.txt에 6단부터 9단까지 수식을 추가하는 실습을 진행해 볼게요.

 

1
2
3
4
5
6
7
>>> f = open('c:/test/구구단출력.txt''a')
>>> for i in range(6, 10):
...     for j in range(110):     
...         line = f'{i} * {j} = {i * j}\n'
...         f.write(line)
...     f.write('\n')
>>> f.close()
cs

 

라인[1] 우리는 기존에 생성한 구구단 출력.txt 파일에 6단부터 9단까지 수식 내용을 추가해야 하므로 파일 열기 모드에  추가 모드(a)를 인자로 전달하였고, 기존에 생성된 파일 이름 또한 인자로 전달하였어요.

라인[2]~[7]은 이전에 실습한 내용과 동일해요. 단, 라인[2]에서 range()함수 인자가 6과 10으로 변경되었어요.

 

C드라이브의 test폴더에 구구단 출력.txt 파일을 실행해 보시면, 아래 그림과 같이 6단부터 9단이 추가되어 있는 걸 확인하실 수 있으실 거예요.

 

6단과 9단이 추가됨
6단과 9단이 추가됨

 

 

  ▶ 파일 읽기

 

파일 읽기에 사용되는 함수는 readline() 함수와 readlines() 함수예요. readline() 함수는 파일 내용을 한 줄씩 읽어서 리턴해 주는 함수예요. readlines() 함수는 파일 내용을 한 번에 모두 읽어서 각각의 줄을 요소 값으로 갖는 리스트를 리턴해 주는 함수예요. 이 두 함수 모두 파일 객체를 통해서 사용 가능해요.  위 파일 쓰기 학습에서 구구단 출력 실습을 통해 C드라이브의 폴더에 생성된 구구단출력.txt 파일을 사용해서 readline() 함수와 readlines() 함수 실습을 진행해 볼게요.

 

1
2
3
4
5
6
7
8
>>> f = open('c:/test/구구단출력.txt''r')
>>> while True:
...     line = f.readline()
...     if not line:
...         break
...     print(line, end = '')
>>> f.close()
 
cs

 

라인[1] open() 함수를 사용해서 구구단출력. txt 파일을 읽기 모드(r)로 열었어요.

라인[3] f객체를 통해 readline() 함수를 사용했어요. 구구단출력.txt 파일 내용을 한 줄 읽어서 그 결과를 line 변수에 대입했어요.

라인[4]~[5] line 변수 값이 존재하지 않는다면 while문을 빠져나가도록 하고 있어요. 즉, 파일 내용을 한 줄 읽어 왔을 때 그 내용이 빈 값이라면 출력할 내용이 없으므로 파일 내용을 더 이상 읽을 필요가 없으므로 프로그램 종료를 위해서 사용한 if-break문이예요.

라인[6]은 line에 값이 있다면 그 값을 출력하도록 하고 있어요. 즉, 파일 내용을 한 줄 읽어오고 그 내용이 존재한다면 출력하는 거예요.

라인[7] open() 함수를 사용해서 파일을 열었다면 반드시 close() 함수를 사용해서 파일 객체를 종료시켜 줘요..

 

아래 그림처럼 파일의 내용이 한 줄씩 출력된 걸 확인할 수 있어요.

파일 내용 한 줄씩 읽고 출력하기
파일 내용 한 줄씩 읽고 출력하기

 

다음은 readlines() 함수를 사용하여 실습을 진행해 볼게요.

 

1
2
3
>>> f = open('c:/test/구구단출력.txt''r')
>>> gugu = f.readlines()
>>> f.close()
cs

라인[1] open() 함수를 사용해서 읽기 모드로 파일을 열었어요.

라인[2] readlines() 함수를 사용해서 구구단출력.txt의 모든 내용을 읽어 와서 gugu 변수에 대입했어요. 이때 readlines() 함수는 파일의 모든 줄을 읽어 각각의 줄을 요소로 갖는 리스트 값을 gugu변수에 대입시켜요.

라인[3] 반드시 close() 함수로 파일 객체를 종료시켜 줘요.

 

gugu변수를 출력해 보면 다음 그림과 같이 출력되는 걸 확인하실 수 있어요.

readlines()함수에서 리턴된 리스트
readlines()함수에서 리턴된 리스트

 

gugu변수를 구구단 형식에 맞춰 출력해 볼게요.

 

1
2
>>> for line in gugu:
...     print(line, end='')
cs

 

라인[1]~[2] for문을 사용해서 gugu 변수에 대입된 파일에서 읽어온 내용인 리스트 값을 한 줄씩 출력해 보았어요.

 

출력결과는 다음 그림과 같아요.

readlines()함수 사용 구구단 출력
readlines()함수 사용 구구단 출력

 

 

  ▶ with문 사용

 

님들 파일 객체를 사용할 때 마지막에 매번 close()를 해주어야 하는 불편함을 없애기 위해서 with문을 사용해요. with문을 사용하면 with문이 종료되는 순간 자동으로  close()를 해주어요.

 

1
2
3
4
>>> with open('c:/test/file_with.txt''w'as f:
...     f.write('Life is too short, you need Python')
>>>
 
cs

 

라인[1] with문을 사용해서 file_with.txt 파일을 쓰기 모드(w)로 열었어요.

라인[2] 파일에 Life is too short, you need Python 내용을 쓰고 with문이 종료되었어요. with문이 종료되는 순간 자동으로 파일 객체가 close()되므로 따로 close()를 해줄 필요가 없어요. 이렇게 사용하면 close()를 잊고 하지 못하는 실수를 하지 않고 close()를 매번 해주어야 하는 불편함을 없앨 수 있어요.

 

님들 이번 시간은 조금 긴 시간이었어요. 파이썬 프로그램의 사용자 입력과 출력을 살펴보았고, 파일 생성/쓰기/읽기 그리고 with문까지 학습해 보았어요. 특히 파일을 생성하는 부분은 재미있는 시간이었을 거라고 생각해요. 그동안 파이썬 문법을 배우면서 실습창 내부에서만 결과를 확인할 수 있었는데, 이번 시간에 직접 파일이란 것을 만들어보고 만든 파일을 실행까지 해보셔서 더 그러셨을 거예요. 제가 제시한 실습에만 만족하지 마시고 님들께서 직접 생각해 보시고 이렇게도 프로그램을 만들어 볼 수 있다고 생각되는 부분은 직접 파이썬 코딩을 통해 실습을 진행해 보시면 님들 능력이 더 향상되실 거예요. 오늘도 고생 많으셨어요. 다음 시간에 뵐게요.

반응형