2016-09-03 1 views
-3

Я понятия не имею, что я делаю неправильно, но это подталкивает меня к стене. Почему я получаю синтаксическую ошибку? Мне нужно закодировать средний калькулятор, используя оператор while, где «0» определяет, что программе необходимо выполнить расчет.Ошибка в синтаксисе - средний калькулятор «IF» и «WHILE»

enter image description here Вот пример вывода мой профессор определен:

SAMPLE RUN 

Enter test score 80 

Enter test score 70 

Enter test score 90 

Enter test score 88 

Enter test score 0 

The average is 82.000% 
+1

'если тест ==«0'' не действует линия по себе. Что вы хотите сделать там? – Harrison

+4

Пожалуйста, не публикуйте скриншот вашего кода. Скопируйте свой код в свой вопрос и используйте инструменты форматирования. Кроме того, вставьте * точное сообщение об ошибке, в котором происходит синтаксическая ошибка – idjaw

+0

Я не вижу, как вы выходите из бесконечного цикла или почему вы ожидаете проверить целое число по сравнению со строкой –

ответ

1

Я исправил свой код для вас. Для будущих вопросов, пожалуйста, разместите свой код непосредственно в своем вопросе и отступьте его на 4 пробела, чтобы правильно отформатировать его.

addition_integer = 0 
divison_integer = 0 

while True: 
    test = int(input("Enter test score: ")) 
    if test == 0: 
     break 
    else: 
     addition_integer += test 
     divison_integer += 1 

print("The average is {}%".format(addition_integer/divison_integer)) 

Вот объяснение того, что я сделал, чтобы исправить это:

Вы были зацикливание while True, который является правильным, однако у вас не было никакой возможности вырваться из цикла. Ваша строка, указывающая, что if test == '0' никогда не решит истину, потому что вы принимаете ввод как int от пользователя, не говоря уже о том, что он был неуместен и не имел правильного синтаксиса. То, что я делаю в приведенном выше коде, продолжается до тех пор, пока вход пользователя не будет равен 0 (целое число, а не строка). Если пользователь вводит 0, мы просто выходим из цикла и печатаем среднее значение. До тех пор, мы продолжаем добавлять ввод в addition_integer и приращение division_integer на 1.

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

Наконец, вот тест, используя цифры, которые вы предоставили в вашем вопросе:

Enter test score: 80 
Enter test score: 70 
Enter test score: 90 
Enter test score: 88 
Enter test score: 0 
The average is 82% 
2

if заявление на картинке (пожалуйста, напишите фактический код в ваш вопрос) является недействительным. Он нуждается в двоеточии, то есть if test == '0':. Он также нуждается в теле.

Выходной сигнал выборки предполагает, что 0 предназначен для завершения цикла. Сначала проверьте это, прежде чем изменять division_integer, иначе будет влиять средний. Затем, когда вы получите 0перерыв из цикла в то время как с break, т.е.

while True: 
    test = int(input('Enter test score:')) 
    if test == 0: 
     break 
    addition_integer += test 
    division_integer += 1 

Обратите внимание, что вы преобразующий вход в целое, но ваш тест был для строки"0". Вам нужно проверить целое число 0, как я показал выше.

Еще один момент, вы должны использовать try/except блок при преобразовании входного в целое число, так что вы можете поймать недопустимый ввод:

while True: 
    try: 
     test = int(input('Enter test score:')) 
    except ValueError: 
     print('Invalid number entered, try again.') 
     continue 
    # etc. 
0

Альтернативный ответ

Используйте список, сумму и деления. Та же концепция, сравните тест внутри цикла while, чтобы вырваться из него. Также проверьте, есть ли у вас допустимый ввод, который можно сделать целым числом с try/except.

Кроме того, остерегайтесь деления на ноль

values = [] 

while True: 
    try: 
     test = int(input('Enter test score:')) 
     if test == 0: 
      break 
     values.append(test) 
    except: 
     break 

total = len(values) 
avg = 0 if total == 0 else 1.0 * sum(values)/total 

print("The average is", avg)