Python:简单函数中的意外打印值

2024-05-18 19:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个简单的仲裁函数,它根据随机无序列表中的第一个元素打印出一个值(1)。你知道吗

看下面的代码:我创建一个变量并将其设置为1,然后创建一个小列表(1,2,3),然后洗牌列表。其思想是,如果该列表的第一个元素(洗牌后)是1或2,则打印“correct”的值,但如果列表的第一个元素恰好是3,则将“correct”设置为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()

Tags: 函数代码元素列表ifvaluedefrandom
2条回答

您的函数是递归的,因此当您再次调用该函数以避免打印时,该函数仍将完成。如果您添加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()

编辑:语法 编辑:示例

仅仅调用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()

相关问题 更多 >

    热门问题