Python 기초

문자열 <-> 숫자

프로그래밍에서는 문자열과 숫자를 분리하여 생각해야 합니다. 문자열(string)은 문자들의 모임입니다.

파이썬에서는 작음따옴표(')를 사용하여 문자열을 표시합니다.

예를 들어 사용자가 키보드로 "100" 이라고 입력하면 이것은 문자열 "100"이 됩니다.

문자열을 이루는 각각의 글자들이 따로 따로 메모리에 저장됩니다.

 

파이썬에서 따옴표를 붙이지 않고 그냥 100이라고 쓰면 이것은 숫자 100을 의미합니다.

숫자 100은 정수 100인데 2진수로 변환되어 메모리에 저장됩니다. 즉 2진수 0110 0100 로 변환되어 메모리에 저장됩니다.

 

숫자 100과 문자열 "100"은 어떤 차이가 있을까요? 유사해보이지만 컴퓨터에서는 이것을 상당히 다르게 처리합니다.

우리가 조건식을 만들 때도 문자열과 숫자를 구별해야 합니다. 예를 들어 if문에서 변수의 값을 아래와 같이 비교한다고 합시다.

number = 100

if (number == 100):
	print("숫자 100 입니다.")

 

<실행 결과>

숫자 100 입니다.

 

이때는 별 문제없이 실행됩니다. 하지만 이번에 변수 number에 문자열 '100'을 저장하고 동일한 코드를 실행하여 봅시다.

number = 100

if (number == '100'):
	print("숫자 100 입니다.")

 

<실행 결과>


 

이번에는 print 문장이 실행되지 않았는데 그 이유는 파이썬이 따옴표로 붙은 숫자는 문자열로 취급하기 때문입니다.

 

파이썬에는 문자열을 숫자로 바꿔주는 함수가 있는데 아래의 int() 함수를 사용하면 문자열을 숫자로 변환할 수 있습니다.

아래의 코드를 대화형 Python에서 실행하여 봅시다. (>>>은 제외하고 입력하시면 됩니다.)

>>> number = int("100")
>>> number

 

<실행 결과>

출력 결과가 100이므로 정수임을 알 수 있습니다.

 

만약 역으로 숫자를 문자열로 변환하려면 str() 함수를 이용하면 됩니다.

아래의 코드를 대화형 Python에서 실행하여 봅시다. (>>>은 제외하고 입력하시면 됩니다.)

>>> number = 100
>>> s = str(number)
>>> s

 

<실행 결과>

출력 결과가 '100' 이므로 문자열임을 알 수 있습니다.

 

만약 소수점이 있는 무자열을 실수로 변환하려면 float() 함수를 사용하여야 합니다.

s = "3.141592"
print(float(s))

 

<실행 결과>

3.141592

 

위의 예제에서 int()를 사용하면 오류가 발생합니다.

s = "3.141592"
print(int(s))

 

<실행 결과>

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

 

도전 과제

1. 어느 날 봉민이는 계산기를 읽어보려 도형의 면적을 계산하고자 파이썬 프로그램을 만들기로 하였습니다.

사용자가 선택하는 도형의 면적을 계산하는 프로그램을 작성하여 봅시다.

 

<실행 결과>

  • 사각형의 가로와 세로를 입력했을 때
도형을 입력하세요 (1: 사각형, 2: 삼각형, 3: 원) : 1
가로 : 10
세로 : 20
면적 =  200
  • 원의 반지름을 입력했을 때 
도형을 입력하세요 (1: 사각형, 2: 삼각형, 3: 원) : 3
반지름 : 5
면적 =  78.5398

 


2. 사용자로부터 2개의 사각형의 좌표를 입력 받아 2개의 사각형이 겹치는지를 검사하는 프로그램을 만들어 봅시다.

 

HINT

하나의 사각형은 왼쪽 상단 좌표와 오른쪽 하단의 좌표로 정의됩니다. 2개의 사각형이 (P1, P2) 와 (P3, P4) 로 정의되어있다고 가정합시다.

2개의 사각형이 겹치는 경우는 아주 많으므로 반대로 두 사각형이 겹치지 않을 조건을 생각하는 것이 좋습니다.

하나의 사각형이 다른 사각형의 위에 있거나 아래에 있거나, 왼쪽에 있거나 오른쪽에 있으면 두 사각형은 겹치지 않습니다.

이 조건의 앞에 not을 붙이면 우리가 원하는 조건이 됩니다. 이것을 수식으로 만들면 아래와 같습니다.

! (P2.y < P3.y || P1.y > P4.y || P2.x < P3.x || P1.x > P4.x)

 

<실행 결과>

  • P1(10, 10), P2(20, 20), P3(15, 15), P4(30, 30)을 입력했을 때
첫 번째 사각형의 P1.x = 10
첫 번째 사각형의 P1.y = 10
첫 번째 사각형의 P2.x = 20
첫 번째 사각형의 P2.y = 20
첫 번째 사각형의 P3.x = 15
첫 번째 사각형의 P3.y = 15
첫 번째 사각형의 P4.x = 30
첫 번째 사각형의 P4.y = 30
두 개의 사각형이 겹칩니다