学习python我正在实现Bulls and Cows。所以我需要生成一个“随机”数字。我试过这个:
possibilities = range(10)
number = "".join([str(possibilities.pop(random.choice(possibilities))) for i in range(4)])
我认为这是解决问题的一个很好的解决方案,但是在每两次运行中我都会在该行上得到一个IndexError:IndexError: pop index out of range
所以它看起来像random.choice()给了我一个不存在的索引。怎么会? 或者我做出了错误的假设并且问题完全是另外一个问题? 想想看,我还没有得到如何调试这样的语句的线索,关于它的任何指针?
修改
我的第一个解决方案是程序性的:
for i in range(4):
idx = random.choice(possibilities)
number = number + str(possibilities[idx])
del possibilities[idx]
此代码似乎与上面的单行完全相同,但没有任何问题。
答案 0 :(得分:2)
您不是随机选择索引,而是从列表中选择值。如果你从列表中pop
下一个或两个较低的数字后选择9,该怎么办?
相反,请使用random.sample
:
number = "".join(map(str, random.sample(range(10), 4)))