所以我正在解決我實驗室實踐教學大綱中的一個問題。以下是問題:-
撰寫一個python類來逐字反轉句子(通過建構式初始化)。示例:“我在這里”應該顛倒為“我在這里”。為用戶輸入的三個字串中的每一個創建此類的實體,并按字串中元音數量的降序顯示每個字串的反轉字串。
以下是上述問題的實作代碼:-
class sentenceReverser:
vowels = ['a','e','i','o','u']
vowelCount =0
sentence=""
reversed_string = ""
def __init__(self,sentence):
self.sentence = sentence
self.reverser()
def reverser(self):
self.reversed_string = " ".join(reversed(self.sentence.split()))
return self.reversed_string
def getVowelCount(self):
for i in self.sentence:
if i.lower() in self.vowels:
self.vowelCount = 1
return self.vowelCount
inp = []
for i in range(2):
temp = input("Enter string:- ")
ob = sentenceReverser(temp)
inp.append(ob)
sorted_item = sorted(inp,key = lambda inp:inp.getVowelCount(),reverse=True)
for i in range (len(sorted_item)):
print('Reversed String: ',sorted_item[i].reverser(),'Vowel count: ',sorted_item[i].getVowelCount())
以下是我為上述代碼得到的輸出:-

問題:-
誰能告訴我為什么我的元音數翻了一番???
任何幫助,將不勝感激!!
uj5u.com熱心網友回復:
你打了getVowelCount()兩次電話。相反,您可以使用變數而不是在列印命令中呼叫
for i in range (len(sorted_item)):
print('Reversed String: ',sorted_item[i].reverser(),'Vowel count: ',sorted_item[i].vowelCount)
uj5u.com熱心網友回復:
這是因為您沒有在方法中重置元音計數。因此,如果您執行一次該方法(此處為排序),您將獲得正確的計數。如果您執行兩次(在列印中),您將獲得兩倍的收益。如果您再次執行它,您將獲得 3 倍的正確數量。等等。
解決方法是重置號碼:
def getVowelCount(self):
self.vowelCount = 0
for i in self.sentence:
if i.lower() in self.vowels:
self.vowelCount = 1
return self.vowelCount
或者只計算一次 - 將其設定為 None,然后僅計算if self.vowelCount is None,否則回傳現有值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368113.html
