2

我正在使用 python 3.2,我花了很多时间解决这个问题,但我似乎仍然无法将我的大脑包裹在它周围。

number = random.randint ( x0 ,xn )

我正在生成一个随机数。它的目的是让我的代码每次都以不同的方式出现在我身上。

例如,我写了 10 个文本变量。我已经解决了在每个程序运行时这些变量没有以相同的顺序出现的问题。

我遇到的问题是它们现在每次都随机出现。它每次都从 10 中选择一个,而不是第一次 10 和下一个 9。我似乎不知道如何排除以前的。

thelist = [0]

while i < x
     if number in thelist:
         >>>repeat<<<
     else:
         thelist.append (number)
         if ( number == x0 ):
             >>>something<<<
         elif ( number == x1 ):
             >>>something<<<

这就是我想象的代码的样子,每次你循环一个更多的数字被附加到列表中,所以每次它选择一个已经在列表中的数字时,它都会再次重复循环,直到它使用了所有随机的数字.randint 可以拉。

4

2 回答 2

3

这是一个洗牌功能:

import random

max = 15
x = list(range(max+1))

for i in range(max, 0, -1):
    n = random.randint(0, i)
    x[n], x[i] = x[i], x[n]

这从一个排序的数字列表开始[0, 1, ... max]

然后,它从索引 0 到索引 max 中选择一个数字,并将其与索引 max 交换。

然后,它从索引 0 到索引 max-1 中选择一个数字,并将其与索引 max-1 交换。

依此类推,对于 max-2, max-3, ... 1

正如 yosukesabai 正确指出的那样,这与 call 具有相同的效果random.sample(range(max+1), max+1)。这会从 中选择max + 1唯一的随机值range(max+1)。换句话说,它只是打乱了顺序。文档:http ://docs.python.org/2/library/random.html#random.sample

如果您想要更符合您提出的算法的内容,您可以这样做:

import random

max = 15
x = range(max+1)
l = []

for _ in range(max+1):
    n = random.randint(0,max)
    while n in l:
        n = random.randint(0,max)
    l.append(n)
于 2012-10-31T05:36:52.657 回答
1

根据我对您的描述和示例代码的理解,您希望以随机顺序thelist结束每个整数。如果是这样,您可以使用 非常简单地实现这一点,它将列表打乱:x0xnrandom.shuffle()

import random

x0 = 5
xn = 15

full_range = list(range(x0, xn))
print(full_range)
random.shuffle(full_range)
print(full_range)
于 2012-10-31T06:07:54.200 回答