2016-06-05 3 views
0

Im пытается написать программу, которая будет определять среднее число числовых тестов. Количество тестов будет отличаться, но я не хочу, чтобы он был первоначально установлен пользователем. Я хочу использовать цикл while и контрольное значение нуля для остановки ввода. Я хотел бы, чтобы среднее значение отображалось до трех знаков после запятой, с символом%, сразу после последней цифры, как показано ниже ... SAMPLE RUN: Впишите ваш тестовый счет 80 Впишите ваш пробный код 70 Впишите тестовый файл 90 Впишите свой пробный код 88 Введите тест оценка 0 среднее значение 82.000%python average test score

total =0 
counter = 0 

while True: 
    entry = int(input('Enter test score:')) 
    if entry ==0: 
     break 

    total += entry 
    counter += 1 
    average = (total/counter) 

print("The average score:",format(average, '.3f'),'%',sep='') 
+0

Какую версию Python вы используете? –

+0

@AlexHall Я использую python 3.5 – CzSzPzTz

ответ

0
total = 0 
counter = 0 

while True: 
    entry = int(input("Enter Test score: ")) 
    if entry == 0: break 
    total += entry # this should be in while loop 
    counter += 1 

total = total * 1.0 
if counter == 0: exit(1) 
avg = total/counter 
print("Average is: %3.f" % avg + '%') 

всего + = запись должна быть внутри цикла while, потому что вы хотите добавить ее для каждой полученной записи. Надеюсь, что это помогло :)

+0

, если у меня есть моя печатная строка, подобная этой печати (« Средний балл: », формат (в среднем,« .3f »)), где бы мой знак процента пошел? – CzSzPzTz

+0

использовать формат, подобный 'print (" Средний балл: {0}% ". Format (avg))'. Знак Percent не был на выходе, потому что он не присутствовал в строке .. аргументы формата заменяются в строке в этом порядке. Вы можете настроить точность перед печатью следующим образом: используйте 'round (avg [, 3]' –

1

While потребности быть в нижнем регистре.

if entry == 0 отсутствует двоеточие.

total += entry и counter += 1 должны находиться внутри цикла, так как они должны происходить с каждой итерацией.

Вы пытались запустить код, который у вас был до публикации здесь?

+0

, он вернулся с ошибкой ... говоря, что я не определил истину ... но я даже не был уверен, что это правильный способ получить результат, который я пытался. .. @alexhall – CzSzPzTz

+0

Используйте 'True', но вы даже не указали« true »в любом месте вашего кода. См. Http://stackoverflow.com/help/how-to-ask. –

0

Я вижу по крайней мере эти два варианта: 1. Сохраните значения в массиве, а затем, после цикла, вычислите среднее значение. 2. вычислите среднее значение итеративно на каждой петле

Если вы ожидаете значительного количества входов, я бы выбрал вариант (2).

Что касается форматирования, то это может быть полезно: https://docs.python.org/3/library/string.html#formatstrings

0

Это не выглядит, как вы даже пытались, потому что ваш код, как это в не в состоянии работать вообще. Однако вот ответ. Вам нужно сохранить результаты в списке, а затем получить среднее значение по сумме списка по длине списка (количество баллов). метод .format позволяет указать 3 десятичных знака.

scores = [] 
while True: 
    entry = int(input('Enter test score: ')) 
    if entry == 0: 
     break 
    scores.append(entry) 


print('The average is', "{0:.3f}".format(float(sum(scores)/len(scores)))) 
0

Следующие должны работать.

scores = [] 
while True: 
    entry = input("Enter test score: ") 
    if entry == '': 
     break 
    elif not entry.isnumeric(): 
     print("Scores must be numeric.") 
    else: 
     scores.append(int(entry)) 

average = sum(scores)/len(scores) 
print("The average score is {:.03f}.".format(average)) 

Среднее значение вычисляется путем суммирования перечня scores и деления на общее число элементов в scores. Остальное просто логично, чтобы пользователь вводил числовые оценки и выходил, когда пользователь ничего не вводил (просто нажимает Возврат без текста).

+0

Как добавить знак процента в текущую строку печати без каких-либо пробелов между последним числом и символом? – CzSzPzTz

+0

@CzSzPzTz: добавьте его прямо перед периодом. 'print (" Средний балл - {: .03f}%. ".формат (средний)) ' – 2Cubed

0
total =0 
counter = 0 

while True: 
    entry = int(input('Enter test score:')) 
    if entry ==0: 
     break 

total += entry 
counter += 1 
average = (total/counter) 

print("The average score:",format(average, '.3f'),'%',sep='') 
Смежные вопросы