Python实现句子反转类时元音计数为实际值两倍是什么原因?
问题原因分析
- 第一,
getVowelCount方法没有每次调用时重置计数:每次调用该方法都会直接在原有vowelCount的基础上累加元音数量,而不是重新从0开始统计,单次调用返回的结果正确,但多次调用就会不断叠加数值。 - 第二,你对每个实例的
getVowelCount一共调用了两次:第一次是sorted排序时,lambda函数里调用了一次统计元音数做排序依据;第二次是打印输出的时候又调用了一次,两次累加就导致最终输出的计数是实际值的两倍。 - 第三,额外隐患:你把
vowelCount、sentence、reversed_string都定义成了类属性,所有实例会共享这些变量,多个实例的计数会互相干扰,就算解决了多次调用的问题,多实例场景下计数依然会出错。
修复方案
调整getVowelCount方法,每次调用都临时统计元音数,或者把vowelCount改成实例属性,在初始化的时候就统计完成,避免重复计算:
class sentenceReverser: vowels = ['a','e','i','o','u'] def __init__(self,sentence): self.sentence = sentence self.reversed_string = self.reverser() # 初始化的时候就统计好元音数,只算一次 self.vowel_count = self.get_vowel_count() def reverser(self): return " ".join(reversed(self.sentence.split())) def get_vowel_count(self): # 每次调用都从0开始统计,不会累加 count = 0 for i in self.sentence: if i.lower() in self.vowels: count += 1 return count inp = [] # 原来的循环是range(2),题目要求三个字符串,改成range(3) for i in range(3): temp = input("Enter string:- ") ob = sentenceReverser(temp) inp.append(ob) # 排序直接用初始化好的元音数属性,不用重复调用统计方法 sorted_item = sorted(inp,key = lambda x:x.vowel_count,reverse=True) for item in sorted_item: print('Reversed String: ',item.reversed_string,'Vowel count: ',item.vowel_count)
内容的提问来源于stack exchange,提问作者Aditya kumar
相关产品推荐
相关产品推荐

