3 回答

TA貢獻1155條經驗 獲得超0個贊
user_in在對其執行算術運算之前,您應該轉換為數字。您還應該分別跟蹤偶數和奇數的計數,以便計算每個的正確平均值:
evenSums = 0
oddSums = 0
evenCount = 0
oddCount = 0
done = False
while not done:
user_in = input("Give me an integer or type 'done' to be done.")
if user_in.lower() == "done":
done = True
else:
user_in = int(user_in)
if user_in % 2 == 0:
evenSums += user_in
evenCount += 1
else:
oddSums += user_in
oddCount += 1
print("Even Average: " + str(evenSums / evenCount))
print("Odd Average: " + str(oddSums / oddCount))

TA貢獻1804條經驗 獲得超3個贊
if user_in % 2 == 0:
在上一行中,int(user_in) 不會導致user_in成為整數。它創建一個新值,它是整數等價物。
結果,%被解釋為字符串格式化運算符而不是模運算符,并且錯誤消息與您所期望的完全一樣。
首先用它的整數等效替換user_in,然后用它做所有適當的操作和測試:
user_in = int(user_in)
total += user_in
if user_in % 2 == 0:
# etc.
此外:
evenAverage = evenSums / user_in
這里有兩個邏輯錯誤(對于 也是類似的oddAverage)。首先,您需要除以輸入的偶數個數,而不是最近輸入的偶數。您將不得不單獨計算輸入了多少偶數。其次,這個除法必須只發生一次,在所有數字都被輸入之后——因此,它不屬于循環內部。
添加回答
舉報