首页 > 解决方案 > Python3 print 语句打印 0 而不是函数的实际返回值

问题描述

我正在做 AOC 2020,我看到 python3 print 语句有些奇怪,我不明白发生了什么。

这个问题是第 6 天第 1 部分,假设计算文件中的一堆字符并基本上找出计算了多少。

这是我下面的代码,当我在 Win 10 和 Python 3.5 的 Pycharm 2020.3 上运行它时,这两个打印语句给出了截然不同的结果:

print(a)行给出了我期望的值,即从 process_customs_data 返回的值。给我 0这print(process_customs_data(customs_data))没有意义不应该打印函数的返回值吗?

就像我改变的额外测试一样total_count =total_count + atotal_count =total_count + process_customs_data(customs_data)两种情况都有效。我可以看到我的总数已正确更新。

在此处输入图像描述

import pprint
from aocd.models import Puzzle
from aocd import submit
import time

def process_customs_data(data):
    pprint.pprint(set(data))

    return len(set(data))

puzzle = Puzzle(year=2020, day=6)

raw = puzzle.input_data
data = raw.splitlines()

total_count = 0
customs_data = ""

for line in data:

    if line == '':
        a = process_customs_data(customs_data)
        total_count =total_count + a
        customs_data = ''
        print(a)
        print(process_customs_data(customs_data))
        time.sleep(5)
    else:
        customs_data = customs_data + line.strip()

print(total_count)


#submit(total_count, part="a", day=6, year=2020)

标签: pythonprinting

解决方案


print(process_customs_data(customs_data))的命令打印表达式的实际返回值process_customs_data(customs_data)

如果您想知道为什么这与 不同a,那么只需customs_data = ''在调用函数之前查看您更新了函数参数。

在您的函数中process_customs_data(data),您创建一个set包含字符串中所有可能的不同字符的函数。对于空的调用,data它将是空集,因此len空集的 为 0。并print打印此 0。


推荐阅读