2014-04-09 30 views
5

'rasgele' almadan programın 1 ve 1000 arasında rasgele bir sayı seçmesine izin vermenin bir yolu var mı?Rastgele int 'rasgele' aktarmadan

Yardım çok takdir edilecektir. Tamsayılar istediğinizi varsayarak

+0

Neden sadece 'rastgele' içe aktarmıyorsunuz? Kendi rasgele sayı üretme kodunuzu yazmaya başlayabilirsiniz, ama neden yapardınız? – Marius

+1

Elbette, sadece kendi PRNG'nizi yazın veya belki de sistemden okuyun (ör./Dev/random). –

+2

Tabii ki: http://xkcd.com/221/ (önemsizce Python'a çevrildi). Başka bir deyişle, bununla nereye gittiğinizi anlatırsanız, yararlı cevaplar almanız daha olasıdır. – NPE

cevap

0

. random source code dayanarak

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

Hey, hiçbir şeyi ithal edemediğimi söylemeyi unuttum. Bu ev ödevi için kurallardan biri. BTW, bu ödevin küçük bir parçası, sizden programın benim için yazılmasını istemiyorum gibi değil. SO lütfen bana kızma :) – user3353391

+3

Senin öğretmenin bir aptal. Onlara öyle dediğimi söyleyebilirsin. Sırtları döndüğünde, hesap makinelerinin çoğul tuşunu süper yapıştırın. Ve "vaaz ettiğin şeyle yaşadığına inanıyorum" de. – Back2Basics

+0

Oda çubuğuna bastığınız ve bilgisayar saatinden milisaniyeyi okuduğunuz bir rulet tekerleği tipi kurulum yapabilirsiniz. – Back2Basics

3

:

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) 

Örnek:

print(randint(1, 1000)) 

Yapabilirsin de implement random_bytes() using PRNG.