Программа оценки, имеющая проблемы с циклом while и использующая разные типы данных

#python

#python

Вопрос:

Я создаю программу, в которой мне нужно, чтобы пользователь вводил серию оценок домашних заданий (от 0 до 10), пока они не наберут «готово», и в этом случае я должен вычислить среднее значение баллов и указать соответствующую буквенную оценку. Моя проблема в том, что я не знаю, как вычислить среднее значение, когда у меня нет точного количества домашних заданий, на которые можно разделить сумму всех домашних заданий, поскольку это не конечный цикл. А также, когда я запускаю свою программу, я продолжаю получать сообщение об ошибке с надписью TypeError: неупорядоченные типы: str() < int()

Вот мой код до сих пор:

     print("Enter your homework scores one at a time, must be an integer ranging from 0 to 10. When finished, type done.")
number=input("Enter your homework grade: ")

while number != 'done':
    number=input("Enter your homework grade: ")
    percentage= number*10 #I need to divide by number of homeworks there are, but I'm not sure how to get the variable I need to divide by.

    if number < 0 or number > 10:
        print("Score must be between 0 and 10")
    elif percentage >= 92 and number < 100:
        letter = 'A'
    elif percentage >= 87 and number < 92:
        letter = 'B '
    elif percentage >= 80 and number < 87:
        letter = 'B'
    elif percentage >=77 and number < 80:
        letter = 'C '
    elif percentage >=70 and number < 77:
        letter = 'C'
    elif percentage >= 67 and number < 70:
        letter = 'D '
    elif percentage >= 60 and number < 67:
        letter = 'D'
    elif percentage < 60 and number >= 0:
        letter= 'F'
    elif number == 'done':
        print(percentage,"%, you got an ", letter)
    else:
        print("Error: please enter an integer ranging from 0 and 10.")
  

Ответ №1:

Входные данные представляют собой строковый тип, поэтому вы должны явно преобразовать его в целое число, используя что-то вроде «number = int (число)».

Вы можете создать отдельную счетную переменную, которая увеличивается каждый раз в цикле, а затем использовать это конечное значение для деления, когда вы закончите.

Ответ №2:

Вне вашего while цикла вы можете сохранить массив оценок, которые вы видели до сих пор. Он начнется с пустого.

 arr = []
  

Каждый раз, когда вы видите новую оценку, вы можете добавить ее в массив.

 newGrade = input("Enter your homework grade")
arr.append(float(newGrade)*10)
  

Как только пользователь введет done , вы можете вычислить среднее значение, используя функции sum and len , которые дают вам сумму элементов в массиве и количество элементов в массиве соответственно.

 average = sum(arr)/len(arr)
  

Комментарии:

1. Спасибо! На самом деле я не должен использовать слишком много разных функций, подобных тем, которые вы предложили, но я все равно ценю ввод!

Ответ №3:

Кевин говорит вам создать целое число, скажем, count = 0, и увеличивать его каждый раз, когда вы запрашиваете оценку.

В конце вы берете сумму / количество.

Кроме того, вот немного улучшенный способ: начните с count = 0

  Do:
    Ask for grade
    AVG = (AVG*count   new grade)/(count 1)
    count  
  

Среднее значение * count дает вам предыдущую сумму.