无法使用random.shuffle来工作python random.shuffle()

时间:2017-11-27 17:15:30

标签: python python-3.x random

现在我正在尝试为Monty Hall问题做一段代码

我有一些代码,我正在尝试修复然后增强

这是我坚持的一件事:

我试图通过使用random.shuffle()来改变选择奖项的方式,我必须使用random.shuffle(),而不是其他任何东西。

我该怎么做?

我现在拥有的不适用于此。 如果我放print(random.shuffle(door)),我就不会得到新的输出。 如何让它返回所选的输出

import random
door = ["goat","goat","car"]

choice = int(input("Door 1, 2 or 3? "))

otherDoor = 0
goatDoor = 0

if choice == 1:
    if door[1] == "goat":
        otherDoor = 3 
        goatDoor = 2
    elif door[2] == "goat":
        otherDoor = 2
        goatDoor = 3  
elif choice == 2:
    if door[0] == "goat":
        otherDoor = 3
        goatDoor = 1
    elif door[2] == "goat":
        otherDoor = 1
        goatDoor = 3
elif choice == 3:
 if door[0] == "goat":
     otherDoor = 2
     goatDoor = 1
 elif door[1] == "goat":
     otherDoor = 1
     goatDoor = 2

switch = input("There is a goat behind door " + str(goatDoor) +\
               " switch to door " + str(otherDoor) + "? (y/n) ")

if switch == "y":
    choice = otherDoor

if random.shuffle(door) == "car":
    print("You won a car!")
else:
    print("You won a goat!")

input("Press enter to exit.")

2 个答案:

答案 0 :(得分:1)

random.shuffle随机播放,这意味着如果您尝试为其输入不存在的输出,它将返回None

由于您说您必须使用shuffle,因此您可以使用random.shuffle(door)对列表进行随机播放,然后从此混洗列表中获取元素,例如:door[0]

答案 1 :(得分:0)

来自python3 documentation of the random module

  

random.shuffle(x [,random])   将序列x随机移动。

'到位'意味着该函数正在用一个不同的变量替换变量x(在您的情况下,' door'),该变量具有与之前相同的值但是它们的顺序被洗牌。它没有返回,它只是修改了你给它的变量,这就是你的print语句显示“无”的原因。

如果您必须使用random.shuffle,则只需在您将其改组后选择一个元素(即random.shuffle(door)然后print(door[0]))。

但是,如果要选择其他功能,那么random.sample(door,1)可能会更简单(random.sample here的文档)。