2014-04-09 32 views
5

là có cách nào để chương trình chọn một số ngẫu nhiên trong khoảng từ 1 đến 1.000 mà không nhập 'ngẫu nhiên'?Ngẫu nhiên int mà không nhập 'ngẫu nhiên'

Trợ giúp sẽ được nhiều người đánh giá cao.

+0

Tại sao bạn không thể nhập 'ngẫu nhiên'? Bạn có thể bắt đầu viết mã tạo số ngẫu nhiên của riêng bạn, nhưng tại sao bạn? – Marius

+1

Chắc chắn, chỉ cần viết PRNG của riêng bạn hoặc có thể đọc từ hệ thống (ví dụ:/dev/random). –

+2

Tất nhiên có: http://xkcd.com/221/ (trivially dịch sang Python). Nói cách khác, bạn sẽ có nhiều khả năng để có được câu trả lời hữu ích nếu bạn nói với chúng tôi nơi bạn đang đi với điều này. – NPE

Trả lời

0

giả sử bạn muốn số nguyên.

import numpy as np 
np.random.randint(1,1000) 
+0

Hey, tôi quên đề cập đến tôi không thể nhập bất cứ điều gì. Đây là một trong những quy tắc cho bài tập về nhà này. BTW, đây là một phần nhỏ của bài tập về nhà, nó không giống như tôi yêu cầu các bạn viết chương trình cho tôi. SO xin đừng giận tôi :) – user3353391

+3

Giáo viên của bạn là một thằng ngốc. Bạn có thể nói với họ tôi đã nói như vậy. Khi trở lại của họ được bật, superglue nút nhân của máy tính của họ. Và nói "hy vọng bạn sống theo những gì bạn rao giảng". – Back2Basics

+0

Bạn có thể tạo một thiết lập kiểu bánh xe roulette, nơi bạn có chúng chạm vào thanh khoảng trắng và đọc mili giây từ đồng hồ máy tính. – Back2Basics

3

Dựa trên random source code:

def randint(a, b): 
    "Return random integer in range [a, b], including both end points." 
    return a + randbelow(b - a + 1) 

def randbelow(n): 
    "Return a random int in the range [0,n). Raises ValueError if n<=0." 
    if n <= 0: 
     raise ValueError 
    k = n.bit_length() 
    numbytes = (k + 7) // 8 
    while True: 
     r = int.from_bytes(random_bytes(numbytes), 'big') 
     r >>= numbytes * 8 - k 
     if r < n: 
      return r 

def random_bytes(n): 
    "Return n random bytes" 
    with open('/dev/urandom', 'rb') as file: 
     return file.read(n) 

Ví dụ:

print(randint(1, 1000)) 

Bạn cũng có thể implement random_bytes() using PRNG.