制作 6 个不同的随机数
Making 6 different random Numbers
我现在不太擅长编码,我正在努力改进和学习。 ATM 我试图编写一个随机选择 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)
像这样:
random.sample(range(1,100), 6)
random
中有一个函数可以做到这一点:
all = random.sample(range(1,101), 6)
如果可能值的列表太大而无法构建,那么您的算法没问题,但最好使用列表:
all = []
while len(all) < 6:
x = random.randint(1, 10000000)
if not x in all:
all.append(x)
如果您的列表比 6
大得多,您可以考虑使用 set
而不是 list
。
更新: 实际上,random.sample()
非常聪明,使用 python3 代码:
all = random.sample(range(1,10000000001), 6)
工作正常,而这个:
all = random.sample(list(range(1,10000000001)), 6)
吞噬了我所有的记忆。
如果您使用 python2,您可以使用 xrange
而不是 range
来获得相同的效果。
您可以使用 random.sample
:
创建一个生成 6 个唯一数字的列表,而不是创建 6 个不同的变量
import random
nums = random.sample(range(1,100), 6)
print (nums)
Output:
[2,34,5,61,99,3]
all = a, b, c, x, y, z
类似的事情会创建一个 值 的元组。因此,在该行执行时,该元组内部具有固定值且无法更改。当您更新最初用于构造它的变量之一时,它尤其不会改变。因此,您不能使用 all
作为最终结果,也不能使用 outX
元组来检查任何重复项,因为它们是固定的并且不会更新。
为了让您的代码正常工作,您必须在 while 循环的每次迭代中重新创建所有这些元组。但总的来说,您会很快注意到使用这些显式变量并不是一个好主意。
如果你想继续使用randint
,那么你可以一次只生成一个号码,当你遇到一个你已经拥有的号码时“重新滚动”:
numbers = []
while len(numbers) < 6:
num = random.randint(1, 100)
if num not in numbers:
numbers.append(num)
我在这里使用了一个列表,它是一个可变的数据结构来收集多个值(与不可变的元组相比)。
您也可以在此处使用 random.sample
,它提供了一种更简单的方法来从数字范围内获取任意数量的唯一值:
numbers = random.sample(range(1, 100), 6)
我现在不太擅长编码,我正在努力改进和学习。 ATM 我试图编写一个随机选择 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)
像这样:
random.sample(range(1,100), 6)
random
中有一个函数可以做到这一点:
all = random.sample(range(1,101), 6)
如果可能值的列表太大而无法构建,那么您的算法没问题,但最好使用列表:
all = []
while len(all) < 6:
x = random.randint(1, 10000000)
if not x in all:
all.append(x)
如果您的列表比 6
大得多,您可以考虑使用 set
而不是 list
。
更新: 实际上,random.sample()
非常聪明,使用 python3 代码:
all = random.sample(range(1,10000000001), 6)
工作正常,而这个:
all = random.sample(list(range(1,10000000001)), 6)
吞噬了我所有的记忆。
如果您使用 python2,您可以使用 xrange
而不是 range
来获得相同的效果。
您可以使用 random.sample
:
import random
nums = random.sample(range(1,100), 6)
print (nums)
Output:
[2,34,5,61,99,3]
all = a, b, c, x, y, z
类似的事情会创建一个 值 的元组。因此,在该行执行时,该元组内部具有固定值且无法更改。当您更新最初用于构造它的变量之一时,它尤其不会改变。因此,您不能使用 all
作为最终结果,也不能使用 outX
元组来检查任何重复项,因为它们是固定的并且不会更新。
为了让您的代码正常工作,您必须在 while 循环的每次迭代中重新创建所有这些元组。但总的来说,您会很快注意到使用这些显式变量并不是一个好主意。
如果你想继续使用randint
,那么你可以一次只生成一个号码,当你遇到一个你已经拥有的号码时“重新滚动”:
numbers = []
while len(numbers) < 6:
num = random.randint(1, 100)
if num not in numbers:
numbers.append(num)
我在这里使用了一个列表,它是一个可变的数据结构来收集多个值(与不可变的元组相比)。
您也可以在此处使用 random.sample
,它提供了一种更简单的方法来从数字范围内获取任意数量的唯一值:
numbers = random.sample(range(1, 100), 6)