Skip to main content

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:

  1. Số nguyên (int):
    • Không giới hạn độ lớn
    • Ví dụ: x = 10, y = -5, z = 1_000_000
  2. 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)
  3. Số phức (complex):
    • Dạng a + bj (a: phần thực, b: phần ảo)
    • Ví dụ: d = 3 + 4j

# 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àmChức năngVí dụ
int()→ Số nguyênint(3.9) → 3
float()→ Số thựcfloat(5) → 5.0
complex()→ Số phứccomplex(2, 3) → 2+3j
abs()Trị tuyệt đốiabs(-7) → 7
round()Làm trònround(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ộng5 + 38
-Trừ10 - 46
*Nhân7 * 214
/Chia thực10 / 33.333...
//Chia nguyên10 // 33
%Chia dư10 % 31
**Lũy thừa2 ** 38

# 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ĩaVí dụ
==Bằng5 == 5 → True
!=Khác5 != 3 → True
>Lớn hơn10 > 7 → True
<Nhỏ hơn10 < 7 → False
>=Lớn hơn hoặc bằng5 >= 5 → True
<=Nhỏ hơn hoặc bằng5 <= 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

  1. Dùng //% cho chia số nguyên:

    total_seconds = 3670
    minutes = total_seconds // 60  # 61
    seconds = total_seconds % 60   # 10

  2. 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: ...

  3. Format số đẹp:

    print(f"{1000000:,}")      # 1,000,000
    print(f"{3.1415926:.2f}")  # 3.14

  4. 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: