随机数生成器,如何获得不一样的随机数

时间:2016-03-30 02:27:18

标签: python random

我正在制作一个随机数生成器,但我不希望这些数字再次出现。所以例如

[1,2,3,4]很完美 - [1,1,2,4]不是我想要的,因为一个号码反复出现。

我在这里看过,没有人能解决我正在寻找的问题,按照我的逻辑,这应该有用,但我不知道我做错了什么。

我是python的新手,我看到了一些像我这样的问题,但没有一个问题有同样的问题

import random, timeit
random_num = random.randint(1,10)
cont_randomized_num = random.randint(1,10)
tries = 0
start = timeit.default_timer()
num_guess = 0
stored_numbers = []

while cont_randomized_num != random_num:
    if cont_randomized_num == stored_numbers:
        cont_randomized_num = random.randint(1,10)
    elif cont_randomized_num != stored_numbers:
        print(num_guess)
        stored_numbers.append(cont_randomized_num)
        print(stored_numbers)
        cont_randomized_num = random.randint(1,10)
        tries +=1

print()
print()
stop = timeit.default_timer()
print(random_num)
print('Number of tries:',tries)
print('Time elapsed:',stop)
input('press ENTER to end')

我想我没有说清楚自己。 我想生成一个随机数= ANSWER 我想要生成第二个数字来尝试匹配ANSWER,如果它不是ANSWER然后将它存储在某个地方。如果第二次生成第二个生成的数字并且它与第一次生成的数字相同,我希望它跳过并生成一个新的数字。保持这种状态,直到第二个生成的数字等于生成的第一个数字。

我已经弄明白了(最后)这里的代码并不复杂,与任何答案或评论无关!这就是我一直要求的。

import random
import timeit

start = timeit.default_timer()
stored_numbers = []
cont_random = random.randint(1,10)
random_num = random.randint(1,10)
times_guessed = 0

while random_num not in stored_numbers:
    if cont_random in stored_numbers:
        cont_random = random.randint(1, 10)
    elif cont_random not in stored_numbers:
        print(cont_random)
        stored_numbers.append(cont_random)
        cont_random = random.randint(1, 10)
        times_guessed += 1

print('Answer has been guessed!')
print('Stored numbers',stored_numbers)
print()
print()
stop = timeit.default_timer()
print('Time elapsed:',stop)
print('Times guessed -', times_guessed)
print('The random number:',random_num)
input('Press ENTER to exit')

2 个答案:

答案 0 :(得分:5)

使用random.sample()而不是逐个填充列表(请参阅docs):

  

返回从总体序列中选择的k长度的唯一元素列表。用于无需替换的随机抽样。

random.sample(range(10), 5)
>>>> [5, 9, 1, 6, 3]

random.sample()需要提供一个列表(或任何可迭代的,真的)来从中选择一个子集。在这里,我给它列出了从0开始的前10个数字。

答案 1 :(得分:0)

以下是我的解决方案,如果您想在循环中添加更多代码,可以为其添加更多功能。

import random, timeit

def main():
    tries = 0
    NUMBER_OF_RANDOMS = 4
    stored_numbers = []
    start = timeit.default_timer()

    while len(stored_numbers) != NUMBER_OF_RANDOMS:
        current = random.randint(1,10)
        tries += 1
        if current not in stored_numbers:
            stored_numbers.append(current)

    stop = timeit.default_timer() - start
    print 'Number of tries:', tries
    print 'Time elapsed:', stop
    print stored_numbers

if __name__ == '__main__':
    main()

这会做你想要的吗?我相信你做了不必要的复杂代码。