2014-04-09 3 views
5

'random'을 가져 오지 않고 프로그램이 1에서 1,000 사이의 난수를 선택하게하는 방법은 무엇입니까?'random'을 가져 오지 않고 무작위 int

도움을 많이 주시면 감사하겠습니다.

+0

왜 '랜덤'을 가져올 수 없습니까? 자신의 난수 생성 코드를 작성할 수는 있지만 그 이유는 무엇입니까? – Marius

+1

물론, 직접 PRNG를 작성하거나 시스템 (예 :/dev/random)에서 읽을 수 있습니다. –

+2

물론 있습니다 : http://xkcd.com/221/ (파이썬으로 쉽게 번역됨). 달리 말하면, 당신이 어디로 갔는지를 말하면 유용한 답을 얻을 가능성이 더 큽니다. – NPE

답변

0

정수를 원한다고 가정하십시오. random source code을 바탕으로

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

이봐, 나는 아무것도 가져올 수 없다는 걸 잊어 버렸다. 이것은이 숙제의 규칙 중 하나입니다. BTW, 이것은 숙제의 작은 부분입니다, 나는 너희들이 나를 위해 프로그램을 작성하도록 요청하는 것과 다르지 않다. 그러니 제발 화를 내지 마세요 :) – user3353391

+3

선생님은 바보입니다. 내가 그렇게 말한 걸 그들에게 말할 수 있습니다. 등을 돌렸을 때 계산기의 곱셈 버튼에 초초를 붙입니다. 그리고 "당신이 설교하는대로 살기를 바랍니다"라고 말하십시오. – Back2Basics

+0

당신은 스페이스 바를 치고 컴퓨터 시계에서 밀리 세컨드 (milliseconds)를 읽도록 룰렛 휠 셋업을 만들 수 있습니다. – 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) 

예 :

print(randint(1, 1000)) 

당신 수도 implement random_bytes() using PRNG.

관련 문제