Python:来自简单函数

时间:2016-04-02 23:38:29

标签: python

我创建了一个简单的arbritrary函数,它根据随机洗牌列表中的第一个元素打印出一个值(1)。

查看下面的代码:我正在创建一个变量并将其设置为1,然后我创建一个小列表(1,2,3),然后对列表进行混洗。这个想法是,如果该列表的第一个元素(在shuffle之后)是1或2,则打印'正确'的值,但是如果列表的第一个元素恰好是3,则设置&# 39,正确'为0,然后再次运行该函数。从if语句中可以看出,当' value'设置为0,我不希望打印这个,因为在进行任何打印之前,该功能正在再次运行(chair())。

运行此项后,我希望找到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()

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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()

编辑:语法 编辑:示例