방구석 호랑이 이불 밖은 위험해

02. 변수와 출력형식

1. 변수

“변수는 상자다.”

변수를 설명할 때, 항상 사용하게 되는 표현이다. 변수라는 단어를 중학교에서 들어본 적 있을 것이다. 우리가 배웠던 변수의 의미는 “수식에 따라서 변하는 값”이다. 프로그래밍에서는 다루는 변수의 의미에서는 반절은 맞고 반절은 틀린 말이다.

변수?

프로그래밍에 있어서 변수는 숫자, 문자와 같은 데이터를 저장하는 공간을 의미한다. 상자와 정의가 비슷하다. 다른 점은 물건 대신 값이나 데이터가 담긴다. 상자의 특징과 비교하여 변수를 살펴보자.

크기에 따라 담을 수 있는 데이터가 다르다.

상자의 크기에 따라 상자 안에 담을 수 있는 물건이 다르다. 변수 또한 크기에 따라 담을 수 있는 데이터가 다르다. 하지만, Python에서는 자동으로 변수의 크기를 정해주기 때문에 크게 신경 안 써도 된다. 이렇게 변수에 저장되는 데이터 종류를 자료형이라고 부른다.

이름으로 구분할 수 있다.

똑같은 상자를 구분하는 방법 중 하나는 상자 밖에 이름을 쓰는 것이다. 각각의 변수는 이름을 가지고 있다. 변수의 재사용과 가독성을 위해 변수에 알맞은 이름을 정해는 것이 중요하다.

데이터를 바꿀 수 있다.

상자에 담을 수 있는 물건은 사용자가 원하는대로 바꿀 수 있다. 변수에 담을 수 있는 데이터는 바뀔 수 있다. 변수의 크기는 걱정하지 말자. Python에서는 우리를 위해 변수의 크기를 자동으로 변경해 준다.

리터럴(Literal)

리터럴(Literal)은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미한다. 프로그래밍에서 작성된 코드의 ‘값’ 그 자체로 고정된 값을 나타낸다. 간단하게 변수에 들어가는 ‘값’리터럴(Literal)이라고 알아두자.

a = 10
b = "안녕하세요"

위의 예시에서 10은 숫자 리터럴이고 “안녕하세요”는 문자 리터럴이다. 간단하게 대표적인 리터럴의 종류를 알아보고 넘어가겠다.

  • 숫자 리터럴 : 정수 리터럴, 실수 리터럴, 복소수 리터럴 3가지가 있다.
  • 문자 리터럴 : 따옴표로 묶인 문자를 말한다.
  • 논리값 리터럴 : True(참) 또는 False(거짓) 값 중 하나를 가진다.
  • 컬렉션 리터럴
    • 리스트 리터럴 : […]
    • 튜플 리터럴 : (…)
    • 딕셔너리 리터럴 : {키: 값, …}
    • 집합 리터럴 : {…}

사용

규칙

변수 이름 = 데이터

변수를 선언하는 방법은 위와 같이 아주 쉽다. 하지만 몇가지 규칙이 있으니 기억하자. Python에서 권장하는 변수 이름 만드는 존재하지만 따로 언급하지 않겠다. 궁금하면 링크를 참조하자.

1. 영문자(대, 소문자 구분), 숫자, 언더바(_)를 사용할 수 있다.

2. 첫 자리에는 숫자를 사용할 수 없다.

3. Python 키워드는 변수 명으로 사용할 수 없다.

Python 키워드는 Python에서 이미 예약되어있는 단어이다. 아래를 참조해서 피하도록 하자.

False, None, True, and, as, assert, break, class, continue, def, del, 
elif, else, except, finally, for, from, global, if, import, in, is, 
lambda, nonlocal, not, or, pass, raise, return, try, while, with, 
yield

선언

Python 쉘을 실행시키고 간단하게 연습을 해보자. 자료형(데이터의 종류) 중 숫자형과 문자열을 이용해 변수를 선언해 보자. 숫자형은 숫자, 문자열은 단어 또는 문장이라고만 우선 알아두자.

숫자형

lucky = 7

숫자형은 변수 이름에 숫자를 넣으면 된다.

문자열

name = "Dan"

문자열을 큰따옴표(“ ”)나 작은따옴표(‘ ’)안에 넣어서 사용하면된다.

7 != "7" # !=라는 뜻은 같지 않다는 뜻이다.

예를 들어서 숫자 7과 문자열 “7”은 같지 않다.

호출

호출하는 방법은 변수를 선언하고 선언한 변수 이름을 사용하면 된다.

>>> name = "Dan"
>>> name
'Dan'

2. 출력

다음과 같이 파일을 만들어서 실행을 하면 아무것도 나오지 않을 것이다.

Code

# Python_Study_02_01.py
name = "Dan"
name

변수를 출력하기 위해서는 컴퓨터에 출력이라는 명령을 내려야 한다. Python을 실행한 터미널이나 Python 쉘에 출력하는 명령어는 print() 함수이다.

기본사용법

print() 함수는 문자열을 출력한다. 예시 코드를 통해 다양한 사용 방법을 알아보자.

Code

# Python_Study_02_02.py
print('Hello Python')

print("Hello Python")

print('Hello "Python"')

print("Hello 'Python'")

print('Hello', 'Python')

print('Hello' + 'Python')

Result

Hello Python
Hello Python
Hello "Python"
Hello 'Python'
Hello Python
HelloPython

기본적으로 출력하고자 하는 문자열을 print() 함수에 넣어서 사용한다.

