做6个不同的随机数

2024-10-02 00:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在不太擅长编码,我正在努力改进和学习。我试图写一个随机抽取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)

Tags: or代码in编码数字randomallrandint
3条回答
all = a, b, c, x, y, z

类似的事情会创建一个的元组。所以在执行行时,元组内部有固定值,不能更改。尤其是当你更新你最初用来构造它的变量时,它不会改变。因此,您不能使用all作为最终结果,也不能使用outX元组来检查任何重复项,因为它们是固定的,不会更新。在

为了让代码正常工作,您必须在while循环的每次迭代中重新创建所有这些元组。但总的来说,你会很快注意到有那些显式变量不是一个好主意。在

如果您想继续使用randint,那么您可以一次生成一个数字,并在遇到已经拥有的号码时“重新滚动”:

^{pr2}$

我在这里使用一个list,它是一个可变的数据结构来收集多个值(与元组相比,元组是不可变的)。在

您也可以在这里使用^{},它提供了从一系列数字中获取任意数量的唯一值的更简单的方法:

^{3}$

您可以使用random.sample创建一个生成6个唯一数字的列表,而不是创建6个不同的变量:

import random

nums = random.sample(range(1,100), 6)
print (nums)

Output:
[2,34,5,61,99,3]

random中有一个函数可以做到:

all = random.sample(range(1,101), 6)

如果可能值的列表太大而无法构建,则您的算法可以,但最好使用列表:

^{pr2}$

如果您的列表比6大很多,可以考虑使用set而不是list。在

更新:实际上,random.sample()非常聪明,使用python3,以下代码:

^{3}$

工作正常,而这个:

all = random.sample(list(range(1,10000000001)), 6)

吞噬了我所有的记忆。在

如果您使用python2,您可以使用xrange而不是{}来获得相同的效果。在

相关问题 更多 >

    热门问题