在python

时间:2018-11-01 16:15:11

标签: python

所以我想做的是为游戏策划者创建5个数字的列表,我想消除所有重复!问题在于代码有时会创建一个包含3个数字(或4个或有时5个)的列表,这似乎是随机的。

我还要指出,我们不允许在grandom.sample或random.shuffle中使用

import random

def generatePassword() :
    lis = []
    for i in range(5) :
        #This checks to see if there are duplicate numbers
        r = random.randint(1,9)
        if r not in lis :
            lis.append(r)
        i+=1
    return lis



def main() :
    print(generatePassword())
main()

6 个答案:

答案 0 :(得分:4)

尝试使用带有条件的while循环来检查lis的长度

while len(lis) < 5:

代替您的for循环

答案 1 :(得分:2)

如果您正在寻找有效且速度更快的方法,请使用numpy.random.permutation

import numpy as np
your_list = list(np.random.permutation(np.arange(0,10))[:5])

>>> your_list
[6, 9, 0, 1, 4]

或者,您可以将np.random.choicereplace=False一起使用:

your_list = list(np.random.choice(np.arange(0,10), 5, replace=False)

答案 2 :(得分:2)

函数random.sample可以满足您的要求:

import random

def generatePassword():
    numbers = range(0, 9)
    return random.sample(numbers, 5)

def main() :
    print(generatePassword())
main()

答案 3 :(得分:1)

您不想将随机唯一的整数相加5次;您想要添加随机的唯一整数,直到您的列表包含5个元素。会做到的:

import random

def generatePassword() :
    lis = []
    while len(lis) < 5:
        #This checks to see if there are duplicate numbers
        r = random.randint(1,9)
        if r not in lis :
            lis.append(r)
    return lis

答案 4 :(得分:1)

所以你的问题是: 它不会两次添加相同的数字。但是,由于您使用for i in range(5):,因此它只会重复5次,无论是否添加了唯一的数字。

您需要测量列表的长度,因此它将始终向列表添加5个随机,唯一的数字。

您的代码基本上正确,但是您所要做的就是替换: for i in range(5):,其中:while len(lis) < 5:

请务必删除i += 1。如果不这样做,将导致错误。

代码如下:

import random

def generatePassword() :
    lis = []
    while len(lis) < 5:
        #This checks to see if there are duplicate numbers
        r = random.randint(1,9)
        if r not in lis :
            lis.append(r)
    return lis



def main() :
    print(generatePassword())
main()

答案 5 :(得分:1)

我知道已经有很多答案了,但是这样做的效率略高:

import random
nums=list(range(1, 10))  #generates [1, 2, ...8, 9]
random.shuffle(nums)   #mixes them up randomly
print(nums[:5])   #prints the first 5

希望有帮助!