Вычислить нечетные и четные средние числа целых - PullRequest
0 голосов
/ 20 октября 2019

Мне нужно написать программу для вычисления четного и нечетного среднего числа целых чисел, введенных пользователем. Пользователь вводит «готово» для завершения. В выходных данных будет показано среднее значение нечетных чисел и среднее число четных чисел.

У меня есть программа цикла 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 голосов
/ 20 октября 2019

Вы должны преобразовать 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))
0 голосов
/ 20 октября 2019
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). Во-первых, вам нужно разделить на число четных чисел, которые были введены, а не на последнее введенное четное число. Вам придется отдельно подсчитать, сколько четных чисел было введено. Во-вторых, это деление должно произойти только один раз, после все числа были введены - следовательно, оно не принадлежит внутри цикла.

0 голосов
/ 20 октября 2019

user_in - строка, поэтому вы не можете взять ее по модулю. Делай int(user_in) % 2 вместо ..

...