Python Pangram函数输出优化:如何将缺失字母统一输出为一行?
Pangram问题输出格式修正
你的代码核心功能没问题,但非pangram场景下的输出逻辑有误——循环里每次调用print会导致每行输出一个缺失字母。只需修改输出部分的逻辑,先收集所有缺失字母再一次性打印即可。
修改后的完整代码
def panagram(input_str): import string alphabet = string.ascii_lowercase for char in alphabet: if char not in input_str.lower(): return False return True user_input = input() if panagram(user_input): print("panagram") else: import string alphabet = string.ascii_lowercase missing_letters = [] # 先收集所有缺失字母 for char in alphabet: if char not in user_input.lower(): missing_letters.append(char) # 一次性输出汇总结果 print(f"missing {' '.join(missing_letters)}")
优化版代码(更高效)
用集合运算替代循环遍历,能更快找出缺失字母,同时避免重复导入模块:
import string def check_pangram(input_str): alphabet = set(string.ascii_lowercase) input_chars = set(input_str.lower()) missing = sorted(alphabet - input_chars) return len(missing) == 0, missing user_input = input() is_pangram, missing_letters = check_pangram(user_input) print("panagram" if is_pangram else f"missing {' '.join(missing_letters)}")
说明
- 原代码的问题在于
else分支中循环内直接print,导致每行输出一个字母;修改后先把所有缺失字母存入列表,再用' '.join()拼接成字符串,一次性输出 - 优化版使用集合的差集运算,比逐个遍历判断更高效,同时函数返回结果和缺失字母,避免重复处理输入字符串
内容的提问来源于stack exchange,提问作者Samantha Remotigue
相关产品推荐
相关产品推荐

