본문 바로가기
Python/Python 공부 정리

[파이썬 독학] 2.3. 변수와 입력

by Dailybook406 2022. 6. 6.

이번에는 변수와 입력 방법에 대해 알아봅시다.

 

[ 변수 만들기/사용하기 ]

변수를 쉽게 생각하면 단어의 의미 그대로 '변할 수 있는 자료'이다.

 

수학에서 원주율인 3.141592···를 π라는 기호로 사용하는 것과 유사하다.

 

파이썬에서는 예를 들어 pi라는 이름의 변수를 생성하면, pi라는 공간에 원하는 값을 언제든지 넣어두고 사용할 수 있다.

변수는 숫자형뿐만 아니라 다른 모든 자료형을 넣을 수 있다.

 

변수를 생성하는 방법은 간단하다.

사용하고자 하는 변수를 왼쪽에, 저장하고자 하는 값을 오른쪽에 입력하면 된다.

pi = 3.141592

 

이때 등호 기호 '='는 수학 기호의 '같다'는 의미가 아닌, 오른쪽의 값을 왼쪽의 변수에 '넣겠다'는 의미이다.

 

변수는 선언된 변수의 이름을 사용하여 자유롭게 사용할 수 있다.

pi = 3.141592

print(pi)
print(pi + pi)
print(pi * pi)

실행결과

3.141592
6.283184
9.869600294464002

이렇게 변수 안에 있는 값을 사용하는 것을 '변수를 참조한다'라고 말한다.

 

위의 예시에서는 pi라는 변수에 숫자형 자료가 들어있기 때문에, 숫자형으로 할 수 있는 것은 모두 수행할 수 있다.

다만, 숫자형 자료가 입력되어있기 때문에 문자형 자료처럼 연산을 할 수는 없다.

즉, 변수에 어떤 자료가 들어있는지에 따라 수행할 수 있는 연산은 달라질 수 있다.


추가적으로 변수를 설정할 때 주의해야 할 사항이 있다.

 

프로그래밍 언어에서 이름을 붙일 때 사용하는 단어식별자(identifier)라고 하는데, 식별자를 만들 때는 지켜야 할 규칙이 존재한다.

  • 키워드를 사용하면 안 된다.
  • 특수 문자는 언더 바(_)만 허용된다.
  • 숫자로 시작하면 안 된다.
  • 공백을 포함할 수 없다.

위의 규칙에 해당하는 모든 글자는 식별자로 사용할 수 있다.

 

이때 키워드(keyword)처음 파이썬이 만들어질 때부터 미리 사용하기로 정해져 있는 단어를 말한다.

키워드의 예시로는 'False', 'True', 'and', 'as', 'if' 등이 있다.

 

사용할 단어가 키워드인지 확인해야 할 경우는 아래의 코드를 입력하여 파이썬의 키워드를 확인할 수 있으니 참고하자.

import keyword
print(keyword.kwlist)

실행결과

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']

단, 파이썬은 대소문자를 구분하기 때문에 대소문자가 다르면 다른 단어임을 기억하고 사용하자.

 

더보기

※ 파이썬의 유연성

C, C++, Java 등과 같은 다른 일부 프로그래밍 언어는 기본적으로 변수를 사용할 때 아래와 같이 변수의 자료형을 미리 선언해야 한다.

int pi

 

하지만 파이썬은 다른 프로그래밍 언어와 다르게 변수를 선언할 때 자료형을 미리 지정하지 않아도 된다.

따라서 같은 변수에 다양한 자료형을 유동적으로 넣어서 사용할 수 있다.

a = 3.141592
print(a)

a = 'Hello'
print(a)

a = True
print(a)

 실행결과

3.141592
Hello
True

 

다만, 오히려 이러한 유연성으로 인해 변수에 어떤 자료형이 들어있는지 모른 채 무분별하게 사용하여 오류를 발생시킬 수도 있기 때문에 주의하자.

 


[ 복합 대입 연산자 ]

변수를 활용하여 사용할 수 있는 독특한 연산자로 복합 대입 연산자가 있다.

 

복합 대입 연산자변수와 기존의 연산자를 조합하여 사용하는 연산자이다.

복합 대입 연산자의 형태는 자료형에 사용하는 기본 연산자와 = 연산자를 합한 형태로, 아래와 같이 사용한다.

