2016-04-02 67 views
0

我创建了一个简单的arbritrary函数,根据随机洗牌列表中的第一个元素打印出一个值(1)。看看下面的代码:我创建一个变量并将其设置为1,然后我创建一个小列表(1,2,3),然后洗牌列表。这个想法是,如果该列表的第一个元素(在shuffle之后)是1或2,则打印'correct'的值,但是如果列表的第一个元素碰巧是3,则将'correct'设置为0,并且然后再次运行该功能。正如你可以从if语句中看到的那样,当'value'设置为0时,我不认为这会被打印出来,因为在打印发生之前函数正在再次运行(chair())。Python:意外的打印值来自一个简单的函数

运行此操作后,我希望找到打印出的5个值为1.问题是,我看到0值也打印出来。这看起来像一个非常简单的功能,我觉得有点愚蠢,因为没有看到为什么会出现这种情况。有任何想法吗?

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 

    print correct 


for i in range(5): 
    chair() 

回答

0

你的函数是递归的,所以当你再次回想功能,避免打印,该功能仍然会完成。如果你添加了一个else语句,你会看到这些零消失。例如:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 
    else: 
     print correct 


for i in range(5): 
    chair() 

编辑:语法 编辑:例如

+0

完美。这一小小的变化正是我所需要的。谢谢。 – Steve

1

只要拨打chair()不会修改correct。你需要做correct = chair()。那个问题是chair()不返回任何东西;它打印它。您应该打印移到功能之外,并返回来代替:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = chair() 

    return correct 


for i in range(5): 
    print chair() 
+0

为什么你就不能'回椅子()',而不是将其分配给'correct' – danidee

+0

@danidee:没有理由。我看不出有任何好处。 – zondo

+0

@danidee这不会基本上使'正确'多余?该值是否仍会返回for循环? – jDo