0에서 100 사이의 난수를 생성하는 Python 함수가 있습니다.
def get_next_number():
value = randint(0,100)
이 함수를 호출 할 때마다 난수를 반환해야하지만 그 숫자는 마지막으로 반환 된 n 개의 난수 중 하나가 될 수 없습니다 (이 예에서는 5라고하겠습니다).
여기 예시들이 있습니다 :
55, 1, 67, 12, 88, 91, 100, 54 (반환 된 마지막 5 개 숫자에 중복이 없으므로 괜찮습니다)
77, 42, 2, 3, 88, 2 ... (함수가 2의 난수를 얻었을 때, 2는 이미 3 개의 숫자가 이전에 반환되었으므로 다시 시도해야합니다)
89, 23, 29, 81, 99, 100, 6, 8, 23 ... (23 번이 5 번 이상 발생했기 때문에 괜찮습니다)
이를 수행하기 위해 임의 함수에 내장 된 것이 있습니까?
그것을 생각 다른 방법 내내 .
난수를 생성 한 다음 이전에 이미 생성되었는지 확인 하는 대신 먼저 중복되지 않는 번호 집합을 생성하여 하나씩 선택하여 중복 번호를 생성 할 가능성을 제거 할 수 있습니다.
또한 마지막으로 생성 된 5 개 항목을 추적하여 선택한 항목에서 제외해야합니다.
다음과 같이하면됩니다.
s = set(range(0, 100))
last5 = []
def get_next_number():
reduced_list = list(s - set(last5))
i = randint(0, len(reduced_list) - 1)
last5.append(reduced_list[i])
if len(last5) > 5:
last5.pop(0)
return reduced_list[i]
테스트하려면 :
result = []
for i in range(0, 5000):
result.append(get_next_number())
print(result)
단계별 설명 :
선택할 숫자 세트 (예 : 0 ~ 99)를 생성하고 마지막으로 선택한 5 개의 숫자를 저장할 빈 목록을 생성합니다.
s = set(range(0, 100))
last5 = []
이 방법에서 마지막으로 선택한 5 개의 숫자를 선택 가능성에서 제외합니다.
reduced_list = list(s - set(last5))
에서 임의의 숫자를 선택하면 reduced_list
에 남아있는 모든 숫자 reduced_list
가 선택에 유효합니다. last5
목록에 번호 추가
i = randint(0, len(reduced_list) - 1) #get any valid index. -1 is needed because randint upperbound is inclusive
last5.append(reduced_list[i]) #the number is as what it pointed by the index: reduced_list[i], append that number to the last 5 list
last5
목록에 이미 구성원이 있는지 확인하십시오 > 5.있는 경우 첫 번째 구성원 을 제거해야합니다 .
if len(last5) > 5:
last5.pop(0)
선택한 회원 반환 :
return reduced_list[i]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다