a += 5
b -= 1
c *= 2

'a += 5'라고 하면 'a = a + 10'을 의미한다.

 

숫자 및 문자열에 적용할 수 있는 연산자는 모두 같은 형식으로 복합 대입 연산자를 사용할 수 있다.

 

※ 숫자에 적용할 수 있는 복합 대입 연산자

연산자 이름 설명
+= 숫자를 덧셈 후 대입
-= 숫자를 뺄셈 후 대입
*= 숫자를 곱셈 후 대입
/= 숫자를 나눗셈 후 대입
%= 숫자의 나머지를 구한 후 대입
**= 숫자를 제곱 후 대입

※ 문자열에 적용할 수  있는 복합 대입 연산자

연산자 이름 설명
+= 문자열을 연결 후 대입
*= 문자열을 반복 후 대입

 


[ 사용자 입력: input() ]

여태까지의 예시에서는 임의로 변수에 값을 지정하여 사용했지만, 프로그래밍을 공부할 때는 사용자로부터 데이터를 입력을 받아서 프로그램을 만드는 일이 빈번하다.


  input() 함수로 사용자 입력받기

파이썬에서는 input() 함수를 이용하여 명령 프롬프트에서 사용자로부터 데이터를 입력받을 수 있다.

 

이때 괄호 안에 문자열을 입력할 수 있는데, 이렇게 input() 함수 괄호 안에 입력된 문자열프롬프트 문자열이라고 한다.

input("데이터를 입력하세요> ")

 

위의 코드를 실행하면 아래와 같이 '데이터를 입력하세요> '라는 문자열이 뜨고 프로그램이 종료되지 않은 채 대기한다.

데이터를 입력하세요> |

 

이렇게 프로그램이 실행 도중에 잠시 멈추는 것블록(block)이라고 한다.

위의 상황을 이야기하자면, input() 함수가 사용자에게 데이터 입력을 요구하면서 멈춰있는 상황이라고 할 수 있다.

 

입력을 대기하는 의미로 ( | )모양의 커서가 깜빡거리곤 하는데, 커서는 프로그램에 따라 다를 수 있다.

 

이제 입력하는 프로그램에 데이터를 입력할텐데, 원하는 데이터를 입력하고 Enter를 누르면 입력이 된다.

데이터를 입력하세요> 안녕 #[Enter]
'안녕'    # 출력값

 

사용자가 입력한 내용은 input() 함수의 결과로 나오며, 이렇게 함수의 결과로 나오는 값리턴값이라고 한다.

 

리턴값이 나오는 원리로 input() 함수의 결과로 나오는 값을 다른 변수에 대입하여 사용할 수 있다.

test = input("데이터를 입력하세요> ")

print(test)

실행결과

데이터를 입력하세요> 안녕 #[Enter]
안녕

 


  input() 함수의 입력 자료형

앞서 예시로 input() 함수를 사용하여 test라는 변수에 값을 입력했다.

 

이때 test의 자료형을 확인해보면,

print(type(test))

실행결과

<class 'str'>

'안녕'이라는 문자열을 입력했으니 자료형도 문자열이 출력됨을 알 수 있다.

 

똑같은 원리로 숫자를 입력하면 숫자가 출력됨을 생각해볼 수 있다.

number = input("숫자를 입력하세요> ")

print(number)

실행결과

숫자를 입력하세요> 12345 #[Enter]
12345

 

하지만 자료형을 확인해보면 문자열이 출력된다.

print(type(number))

실행결과

<class 'str'>

 

즉, input() 함수는 어떠한 데이터를 입력해도 자료형은 문자열 자료형임을 알 수 있다.

 

따라서 입력을 받은 값과 숫자를 더하는 코드를 작성할 때와 같은 경우 오류를 발생시키기 쉬우니 주의하자.

이는 앞서 다룬 적 있듯이 파이썬은 문자열은 문자열끼리, 숫자는 숫자끼리 연산해야 하기 때문이다.

 


[ 문자열을 숫자로 바꾸기 ]

input() 함수의 입력 자료형은 항상 문자열로 입력되기 때문에 숫자 연산을 하기 위해서는 숫자형으로 변환을 해야 한다.

