3.1 숫자 타입: int, float, complex
Python에는 몇 가지 숫자 타입이 있어서, 각각은 다양한 작업과 데이터 처리에 적합해. 이미 int, float, complex 타입에 대해 언급했었고, bool 타입도 있는데, 이는 정수의 서브클래스야. 이제 각 타입을 더 자세히 알아보자.
int (정수):
아마도 Python에서 가장 흔히 사용되는 숫자 타입이지. 정수는 양수나 음수가 될 수 있고, 소수점이 없어. Python은 임의의 정밀도를 지원해, 이 말은 당신의 기계 메모리 제한 외에는 처리할 수 있는 숫자 크기에 거의 제한이 없다는 거야.
float (부동 소수점 숫자):
이 숫자는 실수를 표현하는 데 사용되고 소수점이 포함될 수 있어. Python은 수를 저장할 때 IEEE 754 double-precision 표준을 따르고, 약 15개의 소수점 자리까지의 정밀도를 제공해.
complex (복소수):
복소수는 실수 부분과 허수 부분이 있어. 두 부분 모두 부동 소수점 숫자로 표현돼. Python에서 허수 부분은 j 또는 J 접미사를 사용해. 예를 들어, 복소수를 이렇게 만들 수 있어:
complex_number = 3 + 5j
bool (불리언 값):
Python에서는 True와 False가 정수의 특화된 버전이야. 그래서 1과 0으로 작동해. 이 덕분에 수학적 표현식 및 연산에서 활용 가능해.
산술 연산:
Python에서는 덧셈, 뺄셈, 곱셈, 나눗셈, 몫 구하기, 나머지 구하기, 거듭제곱 등 주요 산술 연산을 지원해. 예를 들어:
- 덧셈: 3 + 2
- 뺄셈: 5 - 2
- 곱셈: 2 * 3
- 나눗셈: 7 / 2
- 몫 구하기: 7 // 2
- 나머지: 7 % 2
- 거듭제곱: 2 ** 3
타입 변환:
우리는 이미 타입 변환(또는 캐스팅)에 대해 이야기했어. 숫자를 다른 타입으로 변환하려면, 예를 들어 int(), float(), complex() 같은 타입 캐스팅 함수를 사용하면 돼.
우리는 이미 숫자 타입 변환에 대한 몇 가지 질문을 다뤘고, 나머지는 다음 강의에서 좀 더 자세히 다룰 거야.
3.2 의사난수
때때로 프로그래머는 간단해 보이는 작업에 직면해: "특정 목록에서 저녁에 볼 영화를 무작위로 선택하기", "복권에서 우승자를 뽑기", "스마트폰을 흔들 때 노래 목록 섞기", "메시지 암호화에 사용할 무작위 숫자 선택하기". 이 때마다 그는 아주 적절한 질문을 던져: 무작위 숫자를 어떻게 얻지?
"진짜" 무작위 숫자를 얻기는 꽤 어려워. 이 때문에 컴퓨터에 특별한 수학적 동처리기를 삽입해서 이런 숫자를 생성하게 해. "진정한 무작위성"에 대한 모든 요구를 충족시키면서.
그래서 프로그래머들은 의사난수라는 솔루션을 생각해냈어. 의사난수는 겉으로 보기에 무작위처럼 보이지만, 전문가가 자세히 분석하면 특정 규칙성을 발견할 수 있는 일련의 수열이야. 비밀 문서를 암호화할 때 이런 숫자는 적합하지 않지만, 게임에서 주사위 던지기를 모방하려면 충분해.
의사난수열 생성 알고리즘이 많이 있고, 거의 모두 이전 숫자와 몇 가지 추가 숫자에 기반해 다음 무작위 숫자를 생성해.
예를 들어, 이 프로그램은 1000개의 중복 없는 숫자를 출력할 거야:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
참고로 우리는 의사난수에 대해 이야기하는 것이 아니라 바로 이런 숫자의 수열에 대해 이야기하고 있어. 단일 숫자만 보고는 그것이 무작위인지 아닌지 알 수 없거든.
무작위 숫자는 여러 방법으로 얻을 수 있어:
def get_random_number():
return 4 # 이건 확실히 무작위 숫자야 (z가 주사위를 던져서 얻었어), "주사위 농담" 참조
3.3 random 라이브러리
Python에는 random 라이브러리가 내장되어 있어, 이와 함께 재미있게 작업할 수 있을 거야. 이미 이름에서 유추했겠지만, 이 라이브러리를 사용해 [의사]무작위 숫자를 생성할 수 있어.
random 라이브러리는 내장되어 있긴 하지만, 여전히 별도의 라이브러리이기 때문에 사용 전에 코드에 연결해야 해. import 키워드를 사용해서 할 수 있어. 예:
import random
random 라이브러리에는 많은 흥미로운 메서드들이 있는데, 오늘은 그 중 두 가지만 살펴볼 거야: random() 메서드와 randint() 메서드. 이들은 비슷하지만 다른 작업을 수행해:
random.random() 메서드:
이 메서드는 0.0과 1.0 사이의 부동 소수점 무작위 숫자를 반환해. 이 범위 내의 모든 숫자는 균등한 선택 가능성을 가집니다.
import random
probability = random.random()
print("무작위 확률:", probability)
random.randint(a, b) 메서드:
이 함수는 a에서 b 사이의 무작위 정수를 반환해. 0에서 1까지의 부동 소수점 무작위 숫자를 반환하는 random.random()과는 달리, randint()는 정수를 선택해야 할 때 사용해. 예를 들어, random.randint(1, 10)는 1에서 10 사이의 모든 정수를 반환할 수 있는데, 양 끝 값도 포함해.
import random
dice_roll = random.randint(1, 6) # 주사위 던지기 시뮬레이션
print("나온 숫자:", dice_roll)
이 메서드들은 매우 유용하고 흥미로운 기능을 제공하니 잘 활용해봐.
3.4 math 라이브러리
이왕 이렇게 된 거, 또 다른 흥미로운 라이브러리를 소개할게. 바로 math 라이브러리야. 여기에는 기본적인 수학 함수와 상수, 예를 들어 π와 e 같은 것들이 있어.
random 라이브러리와 마찬가지로, 사용하기 전에 math 라이브러리를 임포트해야 해:
import math
Python의 math 라이브러리 주요 함수와 상수에 대한 표는 다음과 같아:
| 함수/상수 | 설명 |
|---|---|
| math.pi | 상수 π, 약 3.14159 |
| math.e | 자연 로그의 밑, 약 2.71828 |
| math.sqrt(x) | x의 제곱근을 반환 |
| math.exp(x) | e의 x 제곱 반환 |
| math.log(x[, base]) | base가 지정되면, base로 x의 로그를 반환; 그렇지 않으면, 자연 로그를 반환. |
| math.cos(x) | radian으로 지정된 x의 코사인 값을 반환 |
| math.sin(x) | radian으로 지정된 x의 사인 값을 반환 |
| math.tan(x) | radian으로 지정된 x의 탄젠트 값을 반환 |
| math.ceil(x) | x를 올림하여 가장 가까운 정수로 반환 |
| math.floor(x) | x를 내림하여 가장 가까운 정수로 반환 |
| math.factorial(x) | x의 팩토리얼을 반환 |
수학을 좋아하지 않거나 가까운 10년 내에 이 함수를 사용할 계획이 없다 하더라도, 여기에는 적어도 세 가지 매우 유용한 기능이 있어:
sqrt()— 숫자의 제곱근ceil()— 올림하여 가장 가까운 정수로 변환floor()— 내림하여 가장 가까운 정수로 변환
예시:
import math
number = 9.7
rounded_up = math.ceil(number) # 올림, 결과는 10
rounded_down = math.floor(number) # 내림, 결과는 9
print("올림된 숫자:", rounded_up)
print("내림된 숫자:", rounded_down)
GO TO FULL VERSION