추가적으로 3번과 4번 코드를 보면 큰따옴표(“ ”)를 표현하고 싶으면 작은따옴표(‘ ’) 안에 넣어서 출력한다. 반대로 표현하고 싶을 때도 같다. 5번 코드의 경우 다수의 문자열을 쉼표(,)를 사용하여 공백을 추가하고 연결해서 출력한다. 하지만 6번의 경우는 더하기(+) 기호를 사용하여 공백없이 연결해서 출력 한다.

변수 사용해서 출력하기

변수 출력하는 방식은 몇가지가 있지만 여기서는 2가지만 다루도록 하겠다. 나중에 포스팅 할 기회가 생기면 다루도록 하겠다.

Code

# Python_Study_02_03.py
name = "Dan"
verb = "is"
character = "Kind"
num1 = 10
num2 = 20

print(name, verb, character)

print(name, "is", character)

print(name + " " + verb + " Kind")

print(num1, num2, 30)

print(num1 + num2)

Result

Dan is Kind
Dan is Kind
Dan is Kind
10 20 30
30

이 방법은 변수를 직접 사용하면 된다. 하지만 숫자형을 표현하기 위해 더하기(+) 기호를 사용하면 의도했던 것(?)과 다르게 두 변수의 합이 나온다. Python에서는 숫자형과 숫자형 사이에 사칙연산 기호를 넣으면 연산을 해서 출력한다.

그렇다면 문자형과 숫자형을 더하게 된다면 어떻게 하면 될까?

TypeError: can only concatenate str (not "int") to str

“자료형이 서로 같지 않다”라는 오류가 뜬다. Python에서는 서로 다른 자료형을 더할 수가 없다. 문제를 해결하기 위해 숫자형을 문자형으로 바꾸는 방법을 생각 할 수 있다. 이 방법은 자료형 이후에 다루도록 하겠다. 내가 생각하기에 자료형을 바꿔서 출력하는 방법은 좋은 방법이 아닌 거 같다.

format() 함수

Python에서 문자열 포매팅(string formatting)을 통해서 자료형과 상관없이 원하는 위치에 변수를 출력을 할 수 있다. 문자열 포매팅 중 format() 함수를 사용하겠다.

Code

# Python_Study_02_04.py
num = 17

name = "Dan"

print('num: {}, name: {}'.format(num, name)) # 순서대로

print('num: {1}, name: {0}'.format(name, num)) # 번호 순서대로

print('num: {f}, name: {s}'.format(f=num, s=name)) # 변수 이름대로

Resault

num: 17, name: Dan
num: 17, name: Dan
num: 17, name: Dan

기본적인 사용법은 “문자열.format()” 이다. 우선 변수를 넣어줄 공간에 중괄호({})를 넣어 문자열을 완성한다. 그 후 완성한 문자열 뒤 “.format()”을 사용한다. 참고로 프로그래밍에서 숫자는 0부터 카운트한다.

이스케이프 문자

출력을 2줄로 나눠서 출력하고 싶거나 또는 큰따옴표(“ ”)와 작은따옴표(‘ ’)를 같이 쓰려고 한다고 가정하자. 출력을 2줄로 하고 싶을 때는 print() 함수를 두 번 쓰면 되고 따옴표를 둘 다 쓰고 싶을 때는 번갈아 가면서 넣어주면 될 것이다. 하지만 이러한 방법이 좋아 보이지는 않는다.

이러한 특수한 상황을 출력하고자 할 때, 이스케이프 문자를 사용한다. 이스케이프 문자는 기본적으로 백슬래시(\) + 문자로 사용이 되며 예약된 문자만 사용할 수 있다. 자주 사용하는 이스케이프 문자만 다루도록 하겠다.

예약문자 내용
\n 줄바꿈, 새로운 줄
\t 수평 탭
\v 수직 탭
\” or \’ 따옴표를 표시한다
\8진수 or \x16진수 ASCII 코드의 문자를 표현한다
\a 경고(비프)

이렇게 봐서는 어떻게 쓰는지 잘 모를 것이다. 예시 코드를 통해서 사용되는 방법만 알아보고 넘어가자. ASCII 코드에 대해서는 다음에 포스팅 하도록 하겠다.

Code

# Python_Study_02_05.py
print("Hello\nHi")

print("Hello\tHi")

print("Hello\vHi")

print("\"Hello\"\'Hi\'")

print("\101 \x41") # ASCII 코드 "A"

Result

Hello
Hi
Hello	Hi
Hello
     Hi
"Hello"'Hi'
A A

이스케이프 문자 뒤에 다른 문자를 입력해도 이스케이프 문자로 인식하지 않으니 걱정 안 해도 된다.

3. 입력

대부분의 프로그램은 사용자의 입력을 받아 계산하고 결과를 출력한다. 그렇다면 사용자의 입력은 어떻게 받을까? 받은 데이터는 어떻게 저장할까?

input() 함수

변수 이름 = intput("입력 받을 때 출력할 내용")

변수 선언하는 것과 매우 비슷하다. input() 함수로 받은 데이터는 모두 문자열이다. 물론 다른 자료형으로 바꿀 수 있다. 이 부분에 대해서는 자료형 이후 언급하겠다.

Code

# Python_Study_02_06.py
name = input("이름을 입력하세요 : ")
print(name)

Result

이름을 입력하세요 : Dan # Dan 입력
Dan

지금까지 배운 내용으로는 input() 함수를 이용하여 할 수 있는 일이 별로 없다. 하지만 앞으로 다양한 자료형을 배우고 문자열을 처리하는 다양한 함수를 배우게 될 것이다. 그러면서 자연스럽게 input() 함수를 다양한 방향으로 사용할 수 있게 될 것이다.