我现在不太擅长编码,我正在努力改进和学习。我试图写一个随机抽取6个不重复的数字的代码,但我失败了。我该怎么办?在
import random
a = random.randint(1, 100)
b = random.randint(1, 100)
c = random.randint(1, 100)
x = random.randint(1, 100)
y = random.randint(1, 100)
z = random.randint(1, 100)
outa = b, c, x, y, z
outb = a, c, x, y, z
outc = a, b, x, y, z
outx = a, b, c, y, z
outy = a, b, c, x, z
outz = a, b, c, x, y
all = a, b, c, x, y, z
while a in outa or b in outb or c in outc or x in outx or y in outy or z in outz:
if a in outa:
a = random.randint(1,100)
elif b in outb:
b = random.randint(1,100)
elif c in outc:
c = random.randint(1,100)
elif x in outx:
x = random.randint(1,100)
elif y in outy:
y = random.randint(1,100)
elif z in outz:
z = random.randint(1,100)
print(all)
类似的事情会创建一个值的元组。所以在执行行时,元组内部有固定值,不能更改。尤其是当你更新你最初用来构造它的变量时,它不会改变。因此,您不能使用
all
作为最终结果,也不能使用outX
元组来检查任何重复项,因为它们是固定的,不会更新。在为了让代码正常工作,您必须在while循环的每次迭代中重新创建所有这些元组。但总的来说,你会很快注意到有那些显式变量不是一个好主意。在
如果您想继续使用
^{pr2}$randint
,那么您可以一次生成一个数字,并在遇到已经拥有的号码时“重新滚动”:我在这里使用一个list,它是一个可变的数据结构来收集多个值(与元组相比,元组是不可变的)。在
您也可以在这里使用^{} ,它提供了从一系列数字中获取任意数量的唯一值的更简单的方法:
^{3}$您可以使用
random.sample
创建一个生成6个唯一数字的列表,而不是创建6个不同的变量:在
random
中有一个函数可以做到:如果可能值的列表太大而无法构建,则您的算法可以,但最好使用列表:
^{pr2}$如果您的列表比
6
大很多,可以考虑使用set
而不是list
。在更新:实际上,
^{3}$random.sample()
非常聪明,使用python3,以下代码:工作正常,而这个:
吞噬了我所有的记忆。在
如果您使用python2,您可以使用}来获得相同的效果。在
xrange
而不是{相关问题 更多 >
编程相关推荐