2 回答

TA贡献1829条经验 获得超9个赞
上面代码的问题在行中while not my_choice:。请记住,该my_choice变量可以同时包含 0 和None(这两个值都是假的)。
因此,我建议将您的代码更改为这样的内容(如果您不想使用random.shuffle):
def scramble(arr):
arr_len = len(arr)
container = [None]*arr_len
indexes = [i for i in range(arr_len)]
# print(random.choice(indexes)) # works as expected
for i in range(arr_len):
# print("i is {}".format(i))
my_choice = None
# while not my_choice:
while my_choice is None:
my_choice = random.choice(indexes)
print(my_choice) # always None
if my_choice is not None:
indexes[my_choice] = None
container[i] = arr[my_choice]
print(container)
scramble([2,3,4,5,6])
另外,做container[i] = arr[my_choice]而不是container[my_choice] = arr[my_choice]

TA贡献1853条经验 获得超9个赞
出现问题是因为您设置indexes[my_choice]为 None,结果在某些时候indexes列表中的所有元素都是None,而 while 循环变得永无止境。
要打乱列表,您可以使用标准库中的random.shuffle函数:
import random
arr = [2,3,4,5,6]
random.shuffle(arr)
print arr
添加回答
举报