이번에는 변수와 입력 방법에 대해 알아봅시다.
[ 변수 만들기/사용하기 ]
변수를 쉽게 생각하면 단어의 의미 그대로 '변할 수 있는 자료'이다.
수학에서 원주율인 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
'Python > Python 공부 정리' 카테고리의 다른 글
[파이썬 독학] 2.4. 숫자와 문자열의 다양한 기능 (0) | 2022.06.25 |
---|---|
[파이썬 독학] 2.2. 숫자 (0) | 2022.05.28 |
[파이썬 독학] 2.1. 자료형과 문자열 (0) | 2022.05.08 |
[파이썬 독학] 1. 파이썬 시작하기 (0) | 2022.04.25 |
댓글