Python代码未用print()却输出数值的问题求助
问题解析:莫名出现的0是怎么来的?
嘿,这个问题我刚学Python的时候也踩过坑!咱先搞清楚为啥会冒出来这些0:
你是在**Python交互式命令行(比如IDLE或者终端里的Python Shell)**里运行的代码对吧?这个环境有个特性:每一行单独的表达式执行后,它的返回值会被自动打印出来——哪怕你没写print()!
罪魁祸首:setdefault()的返回值
你代码里的found.setdefault(letter, 0)这个方法,行为是这样的:
- 如果
letter还没在found字典里,它会把这个键加进去,值设为0,同时返回这个0 - 如果
letter已经存在,它会返回这个键当前的值
在你输入的"Sample Word"里,元音字母是a、e、o——第一次处理这三个字母时,setdefault都会返回0,而交互式Shell自动把这些返回值打印出来了,这就是你看到的那三个0的来源!
解决办法
有几个简单的方式可以去掉这些多余的0:
方法1:把setdefault的返回值“吃掉”
给它加个赋值,把返回值存到一个不用的变量里(比如用下划线_,这是Python里常用的“占位变量”),这样交互式Shell就不会自动输出了:
vowels = ['a', 'e', 'i', 'o', 'u'] word = input("Provide a word to look for vowels in it: ") found = {} for letter in word: if letter in vowels: _ = found.setdefault(letter, 0) # 用变量接收返回值,避免自动打印 found[letter] += 1 for k,v in sorted(found.items()): print(k,' was found ', v, ' times.')
方法2:用defaultdict替代普通字典
Python的collections模块里有个defaultdict,可以指定默认值,这样就不用手动调用setdefault了,代码更简洁,也不会有返回值的问题:
from collections import defaultdict vowels = ['a', 'e', 'i', 'o', 'u'] word = input("Provide a word to look for vowels in it: ") found = defaultdict(int) # 所有新键默认值为0 for letter in word: if letter in vowels: found[letter] += 1 # 直接累加,不用先判断键是否存在 for k,v in sorted(found.items()): print(k,' was found ', v, ' times.')
方法3:把代码存成.py文件运行
如果把代码保存成.py文件,然后用python 文件名.py运行,就不会有这个问题了——因为非交互式环境只会执行代码里明确写的print()语句,不会自动输出表达式的返回值。
内容的提问来源于stack exchange,提问作者Vidul Talwar
相关产品推荐
相关产品推荐