이렇게 자료형을 변환하는 것캐스트(cast)라고 한다.

 

문자열을 숫자로 바꾸는 캐스트 함수는 2가지가 있다.

  • int() 함수 : 문자열을 int(정수) 자료형으로 변환한다.
  • float() 함수 : 문자열을 float(실수) 자료형으로 변환한다.

 

두 변수를 생성하여 각각 숫자를 입력받은 후 더하는 예시를 통해 이를 확인해보자.

 

단순히 값을 입력받은 후 더하면,

str_a = input('a에 숫자를 입력해주세요> ')
str_b = input('b에 숫자를 입력해주세요> ')
print(str_a + str_b)

실행결과

a에 숫자를 입력해주세요> 123 #[Enter]
b에 숫자를 입력해주세요> 45 #[Enter]
12345

input() 함수가 문자열로 입력을 받기 때문에 + 연산자가 문자열에 적용되는 것처럼 123과 45를 단순히 연결하듯이 사용되었음을 알 수 있다.

 

하지만 int() 함수를 이용해 입력받은 값을 숫자로 바꾸면,

int_a = int(str_a)
int_b = int(str_b)

print(int_a + int_b)

실행결과

168

사칙연산을 하듯이 123과 45를 더하여 168이라는 결과를 출력함을 알 수 있다.

 

 

이번에는 int() 함수와 float() 함수를 이용하여 입력받은 자료형이 바뀌는지 확인해보자.

test = input('숫자를 입력해주세요> ')
int_test = int(test)
float_test = float(test)

print(type(int_test), int_test)
print(type(float_test), float_test)

실행결과

숫자를 입력해주세요> 406 #[Enter]
<class 'int'> 406
<class 'float'> 406.0

각각의 함수들이 정상적으로 작동함을 확인할 수 있다.

 

 

여기서 int() 함수와 float() 함수를 사용할 때 주의해야 할 점이 있다.

 

우선, 숫자가 아닌 자료를 숫자로 변환하고자 하면 오류가 발생한다.

test = input()
print(int(test))

실행결과

hello    # 입력값
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-e7fa93cb5b5e> in <module>()
      1 test = input()
----> 2 print(int(test))

ValueError: invalid literal for int() with base 10: 'hello'

입력한 'hello'라는 문자열은 int() 함수로 변환할 수 없는 값이기 때문이다.

 

또한 소수점이 있는 숫자(실수)를 int() 함수로 변환하려고 하면 오류가 발생한다.

a = '27.406'
print(int(a))

실행결과

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-32809b0a8098> in <module>()
      1 a = '27.406'
----> 2 print(int(a))

ValueError: invalid literal for int() with base 10: '27.406'

 

여기서 헷갈릴 수 있는데, 단순히 '실수형'의 숫자는 int() 함수로 정수 부분만 남겨 변환시킬 수 있다.

b = 27.406
print(int(b))

실행결과

27

 

위에서 사용한 변수 a의 값은 '실수형 형태를 하고 있는 문자열'임을 생각하자.

 

이처럼 int() 함수와 float() 함수는 매개변수로 변환할 수 없는 값이 입력되면 오류(ValueError예외)를 발생시킨다.

 

 

만일 입력받은 값을 바로 숫자로 사용하고 싶을 경우 int() 함수와 float() 함수를 input() 함수와 조합하면 편리하게 사용할 수 있다.

a = int(input('숫자를 입력해주세요> '))
print(type(a), a)

b = float(input('숫자를 입력해주세요> '))
print(type(b), b)

실행결과

숫자를 입력해주세요> 406 #[Enter]
<class 'int'> 406
숫자를 입력해주세요> 27 #[Enter]
<class 'float'> 27.0

 


[ 숫자를 문자열로 바꾸기 ]

문자열을 숫자로 변환할 수 있듯이 숫자를 문자열로 변환할 수도 있다.

 

가장 단순히 자료를 문자열로 바꿀 수 있는 방법은 str() 함수를 이용하는 것이다.

str() 함수의 괄호 안에 다른 자료형의 값을 넣으면 문자열로 변환한다.

a = 406
str_a = str(a)

print(type(a), a)
print(type(str_a), str_a)

실행결과

<class 'int'> 406
<class 'str'> 406

 

댓글