Есть ли способ узнать синтаксическую ошибку?

#python

#python

Вопрос:

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

Вот прикрепленное изображение ошибки

  def incometax_calc():

    income = int(input("Enter your total annual income in lakhs: "))
    gender = str(input("Enter m if Male, f if Female: "))


    if gender == m:
        if 1<(income)<(2.5):
            tax = 0
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

    if 2.5<=(income)<5:
        tax = 10
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)

    if 5<=(income)<10:
        tax = 20
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)

    if (income)>10:
        tax = 30
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)     

elif gender == f:
    if 1<(income)<(2.5):
        tax = 0
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)

    if 2.5<=(income)<5:
        tax = 5
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)

    if 5<=(income)<10:
        tax = 10
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)

    if (income)>10:
        tax = 20
        tax_ded = ((tax/100)*income)
        final_amt = (income)-(tax_ded)
        print("Your annual income: ",income)
        print("Tax percentage applied: ",tax)
        print("Tax deducted: ",tax_ded)
        print("Final amount: ",final_amt)
else:
    print("Wrong input!!")

print(incometax_calc())
  

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

1. Вам нужна строка "m" .

2. Терминологическая придирка: ошибка имени не является синтаксической ошибкой. Синтаксические ошибки обычно возникают, когда вы пропускаете отступ, круглую скобку или что-то подобное. Забыть присвоить значение переменной перед ее использованием — это совершенно другая категория проблем.

3. Кроме того, вы скоро попадете в NameError: name f is not defined . Так что лучше это тоже исправить 🙂

Ответ №1:

Ваше сравнение строк неверно. Это должно быть

 gender == 'm'
  

В противном случае интерпретатор считает, что это переменная, а не строка.

Ответ №2:

 if gender == m:
  

Здесь вы сравниваете с переменной с именем m, а не со строкой ‘m’.

Чтобы исправить это, преобразуйте эту переменную в строку, например:

 if gender == 'm':
  

Ответ №3:

Python считает m , что это имя переменной. Заключите это в кавычки, чтобы сравнить переменную gender со значением 'm' .

 if gender == 'm':
    ...
  

Ответ №4:

Ошибка здесь:

 if gender == m:
  

Если вы пишете таким образом, он выглядит, если m это переменная, но вы хотите "m" в виде строки.

Ответ №5:

Из вашей трассировки стека:

строка 8: имя ‘m’ не определено

Оператор if gender == m выдает ошибку, потому что программа ищет переменную m , которая не определена. Если вы хотели сравнить переменную gender со строковым значением m , то вам следует заключить ее в двойные или одинарные кавычки.

Ответ №6:

Это ошибка простого определения.

 if gender == m:
  

Переменная m не была определена в вашем коде до того, как вы ее использовали.

Попробуйте что-то вроде:

 m = "m"
if gender == m
  

или

 if gender == 'm'
  

если m является глобальной переменной, на которую вы ссылаетесь в этом методе, укажите

 global m
  

перед m первым использованием.

Ответ №7:

m не определено. Здесь вы вызываете m как объект python. То, что вы ищете, это "m"

Ваш код будет выглядеть следующим образом.

  def incometax_calc():

    income = int(input("Enter your total annual income in lakhs: "))
    gender = str(input("Enter m if Male, f if Female: "))


    if gender == "m":
        if 1<(income)<(2.5):
            tax = 0
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if 2.5<=(income)<5:
            tax = 10
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if 5<=(income)<10:
            tax = 20
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if (income)>10:
            tax = 30
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)     

    elif gender == "f":
        if 1<(income)<(2.5):
            tax = 0
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if 2.5<=(income)<5:
            tax = 5
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if 5<=(income)<10:
            tax = 10
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)

        if (income)>10:
            tax = 20
            tax_ded = ((tax/100)*income)
            final_amt = (income)-(tax_ded)
            print("Your annual income: ",income)
            print("Tax percentage applied: ",tax)
            print("Tax deducted: ",tax_ded)
            print("Final amount: ",final_amt)
    else:
        print("Wrong input!!")

    print(incometax_calc())