我需要编写一个程序来计算用户输入的整数的偶数和奇数平均值。用户键入“完成”以完成操作。输出将显示奇数的平均值和偶数的平均值。
我有一个while循环程序来计算数字的总和,并且我试图添加一个奇数和偶数和的附加要求。这是代码:
total = 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:
# assume that they've typed in an integer
total += int(user_in)
print (total)
下面是我修改后的代码,用于对奇数和偶数进行排序,然后平均每组。
total = 0
evenSums = 0
oddSums = 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:
# assuming they've typed in an integer
total += int(user_in)
if user_in % 2 == 0:
evenSums += user_in
evenAverage = evenSums / user_in
else:
oddSums += user_in
oddAverage = oddSums / user_in
print(total)
print("Even Average: " + str(evenAverage))
print("Odd Average: " + str(oddAverage))
预期:
Enter number: 11
Enter number: 24
Enter number: 18
Enter number: 29
Enter number: 7
Enter number: done
Even Average: 21
Odd Average: 15.666666666666666
实际:
Give me an integer or type 'done' to be done.6
Traceback (most recent call last):
File "C:/Users/guita/Documents/School/CSCI100/CSCI100_Lab4_P/CSCI100_Lab4_P/problem7.py", line 14, in <module>
if user_in % 2 == 0:
TypeError: not all arguments converted during string formatting
答案 0 :(得分:0)
user_in
是一个字符串,因此您不能对它取模。改为使用int(user_in) % 2
。
答案 1 :(得分: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))
答案 2 :(得分:0)
if user_in % 2 == 0:
在上一行,int(user_in)
不会导致user_in
成为整数。它会创建一个 new 值,它是等效的整数。
因此,%
被解释为字符串格式运算符,而不是模运算符,并且错误消息与您期望的完全一样。
首先用等效的整数替换user_in
,然后对其进行所有适当的操作和测试:
user_in = int(user_in)
total += user_in
if user_in % 2 == 0:
# etc.
另外:
evenAverage = evenSums / user_in
这里有两个逻辑错误(与oddAverage
类似)。首先,您需要除以输入的个数的偶数,而不是除以最近输入的偶数。您将不得不分别计算输入了多少个偶数。其次,在输入所有数字后,该除法必须仅发生一次 -因此,它不属于循环内部。