Python中vowel_count变量无法正常递增的问题求助
问题分析与解决方案
问题现象
初始化vowel_count为0,需判断其是否≥3,但运行时vowel_count仅递增1次后便停止,输出始终为1。输入字符串为'ugknbfddgicrmopn'。
代码错误点
1. KeyError导致程序提前终止
检查禁止字符串的代码存在逻辑错误与异常风险:
if (letter + item[index]) == (letter + naughty_dict[letter]): auto_naughty = True
item[index]就是当前遍历的letter,此比较逻辑完全偏离需求,原本应检查当前字符与下一个字符是否构成禁止组合。- 若当前
letter不在naughty_dict的键集合中,naughty_dict[letter]会直接抛出KeyError,导致程序崩溃,循环仅执行到第一个字符就停止,vowel_count只完成一次递增。
2. 重复字符检查逻辑错误
检查连续重复字符的代码逻辑失效:
if (letter + item[index]) == (letter + letter): double = True
item[index]等价于当前letter,该条件永远为True,double会被错误地直接设为True,无法正确检测字符串中的连续重复字符。
3. 未处理索引越界问题
遍历字符时,若index为最后一个字符的索引,访问item[index+1]会触发索引越界,需提前判断边界。
修复后的代码
vowels = ['a', 'e', 'i', 'o', 'u'] # 示例禁止组合,可根据实际需求调整 naughty_dict = {'a': 'b', 'c': 'd', 'p': 'q', 'x': 'y'} nice_strings = 0 for item in strings: vowel_count = 0 vowel = False double = False auto_naughty = False str_len = len(item) for index, letter in enumerate(item): # 统计元音数量 if letter in vowels: vowel_count += 1 print(vowel_count) # 判断元音数量是否达标 if vowel_count >= 3: vowel = True # 检查连续重复字符与禁止组合(排除最后一个字符) if index < str_len - 1: next_letter = item[index+1] # 检测连续重复字符 if letter == next_letter: double = True # 检测禁止组合,用get避免KeyError if next_letter == naughty_dict.get(letter, None): auto_naughty = True # 判断是否为符合要求的"好字符串" if not auto_naughty and double and vowel: nice_strings += 1
修复说明
- 使用
naughty_dict.get(letter, None)替代直接索引,避免KeyError,当字符不在禁止字典中时返回None,不会触发异常。 - 修复重复字符与禁止组合的检查逻辑:先判断
index不是最后一个字符,再获取下一个字符进行比较。 - 合并多层判断条件,简化"好字符串"的判定逻辑。
内容的提问来源于stack exchange,提问作者Riyan Nayak
相关产品推荐
相关产品推荐

