생각을 기계에 전달하고 계산 결과를 화면에 출력하는 과정
컴퓨터가 아무리 뛰어난 인공지능이고 슈퍼컴퓨터라 하더라도, 우리가 원하는 것을 말해주지 못하고(입력) 컴퓨터의 대답을 듣지 못한다면(출력) 아무 일도 할 수 없습니다.
이 수업을 통해 컴퓨터에게 명령을 내리고 결과를 돌려받는 진짜 프로그래밍의 첫 대화 창구를 여는 열쇠를 쥐게 됩니다.
우리가 늘 접하는 자판기는 입력과 출력의 대표적인 모델입니다.
모든 소프트웨어 프로그램은 이처럼 기계와 사람 간의 입력과 출력(대화)으로 기획됩니다.
컴퓨터가 알고 있는 값을 화면에 띄워 사용자에게 알리는 도구
print("Hello, World!") # 문자열 출력 (따옴표 사용 필수)
print(100) # 정수 숫자 출력
print(3.14) # 실수 숫자 출력
# 쉼표(,)로 연결하면 값 사이에 빈칸이 자동으로 하나 생김
print("이름:", "홍길동") # 이름: 홍길동
print("점수:", 100, "점") # 점수: 100 점 print() 함수에서 출력 형식을 조절하는 두 옵션의 핵심 차이
# sep는 값 '사이'에만 작동
print("사과", "배", "감", sep=" 와 ")
# 출력: 사과 와 배 와 감
# end는 자동 엔터 대신 맨 끝에 지정된 문자 주입
print("사과", "배", "감", end=" 와 ")
print("귤")
# 출력: 사과 배 감 와 귤 문장 사이에 변수의 값을 자연스럽게 끼워 넣는 가장 현대적인 기법
name = "홍길동"
score = 98
print(f"안녕하세요, {name}님. 이번 성적은 {score}점입니다.")
f-string을 꼭 사용해야 하는 이유:
str()로 형변환을 수동으로 처리하지 않아도 됨키보드 신호가 입력되어 엔터를 치기 전까지 실행을 중지하고 대기합니다.
name = input("이름 입력: ")
print(f"반갑습니다, {name}님!")
중요한 시스템 약속: 키보드로 유입되는 모든 데이터는 무조건 글자(str) 취급됩니다.
x = input("수: ") # 5를 타이핑하면
print(type(x)) # (연산 불가능한 글자 상태) C, C++, Java vs Python의 타입 규칙
int score = 100;score = 100파이썬에서도 타입을 지정(명시)할 수 있을까?
타입 힌팅(Type Hinting)을 사용하여 명시적으로 적을 수 있습니다.
score: int = 100
name: str = "홍길동"
def greet(name: str) -> None:
print(name) 문자로 유입된 데이터를 연산 가능한 숫자 성향으로 변환합니다.
# 잘못된 예
n = input() # "5" (문자)
print(n + 3) # TypeError (글자와 숫자는 합칠 수 없음)
# 올바른 예
n = int(input()) # 5 (정수형 변환)
print(n + 3) # 8 (연산 성공)
* int("10") = 10(정수) | float("3.14") = 3.14(실수) | str(100) = "100"(문자)
사용자가 공백(스페이스바)을 사이에 두고 입력한 데이터들을 조각조각 잘라내어 변수에 분배합니다.
# 사용자가 "홍길동 95"를 입력했을 때
name, score = input().split()
# 쪼개진 각각의 값은 여전히 글자(str) 상태입니다.
print(name) # 출력: 홍길동
print(score) # 출력: 95 (글자 형태, 숫자 연산 불가) 쪼개진 문자열 조각들에 형변환 함수를 일괄적으로 적용하여 변수들에 정수형이나 실수형으로 대입시킵니다.
# map(적용할_함수, 대상_데이터)
a, b = map(int, input().split())
# 사용자가 "3 5"를 입력했을 때:
# 1. input().split()으로 ["3", "5"] 생성
# 2. map이 각각 int()를 취해 숫자 3과 5로 변환
# 3. 변수 a와 b에 정수 3과 5가 대입되어 연산 가능 상태가 됨
print(a + b) # 출력: 8 파이썬에서 함수 이름 뒤에 괄호 ()를 붙이는 것은 "지금 당장 이 함수를 실행하라"는 의미입니다.
map 함수에는 완성된 결과물이 아니라, 데이터 조각들을 만날 때마다 처리할 수 있는 레시피(int)를 넘겨주어야 정상적으로 작동합니다.
map()의 결과물을 list()로 감싸지 않고 바로 출력하면 원치 않는 주소 값이 나오게 됩니다.
# 잘못된 예: map 객체를 그대로 출력
numbers = map(int, input().split())
print(numbers)
# 출력: 파이썬의 다중 대입 (언패킹, Unpacking) 기능 덕분입니다.
a, b = map(...): 좌변에 변수가 여러 개 있으면, map 객체에서 값을 하나씩 순서대로 꺼내 a와 b에 자동으로 나눠 담아줍니다.numbers = map(...): 좌변에 변수가 하나뿐이면, 값을 꺼내지 않고 map 객체 자체를 통째로 변수에 담아버립니다.따라서 여러 변수에 나누어 대입할 때는 list()가 필요 없지만, 하나의 변수에 목록 전체를 통째로 담을 때는 list()가 필수입니다.
# 1. 하나의 정수만 주어질 때
n = int(input())
# 2. 한 줄에 공백을 두고 두 정수가 나열될 때
a, b = map(int, input().split())
# 3. 한 줄에 여러 정수들이 뭉쳐서 전달될 때 (리스트화)
numbers = list(map(int, input().split()))
# 4. 데이터 건수 N이 들어오고 그 다음 줄부터 N회 데이터가 제공될 때
n = int(input())
for _ in range(n):
data = int(input()) | 도구 | 역할 | 핵심 개념 |
|---|---|---|
print() |
결과 화면 출력 | 문자는 따옴표 필수, sep/end 조절 가능 |
input() |
키보드 데이터 수신 | 받은 값은 무조건 문자열(str) 형태 |
int() / float() |
숫자 타입 변형 | 연산 이전에 변환해야 덧셈 가능 |
split() / map() |
문자열 쪼개기 및 적용 | 한 줄에 유입되는 데이터 분배 처리 핵심 |