본문 바로가기

파이썬

[ 코랩과 파이썬 ] 10. python 표준 입출력 input, print

반응형

1) 표준 입력(input)

 

컴퓨터에서 표준 입력장치는 키보드와 마우스이며 이를 이용해 입력한 문자와 숫자는 파이썬 표준 입력 함수 input()을 통해서 파이썬 프로그램에 입력된다. input() 함수는 박스형 형태의 입력창인 콘솔 창을 통해서 사용자가 입력한 값을 받는다. 즉, input() 함수를 사용하면 사용자에게 박스 창을 제공하고 사용자는 그곳에 원하는 값을 입력한다.

 

여기서 유의할 점은 input() 함수에 의해 입력된 모든 값은 "문자열" 타입으로 반환하기 때문에 사용하고자 데이터 타입으로 바꿔줘야 한다. 만약 정수를 사용하고 싶다면 int(input())로, 실수는 float(input()), 불리언 자료는 bool(input())으 변화함수를 이용해 자료 타입을 변환한다.

 

입력값을 친절히 설명하기 위해서는 input() 함수 안에 “ “을 이용해 텍스트를 입력하면 박스 콘솔에 텍스트가 같이 뜨게 된다.

 

my_name = input("이름: ")

 

간단한 예로 체질량지수(BMI)를 계산하는 프로그램을 작성해 보자. BMI는 자신의 몸무게(kg)를 키(m)의 제곱으로 나눈 값이다. 아래 예는 체지량 지수를 계산해 주는 실제 사이트이다. 파이썬 input 함수를 이용하면 아래의 신장과 체중을 입력하는 창을 그대로 구현해 BMI를 계산할 수 있다.

 

