Bài 14 - Số Trong Python (Python Numbers)
I. Giới Thiệu Các Kiểu Số
Python hỗ trợ 3 kiểu số chính:
- Số nguyên (
int
):- Không giới hạn độ lớn
- Ví dụ:
x = 10
,y = -5
,z = 1_000_000
- Số thực (
float
):- Số dấu phẩy động (15 chữ số chính xác)
- Ví dụ:
a = 3.14
,b = -0.001
,c = 2.5e-3
(0.0025)
- Số phức (
complex
):- Dạng
a + bj
(a: phần thực, b: phần ảo) - Ví dụ:
d = 3 + 4j
- Dạng
# Kiểm tra kiểu dữ liệu
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type(1 + 2j)) # <class 'complex'>
II. Chuyển Đổi Kiểu Số
Hàm | Chức năng | Ví dụ |
---|---|---|
int() | → Số nguyên | int(3.9) → 3 |
float() | → Số thực | float(5) → 5.0 |
complex() | → Số phức | complex(2, 3) → 2+3j |
abs() | Trị tuyệt đối | abs(-7) → 7 |
round() | Làm tròn | round(3.14159, 2) → 3.14 |
# Ép kiểu an toàn
try:
num = float("3.14")
except ValueError:
print("Không thể chuyển đổi")
III. Toán Tử Số Học - Các phép toán thực hiện với số trong Python
Toán tử | Mô tả | Ví dụ | Kết quả |
---|---|---|---|
+ | Cộng | 5 + 3 | 8 |
- | Trừ | 10 - 4 | 6 |
* | Nhân | 7 * 2 | 14 |
/ | Chia thực | 10 / 3 | 3.333... |
// | Chia nguyên | 10 // 3 | 3 |
% | Chia dư | 10 % 3 | 1 |
** | Lũy thừa | 2 ** 3 | 8 |
# Toán tử gán kết hợp
x = 5
x += 3 # Tương đương x = x + 3 → 8
IV. So Sánh Số
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
== | Bằng | 5 == 5 → True |
!= | Khác | 5 != 3 → True |
> | Lớn hơn | 10 > 7 → True |
< | Nhỏ hơn | 10 < 7 → False |
>= | Lớn hơn hoặc bằng | 5 >= 5 → True |
<= | Nhỏ hơn hoặc bằng | 5 <= 3 → False |
# Chuỗi so sánh
print(1 < 2 < 3) # True (1<2 and 2<3)
V. Module Math
import math
# Hằng số
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
# Hàm cơ bản
print(math.sqrt(25)) # 5.0 (căn bậc 2)
print(math.pow(2, 3)) # 8.0 (2^3)
print(math.fabs(-5)) # 5.0 (trị tuyệt đối)
# Làm tròn
print(math.ceil(4.1)) # 5 (làm tròn lên)
print(math.floor(4.9)) # 4 (làm tròn xuống)
# Lượng giác
print(math.sin(math.pi/2)) # 1.0
VI. Số Ngẫu Nhiên
import random
# Số thực ngẫu nhiên [0.0, 1.0)
print(random.random())
# Số nguyên ngẫu nhiên [a, b]
print(random.randint(1, 10))
# Lựa chọn ngẫu nhiên
numbers = [1, 2, 3, 4, 5]
print(random.choice(numbers)) # Chọn 1 phần tử
print(random.sample(numbers, 3)) # Chọn 3 phần tử không trùng
# Xáo trộn list
random.shuffle(numbers)
print(numbers) # [3, 1, 4, 5, 2] (thứ tự ngẫu nhiên)
VII. Tính Toán Chính Xác Cao
1. Module Decimal (cho tài chính)
from decimal import Decimal
# Tránh lỗi làm tròn số thực
print(0.1 + 0.2 == 0.3) # False (!)
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b == Decimal('0.3')) # True
2. Module Fraction (phân số)
from fractions import Fraction
frac1 = Fraction(1, 3) # 1/3
frac2 = Fraction(2, 5) # 2/5
print(frac1 + frac2) # 11/15
VIII. Ứng Dụng Thực Tế
1. Chuyển đổi nhiệt độ
def celsius_to_fahrenheit(c):
return (c * 9/5) + 32
print(celsius_to_fahrenheit(25)) # 77.0
2. Tính lãi suất kép
def compound_interest(principal, rate, years):
return principal * (1 + rate/100) ** years
print(compound_interest(1000, 5, 10)) # 1628.89
3. Kiểm tra số nguyên tố
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
print(is_prime(17)) # True
IX. Best Practices
Dùng
//
và%
cho chia số nguyên:total_seconds = 3670
minutes = total_seconds // 60 # 61
seconds = total_seconds % 60 # 10
So sánh float cẩn thận:
# ❌ Không nên
if 0.1 + 0.2 == 0.3: ...
# ✅ Nên dùng
if abs(0.1 + 0.2 - 0.3) < 1e-9: ...
Format số đẹp:
print(f"{1000000:,}") # 1,000,000
print(f"{3.1415926:.2f}") # 3.14
Xử lý số lớn:
# Số nguyên không giới hạn
big_num = 10**100 # 1 followed by 100 zeros
X. Bài Tập Thực Hành
1. Giải phương trình bậc 2:
def solve_quadratic(a, b, c):
discriminant = b**2 - 4*a*c
if discriminant < 0:
return "Vô nghiệm"
elif discriminant == 0:
x = -b / (2*a)
return f"Nghiệm kép x = {x}"
else:
x1 = (-b + math.sqrt(discriminant)) / (2*a)
x2 = (-b - math.sqrt(discriminant)) / (2*a)
return f"Hai nghiệm: x1 = {x1}, x2 = {x2}"
2. Chuyển đổi hệ cơ số:
def base_converter(number, base=2):
digits = "0123456789ABCDEF"
if number < base:
return digits[number]
else:
return base_converter(number // base, base) + digits[number % base]
print(base_converter(255, 16)) # FF
Tài Nguyên: