Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tạo số giả ngẫu nhiên trong Python


Nhiều ứng dụng máy tính cần tạo số ngẫu nhiên. Tuy nhiên, không một trong số chúng tạo ra số ngẫu nhiên thực sự. Python, như bất kỳ kỹ thuật lập trình nào khác, sử dụng bộ sinh giả ngẫu nhiên. Tạo số ngẫu nhiên của Python dựa trên thuật toán Mersenne Twister tạo ra số thực độ chính xác 53-bit. Kỹ thuật này nhanh và an toàn luồng (thread-safe) nhưng không phù hợp cho mục đích mật mã học.

Thư viện chuẩn của Python chứa mô-đun random định nghĩa các hàm khác nhau để xử lý ngẫu nhiên hóa.

random.seed() - Hàm này khởi tạo bộ sinh số ngẫu nhiên. Khi mô-đun random được nhập, bộ sinh được khởi tạo với sự giúp đỡ của thời gian hệ thống. Để gieo lại hạt giống (reseed) bộ sinh, hãy dùng bất kỳ đối tượng int, str, bytes hoặc bytearray nào.

random.getstate() - Hàm này cùng với setstate() giúp tái tạo cùng dữ liệu ngẫu nhiên lại và lại. Hàm getstate() trả về trạng thái nội bộ của bộ sinh số ngẫu nhiên.

random.setstate() - Hàm này khôi phục trạng thái nội bộ của bộ sinh.

Các hàm sau xử lý tạo số nguyên ngẫu nhiên:

random.randrange() - Hàm này tạo một số nguyên ngẫu nhiên giữa phạm vi cho trước. Nó có thể nhận ba tham số.

random.randrange(start, stop, step)

Tham số start và step là tùy chọn. Giá trị mặc định của chúng lần lượt là 0 và 1. step xác định khoảng cách giữa các số liên tiếp.

>>> random.randrange(10)
5
>>> random.randrange(10, 20)
17
>>> random.randrange(100, 200, 2)
188

(Lưu ý: Đầu ra của các câu lệnh trên, và cũng phần còn lại của các câu lệnh trong bài viết này có thể không giống nhau vì chúng được tạo ngẫu nhiên)

random.randint() - Hàm này tạo một số nguyên ngẫu nhiên giữa hai tham số. Nó tương tự hàm randrange() không có tham số step. Tham số start là bắt buộc.

>>> random.randint(1, 10)
6
>>> random.randint(100, 200)
134

Các hàm sau xử lý số thực ngẫu nhiên:

random.random() - Hàm này ngẫu nhiên tạo một số thực giữa 0.0 và 1.0.

>>> random.random()
0.668544544081956

random.uniform() - Hàm này trả về số thực ngẫu nhiên giữa hai tham số.

>>> random.uniform(0.5, 1.5)
1.2760281470664903
>>> random.uniform(1, 10)
7.336985794193224
>>> random.uniform(10, 5)
7.817794757786727

Các hàm sau tác động trên các đối tượng chuỗi (sequence) như chuỗi, danh sách hoặc tuple.

random.choice() - Hàm này chọn một phần tử ngẫu nhiên từ chuỗi. Nếu chuỗi rỗng, IndexError được ném ra.

>>> random.choice("Tutorialspoint")
'o'
>>> random.choice(range(10))
2
>>> random.choice([15, 31, 6, 29, 55, 5])
55
>>> random.choice((15, 31, 6, 29, 25, 55))
15

random.choices() - Hàm này chọn nhiều phần tử từ danh sách theo cách ngẫu nhiên. Tham số đầu tiên cho hàm này là chuỗi và tham số thứ hai là số lần chọn.

>>> name = "TutorialsPoint"
>>> random.choices(name, k=2)
['T', 'o']

random.shuffle() - Hàm này sắp xếp lại các phần tử trong một chuỗi có thể thay đổi (mutable) và đặt chúng ngẫu nhiên.

>>> num = [10, 20, 30, 40, 50]
>>> random.shuffle(num)
>>> num
[50, 20, 40, 30, 10]

random.sample() - Hàm này hoạt động với chuỗi bất biến (immutable). Nó trả về danh sách các mục được chọn ngẫu nhiên từ chuỗi để lại chuỗi gốc nguyên vẹn.

>>> name = "TutorialsPoint"
>>> nm = random.sample(name, k=2)
>>> name, nm
('TutorialsPoint', ['i', 'a'])