所以我想做的是为游戏策划者创建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()
答案 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.choice
与replace=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
希望有帮助!