[ 체지방지수( https://health.seoulmc.or.kr/healthCareInfo/myBMIPopup.do ) 계산사이트

 

height = float(input("키(cm): "))         # 입력값(숫자로 된 문자열)을 실수로 변환
weight = float(input("몸무게(kg): "))
bmi = weight/(height*height*0.0001)
print("BMI: ", bmi)

 

 

2) 표준 출력(print)

 

(1) print() 함수 기본 사용

 

input() 함수를 이용해 입력받은 자료의 결과를 모니터에 출력하기 위해서는 print()라는 표준 출력함수를 이용한다. print() 문의 가장 기본은 문자열인 경우 큰따옴표(" ") 또는 작은따옴표(' ')를 이용하고 숫자면 숫자를 그냥 사용한다. 변수명을 print(변수명) 하면 변수에 포함된 값을 출력한다.

 

print("파이썬 출력함수는 print입니다.")  # 파이썬 출력함수는 print입니다. 를 출력    
print(10+5)                             # 10+5의 결과 값인 15를 출력
text = "변수를 출력합니다."
print(text)                  # 변수 값인 "변수를 출력합니다."를 출력

 

(2) 더하기(+)와 쉼표(,)를 사용

 

print() 문 안에 더하기(+) 또는 쉼표(,)를 이용해 출력할 내용을 조절할 수 있다. 두 개의 문자열을 붙여서 출력할 때 더하기(+)와 쉼표( , )를 이용하지만, 더하기는 띄어쓰기 없이 바로 붙이고, 쉼표는 한 칸 뛰고 붙이는 차이가 있다. 그리고 문자와 숫자를 같이 출력하려면 쉼표만 사용할 수 있다.

 

print("a" + "b")        # ab 를 출력
print("a","b")          # a b 를 출력
print("a" + "b", 7)     # ab 7을 출력
print("a" + "b" + 7)    # 에러 발생

 

(3) print() 옵션(sep, end)을 사용

 

쉼표(,)를 사용해 두 개 이상의 문자열을 붙여서 출력할 때 띄어쓰기가 아니라 문자열 사이에 다양한 구분자를 이용할 수 있다. sep =”구분자”를 옵션으로 사용하면 구분자로 두 문자열을 붙이게 된다.

 

# sep 옵션을 잉요해 구분자로 문자열 붙여서 출력

print("손흥민", "이강인", sep = ",")        # 손흥민,이강인 출력
print("손흥민", "이강인", sep = " vs ")     # 손흥민vs이강인 출력
print("손흥민", "이강인", sep = "\\n")       # 손흥민 아래에 이강인 출력(\\n는 엔터를 의미)

 

 

end 옵션은 출력문 끝처리를 위해 사용된다. end 옵션을 사용하면 줄 바꿈 없이 문자열을 계속 이어서 출력한다. 예를 들어, end =" "은 뒤 출력문을 줄 바꿈 하지 않고 바로 붙여서 출력하게 되고, end ="!"는 "!"를 붙이고 다음 출력문을 줄 바꿈 없이 이어서 출력한다.

 

# end 옵션을 이용해 줄바꿉 없이 출력

print("조규성", "이강인", sep = "과", end = "!")   # 조규성과이강인!
print("누가 연봉이 더 많을까요", end="?")          # 조규성과이강인!누가연봉이 더 많을까요?
print("맞춰봅시다!")                              # 조규성과이강인!누가연봉이 더 많을까요?맞춰봅시다!

 

(4) print() 메서드 사용: ljust, rjust, zfill

 

출력할 때 자릿수를 확보한 후 왼쪽 정렬(ljust)과 오른쪽 정렬(rjust)을 사용하면 프린터 포맷을 지정할 수 있다. 이렇게 정렬된 형태로 출력하면 깔끔하게 보기가 좋다.

 

salaries = {"손흥민": "7억", "이강인":'5억', "조규성": '2억'} 
for player, salary in salaries.items():     # key와 value를 쌍으로 하나씩 추출
  print(player.ljust(5), salary.rjust(5), sep = ":")
       # 왼쪽으로부터 5칸 확보 좌측 정렬, 오른쪽으로부터 5칸 확보 우측 정렬, :로 구분
--------------------------------------------------------------------
손흥민  :   7억
이강인  :   5억
조규성  :   2억

 

 

ljust와 rjust를 이용해 자릿수를 확보하고 남는 자리에 특별한 수를 체워 넣을 수도 있다. 위의 예에서 ‘억’ 대신에 0을 8개 넣어보자.

 

salaries = {"손흥민": "7억", "이강인":'5억', "조규성": '2억'} 
for player, salary in salaries.items():     # key와 value를 쌍으로 하나씩 추출
  print(player.ljust(5), salary[0].ljust(9, "0"), sep = ":")
--------------------------------------------------------------------
손흥민  :700000000
이강인  :500000000
조규성  :200000000

 

 

자릿수를 확보하고 남는 앞자리에 0을 채우고 싶다는 zfill0 함수를 이용한다. zfill(5) 하면 5자리를 확보한 후 해당 문자열을 오른쪽으로 정렬하고 앞부분에 0을 채운다.

 

for num in range(1, 5):
    print("번호 : " + str(num). zfill(3))
--------------------------------------------------------------------
대기번호 : 00001
대기번호 : 00002
대기번호 : 00003
대기번호 : 00004

 

 

(5) 출력문 숫자 형식 지정

 

숫자는 세 번째 자리에 콤마(,)를 찍거나 숫자 앞에 "+" 와 "-"를 붙이는 등 다양한 형식으로 출력할 수 있다. 숫자의 형식을 지정하는 구문은 print( “{0: 형식 지정}".format(값))이며 형식 지정 방식은 아래와 같다.

 

{0: +} => 숫자에 부호 삽입

{0: , } => 3 자리마다 콤마

{0: > 10} => 10자리 확보 왼쪽 정열

{0: < 10} => 10자리 확보 오른쪽 정열

{0:_<10} => 10칸 확보하고 빈자리 _ 채움

{0: f} => 소수점 출력

{0, .2f} => 소수점 둘째 자리 까리(셋째 자리에서 반올림)

{0:^<+10,} => 빈칸에 ^를 채움, 왼쪽 정렬, 부호 나타냄, 10자리 확보, 3자리에 콤마 찍음.
t = 10000
print("{0:+}".format(t))           # 숫자에 부호 추가: +10000
print("{0:,}".format(t))           # 세 번째 자리에 컴마 삽입: 10,000
print("{0: >10}".format(t))        # 10자리를 확보하고 왼쪽 정렬:     10000
print("{0:^<10}".format(t))        # 10자리를 확보하고 오른쪽 정렬 후 빈자리 ^ 채움: 10000^^^^^
print("{0:^<+10,}".format(t))      # 10자리를 확보하고 오른쪽 정렬 후 부호를 추가하고 빈자리 ^ 채움: +10,000^^^
print("{0:.2f}".format(t))         # 소수점 두 째자리까지 출력: 10000.00

 

(6) 탈출 문자(역 슬래쉬, \) 사용

 

출력을 할 때 따옴표나 물음표, 줄 바꿈 등을 같이 출력하고자 할 때는 역슬래쉬 한 다음에 사용하고자 하는 특수 문자를 사용한다. 예를 들어 작은 따움표를 출력하고 싶다면, 역슬래쉬 다음에 작은따옴표(print(”\’”))를 쓰면 된다.

 

자주 사용하는 탈출 문자를 정리하면 다음과 같다.

 

탈출문자 내용
\' 작은따옴표 출력
\" 큰따옴표 출력
\\ 백슬래시 출력
\? 물음표 출력
\n 줄 바꿈
\t 가로 탭
\v 세로 탭
\b 백스페이스(한 글자 삭제)
\r 커서를 맨 앞으로 이동해 \r 이후 문자 입력

 

 

print()의 end 옵션과 탈출 문자(\t)를 이용하면 구구단을 단마다 행으로 보기 좋게 출력할 수 있다. end='\t’ 하면 하나 출력하고 tab으로 이어 붙이고, 하나의 구구단이 끝나면 다음 열로 내려가서 이를 반복한다.

 

for i in range(1, 10):
  for j in range(1, 10):
    print("{0} x {1} = {2}".format(i, j, i*j), end='\\t')
  print()

 

 

(6) 변수값을 반환해 출력

 

출력문 print()로 텍스트를 출력하려고 할 때 특정 값이 계속 변하는 곳이 있다면 이 값을 변수로 지정해서 해당 값만 계속 바꿔가면서 출력할 수 있다.

 

💡 문자열 안에 정수, 문자열, 문자를 삽입: %d, %s, %c

 

“나는 ‘손흥민’을 좋아한다. “라는 문장에서 ‘손흥민’ 부분만 바꿔서 같은 문장을 계속 출력할 수 있다. 이때 %d(정수형 자료), %s(정수, 문자열 자료), %c(문자)를 이용한다.

 

print("손흥민은 %d살이고, 나는 %s과 %s 모두를 좋아하고 손흥민의 성은 %c이다." %(30, "손흥민", "이강인", "손"))
# 앞에서 부터 순서대로 해당 위치에 삽입: 손흥민은 30살이고, 나는 손흥민과 이강인 모두를 좋아하고 손흥민의 성은 손이다.

 

 

💡 fromat() 메서드 사용

 

format () 메서드를 사용해서 테스트의 해당 위치에 특정한 값을 삽입할 수 있다. 특정한 값이 들어갈 위치를 { }로 표시한다. 위의 문장을 format()을 이용해 출력해 보자.

 

# 순서대로 특정 값 지정해 출력
print("손흥민은 {}살이고, 나는 {}과 {} 모두를 좋아하고 손흥민의 성은 {}이다.".format(30, "손흥민", "이강인", "손"))

# 위치를 지정해 특정 값을 입력 후 출력
print("손흥민은 {0}살이고, 나는 {2}과 {1} 모두를 좋아하고 손흥민의 성은 {3}이다.".format(30, "손흥민", "이강인", "손"))

# 변수를 이용해 특정 값을 입력후 출력
age=30
name_1="손흥민"
name_2="이강인"
first='손'

print("손흥민은 {0}살이고, 나는 {1}과 {2} 모두를 좋아하고 손흥민의 성은 {3}이다.".format(age, name_1, name_2, first))

 

 

💡 f”변수명” 사용

 

변수를 사용해 특정 값을 대입한 후 출력할 때 가장 쉽고 빈번히 사용되는 형식이 f”{변수명}”이다. prtint()문 안에 f를 쓴 후에 따움표하고 변수만 나열하면 된다.

 

age=30
name_1="손흥민"
name_2="이강인"
first='손'

print(f"손흥민은 {age}살이고, 나는 {name_1}과 {name_2} 모두를 좋아하고 손흥민의 성은 {first}이다.")
반응형