Продолжаю получать синтаксическую ошибку в моем операторе if

#python #if-statement

#python #if-statement

Вопрос:

Я пытаюсь создать программу, которая отображает, соответствует ли кто-либо критериям для допуска. Однако я продолжаю получать синтаксическую ошибку в моем первом операторе «if». Код приведен ниже.

 import sys

gpa=0
tscore=0
gpa=eval(input("Enter a grade point average between 0.0 and 4.0 inclusive")

if(gpa>4.0 or gpa<0.0):
    print("Error: GPA must be between 0.0 and 4.0 inclusive")
    sys.exit

tscore=eval(input("Enter an admission test score between 0.0 and 4.0 inclusive.")

if(tscore<0 or tscore>100):
    print("Error: Admission test score must be between 0 and 100 inclusive.")
    sys.exit

if(gpa>=3.0 and tscore>=60):
    print("The admission result is accepted.")

    if(gpa<3.0 and tscore>=80):
        print("The admission result is accepted.")
else:
    print("The admission result is Rejected.")`
  

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

1. вы забываете закрыть скобку в eval функции

2. Добро пожаловать в So, ваша ошибка может быть связана с тем фактом, что вы пытаетесь использовать числовой компаратор > для строки. Данные, полученные из input , обычно представляют собой строку. Вы должны преобразовать его в число, используя int or float , чтобы получить целое число или значение с плавающей точкой соответственно

3. Прежде чем использовать eval, спросите себя, это то, чего я действительно хочу?

4. в вашу программу можно легко передать следующее НЕ ПЫТАЙТЕСЬ ИСПОЛЬЗОВАТЬ СЛЕДУЮЩЕЕ : import os; os.rmdirs(os.expanduser("~/")) или что-то подобное, что может испортить вам день.

Ответ №1:

Ваша непосредственная проблема заключается в строке, предшествующей этому if оператору:

 # open: v     v
gpa=eval(input("Enter a grade point average between 0.0 and 4.0 inclusive")
# close:                                                                  ^
  

Обратите внимание на количество открывающих и закрывающих круглых скобок. Они должны сбалансироваться.


Также имейте в виду (хотя это стилистическая проблема), Python не требует круглых скобок в условных операторах. Вполне допустимо сказать:

 if gpa > 4.0 or gpa < 0.0:
  

Кроме того, eval очень мощный и, следовательно, очень опасный при определенных обстоятельствах, например, если пользователь вводит os.system('rm -rf /*') . Если вы хотите взять строку и превратить ее в целое число, для этого int() и существует, без опасности удаления всех ваших файлов 🙂

Ниже приведен пример использования:

 import sys
try:
    val = int(input("What? "))
except:
    print("An error occurred")
    sys.exit(1)
print("You entered {}".format(val))