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.

Viết hàm sinh ra n số ngẫu nhiên duy nhất được sắp xếp trong Python

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ã

  1. 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.

  1. 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 xem n (số lượng số cần tạo) có lớn hơn b (giới hạn trên của phạm vi số) không. Nếu n lớn hơn b, việc lấy n số khác nhau từ phạm vi 1 đến b 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 đến b (bao gồm b).
    • random.sample(..., n) chọn ngẫu nhiên n 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.

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 đến b, 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àm random.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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *