2013-06-07 31 views
7

Tôi có một vấn đề đơn giản. Tôi cần một cách để thực hiện một chức năng mà tạo ra 0 trong p phần trăm trường hợp và 1s trong tất cả các trường hợp khác. Tôi đã thử làm điều đó với random.random() như sau:Khả năng mô hình hóa Python

p = 0.40 

def generate(): 
    x = random.random() 
    if x < p: 
     return 0 
    else: 
     return 1 

Tuy nhiên, điều này dường như không phải là một cách hay. Hay nó là?

+1

Đơn giản, rõ ràng và chính xác. Có gì sai với nó? –

+0

Tôi không biết. Tôi chỉ có một cảm giác kỳ lạ về điều này vì vậy tôi nghĩ tôi nên hỏi. Cảm ơn. – darxsys

+1

Bạn có thể làm 'return x> = p', ngắn hơn, nhưng có thể ít đọc được hơn. – lenz

Trả lời

8

Phương pháp hiện tại của bạn hoàn toàn ổn, bạn có thể xác minh điều này bằng cách thực hiện một vài thử nghiệm với nhiều lần thử. Ví dụ: chúng tôi dự kiến ​​khoảng 600.000 kết quả Đúng với 1000000 lần thử:

>>> sum(generate() for i in range(1000000)) 
599042 
>>> sum(generate() for i in range(1000000)) 
599670 
>>> sum(generate() for i in range(1000000)) 
600011 
>>> sum(generate() for i in range(1000000)) 
599960 
>>> sum(generate() for i in range(1000000)) 
600544 

Có vẻ đúng.

Như đã nêu trong bình luận, bạn có thể rút ngắn thời phương pháp của bạn một chút:

p = 0.40 

def generate(): 
    return random.random() >= p 

Nếu bạn muốn 10 thay vì TrueFalse bạn có thể sử dụng int(random.random() >= p), nhưng điều này là gần như chắc chắn không cần thiết.

Các vấn đề liên quan