Python统计字符串元音辅音的letter_count函数辅音计算错误求解
错误根源排查
- 函数名定义与调用不一致:定义时用
lettercount,调用时用letter_count,会直接报函数不存在的错误。 - state判断逻辑错误:
type(state) == "vowels"写法完全错误,type(state)返回的是字符串类型对象,永远不可能等于字符串值"vowels",导致元音、辅音的判断分支永远不会触发。 - 辅音统计逻辑完全错误:原有逻辑直接给
counter赋值为i+1,完全没有判断是否为辅音的逻辑,也没有过滤非英文字母的字符(比如符号、数字等不需要统计)。 - 嵌套遍历元音的冗余逻辑:不需要嵌套循环逐个对比元音字符,直接用
in运算符即可快速判断是否为元音。 - 异常类型使用错误:列表/元组元素非字符串时抛出
InterruptedError不符合规范,应该抛出TypeError。
修复后代码
def letter_count(strings, state): # 参数类型校验 if not isinstance(strings, (list, tuple)): raise TypeError("First input is not a list or a tuple") if not isinstance(state, str): raise TypeError("state must be a string!") if state not in ("vowels", "consonants"): raise ValueError("state may only be 'vowels' or 'consonants'.") vowels = "aeiou" counter = 0 # 遍历所有输入字符串 for s in strings: if not isinstance(s, str): raise TypeError(f"{s} is not a string!") # 遍历单个字符串的每个字符 for char in s: # 非英文字母直接跳过 if not char.isalpha(): continue lower_char = char.lower() if state == "vowels": if lower_char in vowels: counter += 1 else: # 统计辅音 if lower_char not in vowels: counter += 1 return counter # 测试用例 print(letter_count(['hello','my','name','is','V@#$'], 'vowels')) # 输出5 符合预期 print(letter_count(['asdf'], 'consonants')) # 输出3 符合预期 print(letter_count([], 'vowels')) # 输出0 符合预期 print(letter_count(['qwe#$%'], 'consonants')) # 输出2 符合预期
内容的提问来源于stack exchange,提问作者Phùng Ngọc Yến Nhi
相关产品推荐
相关产品推荐

