Python按键映射函数为何额外输出‘matches None’?
问题分析与修复方案
错误原因
- 你的
keypad函数内部直接用print输出匹配结果,但没有返回任何值,Python中没有return语句的函数默认返回None。 - 主代码里你又执行了
print(s,"matches",keypad(s)):调用keypad(s)时函数已经输出了一行结果,同时把函数返回的None作为参数传给了外层的print,所以会多打印出类似D matches None的多余行。
修复方案(两种可选)
方案一:让函数返回对应数字,由主代码统一输出
修改函数,把内部的print改成return,主代码的print就能拿到正确数字,不会出现None:
def keypad(ch): ch_lower = ch.lower() # 统一转小写,简化判断逻辑 if ch_lower in ["a", "b", "c"]: return 2 elif ch_lower in ["d", "e", "f"]: return 3 # 可继续补充其他字母的映射规则,比如g-i对应4、j-k-l对应5等 else: return "无效输入" # 处理非目标字母的情况 s = input("Enter a letter:") print(s,"matches",keypad(s))
方案二:函数内部负责输出,主代码仅调用函数
保留函数内部的print逻辑,主代码里直接调用函数,不再额外用print包裹:
def keypad(ch): ch_lower = ch.lower() if ch_lower in ["a", "b", "c"]: print(ch,"matches",2) elif ch_lower in ["d", "e", "f"]: print(ch,"matches",3) # 补充其他字母的映射规则和无效输入处理 s = input("Enter a letter:") keypad(s) # 直接调用函数,无需外层print
额外优化建议
可以用字典简化字母到数字的映射,让代码更简洁易维护:
def keypad(ch): key_map = { "2": ["a", "b", "c"], "3": ["d", "e", "f"], "4": ["g", "h", "i"], "5": ["j", "k", "l"], "6": ["m", "n", "o"], "7": ["p", "q", "r", "s"], "8": ["t", "u", "v"], "9": ["w", "x", "y", "z"] } ch_lower = ch.lower() for num, letters in key_map.items(): if ch_lower in letters: print(ch,"matches",num) return print(ch,"matches","无对应数字") # 处理非字母或不在映射内的输入 s = input("Enter a letter:") keypad(s)
内容的提问来源于stack exchange,提问作者Archit Chawla
相关产品推荐
相关产品推荐

