You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:45:10