计算整数的奇数和偶数平均值

时间:2019-10-19 23:28:26

标签: python python-3.x if-statement while-loop

我需要编写一个程序来计算用户输入的整数的偶数和奇数平均值。用户键入“完成”以完成操作。输出将显示奇数的平均值和偶数的平均值。

我有一个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

3 个答案:

答案 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类似)。首先,您需要除以输入的个数的偶数,而不是除以最近输入的偶数。您将不得不分别计算输入了多少个偶数。其次,在输入所有数字后,该除法必须仅发生一次 -因此,它不属于循环内部。

相关问题