Viết hàm sinh ra n số ngẫu nhiên duy nhất được sắp xếp trong Python
Để tạo một danh sách các số ngẫu nhiên không trùng nhau và sắp xếp chúng theo thứ tự giảm dần, bạn cần đảm bảo rằng các số trong danh sách là duy nhất.
Sau đây là code mẫu bạn có thể tham khảo:
import random
def generate_unique_random_numbers(n, b):
if n > b:
raise ValueError("n cannot be greater than b, as we cannot sample more unique numbers than the range.")
return sorted(random.sample(range(1, b + 1), n), reverse=True)
# Ví dụ sử dụng
n = 5 # số lượng số ngẫu nhiên
b = 10 # phạm vi từ 1 đến b
unique_random_numbers = generate_unique_random_numbers(n, b)
print(unique_random_numbers)
Trong đoạn mã Python trên, các số ngẫu nhiên không trùng nhau được tạo ra nhờ sử dụng hàm random.sample()
. Dưới đây là giải thích chi tiết về cách thức hoạt động và lý do tại sao các số không trùng nhau:
Giải thích đoạn mã
- Nhập thư viện
random
import random
Đoạn mã này nhập thư viện random
, cung cấp các hàm để làm việc với số ngẫu nhiên.
- Hàm
generate_unique_random_numbers(n, b)
def generate_unique_random_numbers(n, b):
if n > b:
raise ValueError("n cannot be greater than b, as we cannot sample more unique numbers than the range.")
return sorted(random.sample(range(1, b + 1), n), reverse=True)
- Kiểm tra điều kiện:
if n > b: raise ValueError("n cannot be greater than b, as we cannot sample more unique numbers than the range.")
Hàm này kiểm tra xemn
(số lượng số cần tạo) có lớn hơnb
(giới hạn trên của phạm vi số) không. Nếun
lớn hơnb
, việc lấyn
số khác nhau từ phạm vi1
đếnb
là không thể thực hiện được, và hàm sẽ gây ra lỗi. - Tạo danh sách số ngẫu nhiên:
return sorted(random.sample(range(1, b + 1), n), reverse=True)
random.sample(range(1, b + 1), n)
:range(1, b + 1)
tạo ra một dãy số từ1
đếnb
(bao gồmb
).random.sample(..., n)
chọn ngẫu nhiênn
số khác nhau từ dãy số này.- Hàm
random.sample()
đảm bảo rằng các số được chọn là duy nhất, nghĩa là không có số nào bị trùng lặp trong danh sách kết quả.
- Sắp xếp danh sách:
sorted(..., reverse=True)
- Sau khi danh sách số duy nhất được chọn, nó được sắp xếp theo thứ tự giảm dần bằng cách sử dụng
sorted()
với tham sốreverse=True
.
- Sau khi danh sách số duy nhất được chọn, nó được sắp xếp theo thứ tự giảm dần bằng cách sử dụng
Tại sao các số không trùng nhau
Hàm random.sample()
được thiết kế để chọn một số lượng cụ thể các phần tử duy nhất từ một tập hợp mà không có sự lặp lại. Cụ thể:
- Tính Duy Nhất:
random.sample()
đảm bảo rằng mỗi phần tử trong danh sách kết quả chỉ xuất hiện một lần. Điều này được thực hiện bằng cách chọn ngẫu nhiên các phần tử từ tập hợp mà không cho phép chọn lại các phần tử đã được chọn. - Tập Hợp Gốc: Các phần tử được lấy từ
range(1, b + 1)
tạo ra một tập hợp các số liên tiếp từ1
đếnb
, bao gồm tất cả các số trong khoảng này. - Kích Thước Tập Hợp: Khi chọn
n
số duy nhất từb
số có thể có, hàmrandom.sample()
bảo đảm rằng không có sự trùng lặp vì kích thước của danh sách kết quả (n
) luôn nhỏ hơn hoặc bằng số lượng phần tử có thể chọn (b
).
Ví dụ sử dụng
Khi bạn gọi:
n = 5
b = 10
unique_random_numbers = generate_unique_random_numbers(n, b)
print(unique_random_numbers)
Hàm sẽ trả về một danh sách gồm 5 số ngẫu nhiên không trùng nhau, nằm trong khoảng từ 1 đến 10, và sắp xếp theo thứ tự giảm dần. Ví dụ đầu ra có thể là:
[10, 8, 6, 4, 2]
Trong ví dụ trên, mỗi số trong danh sách là duy nhất và không có số nào bị trùng lặp.