3.1 Kiểu số: int, float, complex
Python có một số kiểu số, mỗi loại thích hợp cho các nhiệm vụ và xử lý dữ liệu khác nhau. Chúng ta đã nhắc đến các kiểu dữ liệu int, float, complex, cũng như kiểu boolean bool, chúng là một subclass của số nguyên. Bây giờ ta đi vào chi tiết từng loại một.
int (Số nguyên):
Đây có lẽ là kiểu số được sử dụng nhiều nhất trong Python. Số nguyên có thể là dương hoặc âm và không có dấu thập phân. Python hỗ trợ độ chính xác tùy ý, điều này có nghĩa là, gần như không có giới hạn nào cho kích thước số mà bạn có thể xử lý, ngoại trừ các giới hạn bộ nhớ máy của bạn.
float (Số thực):
Những con số này được sử dụng để biểu diễn các số thực và có thể chứa dấu thập phân. Python thực hiện số thực theo tiêu chuẩn IEEE 754 với độ chính xác double, điều này cho độ chính xác khoảng 15 chữ số thập phân sau dấu chấm.
complex (Số phức):
Số phức có phần thực và phần ảo. Cả hai đều được biểu diễn bằng số thực. Trong Python, để chỉ định phần ảo, sử dụng hậu tố j hoặc J. Ví dụ, một số phức có thể được tạo ra như thế này:
complex_number = 3 + 5j
bool (Giá trị boolean):
Trong Python, True và False là các phiên bản chuyên biệt của số nguyên và hoạt động như 1 và 0. Điều này cho phép chúng được sử dụng trong các phép toán số học và các biểu thức toán học khác.
Phép toán số học:
Python hỗ trợ tất cả các phép toán số học cơ bản, bao gồm cộng, trừ, nhân, chia, chia nguyên, lấy phần dư và lũy thừa. Ví dụ:
- Cộng: 3 + 2
- Trừ: 5 - 2
- Nhân: 2 * 3
- Chia: 7 / 2
- Chia nguyên: 7 // 2
- Lấy dư: 7 % 2
- Lũy thừa: 2 ** 3
Ép kiểu:
Chúng ta đã nói về ép kiểu (hoặc chuyển đổi) các kiểu. Có thể chuyển đổi số từ kiểu này sang kiểu khác bằng các hàm ép kiểu, như int(), float() và complex().
Một số vấn đề về chuyển đổi kiểu số đã được chúng ta thảo luận trước đây, các vấn đề khác sẽ được xem xét chi tiết hơn trong các bài giảng sau.
3.2 Số giả ngẫu nhiên
Đôi khi lập trình viên gặp phải những nhiệm vụ có vẻ đơn giản, chẳng hạn: "chọn một bộ phim ngẫu nhiên để xem buổi tối từ một danh sách nhất định", "chọn người chiến thắng trong xổ số", "trộn danh sách bài hát khi lắc điện thoại thông minh", "chọn một số ngẫu nhiên để mã hóa tin nhắn". Lúc này luôn có câu hỏi rất hợp lý: làm thế nào để lấy được số ngẫu nhiên đó?
Lấy được số "ngẫu nhiên" thực sự khá khó. Đến mức máy tính được tích hợp các bộ xử lý đồng bộ toán học đặc biệt có khả năng tạo ra những số như vậy, với việc tuân thủ tất cả các yêu cầu về "ngẫu nhiên thực sự".
Vì vậy, lập trình viên đã nghĩ ra giải pháp của họ - số giả ngẫu nhiên. Số giả ngẫu nhiên là một chuỗi nhất định, các số trong đó thoạt nhìn có vẻ ngẫu nhiên, nhưng một chuyên gia khi phân tích kỹ càng có thể tìm thấy một số quy luật nhất định. Đối với mã hóa các tài liệu bí mật, những số này không phù hợp, nhưng để mô phỏng việc ném xúc xắc trong trò chơi là khá ổn.
Có nhiều thuật toán để tạo ra dãy số giả ngẫu nhiên và hầu hết chúng đều tạo ra số ngẫu nhiên tiếp theo dựa trên số trước đó và một số số trợ khác.
Ví dụ, chương trình dưới đây sẽ in ra màn hình 1000 số không trùng nhau:
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)
Chúng ta đang nói về không phải là số giả ngẫu nhiên, mà là một chuỗi số như vậy. Bởi vì chỉ nhìn vào một số thì không thể hiểu nó có ngẫu nhiên hay không.
Số ngẫu nhiên có thể được lấy bằng nhiều cách khác nhau:
def get_random_number():
return 4 # đây chắc chắn là số ngẫu nhiên (z đã đổ ra bằng xúc xắc), xem "Câu chuyện cười về xúc xắc"
3.3 Thư viện random
Trong Python có một thư viện random tích hợp, rất thú vị để bạn làm việc cùng. Như bạn có thể đoán được từ tên của nó, với thư viện này, bạn có thể tạo ra số [giả]ngẫu nhiên.
Thư viện random, mặc dù được tích hợp, vẫn là một thư viện riêng biệt, do đó trước khi sử dụng nó, cần phải import vào mã của chúng ta. Điều này được thực hiện với từ khóa import. Ví dụ:
import random
Trong thư viện random có nhiều phương thức thú vị, nhưng hôm nay chúng ta chỉ xem xét hai trong số đó: phương thức random() và phương thức randint(). Chúng thực hiện các nhiệm vụ tương tự nhau nhưng khác nhau:
Phương thức random.random():
Phương thức này trả về một số thực ngẫu nhiên nằm giữa 0.0 và 1.0. Các số được tạo ra đồng đều trong khoảng này. Điều này có nghĩa là mỗi số trong khoảng đều có khả năng lựa chọn như nhau.
import random
probability = random.random()
print("Xác suất ngẫu nhiên:", probability)
Phương thức random.randint(a, b):
Hàm này trả về số nguyên ngẫu nhiên trong khoảng từ a đến b bao gồm cả hai đầu mút. Khác với random.random(), trả về số thực ngẫu nhiên trong khoảng từ 0 đến 1, randint() được sử dụng khi cần chọn một số nguyên. Ví dụ, random.randint(1, 10) có thể trả về bất kỳ số nguyên nào từ 1 đến 10, bao gồm cả hai giá trị đầu cuối.
import random
dice_roll = random.randint(1, 6) # Giả lập ném xúc xắc
print("Số xuất hiện:", dice_roll)
Đây là những phương thức rất hữu ích và thú vị, vì vậy hãy sử dụng chúng thoải mái nhé.
3.4 Thư viện math
Ừm, khi đã đi sâu vào vấn đề này, hãy để tôi giới thiệu với bạn một thư viện thú vị khác. Đó là thư viện math. Trong đó chứa các hàm toán học cơ bản và các hằng số, chẳng hạn như số π và e.
Và cũng như thư viện random, nó cần phải được import trước khi sử dụng:
import math
Dưới đây là bảng với các hàm và hằng số chính của thư viện math trong Python:
| Hàm/Hằng số | Mô tả |
|---|---|
| math.pi | Hằng số π, xấp xỉ bằng 3.14159 |
| math.e | Cơ số của logarit tự nhiên, xấp xỉ bằng 2.71828 |
| math.sqrt(x) | Trả về căn bậc hai của x |
| math.exp(x) | Trả về e mũ x |
| math.log(x[, base]) | Trả về logarit của x với cơ số base, nếu có; nếu không, trả về logarit tự nhiên. |
| math.cos(x) | Trả về cosin của x, với x được chỉ định bằng radian |
| math.sin(x) | Trả về sin của x, với x được chỉ định bằng radian |
| math.tan(x) | Trả về tang của x, với x được chỉ định bằng radian |
| math.ceil(x) | Làm tròn lên tới số nguyên gần nhất |
| math.floor(x) | Làm tròn xuống tới số nguyên gần nhất |
| math.factorial(x) | Trả về giai thừa của x |
Dù bạn không quá yêu thích toán học và không định sử dụng các hàm này trong 10 năm tới, nhưng ít nhất cũng có ba hàm rất hữu ích:
sqrt()— căn bậc hai của sốceil()— làm tròn lên tới số nguyên gần nhấtfloor()— làm tròn xuống tới số nguyên gần nhất
Ví dụ:
import math
number = 9.7
rounded_up = math.ceil(number) # Làm tròn lên, kết quả 10
rounded_down = math.floor(number) # Làm tròn xuống, kết quả 9
print("Số làm tròn lên:", rounded_up)
print("Số làm tròn xuống:", rounded_down)
GO TO FULL VERSION