Это не совсем про ubuntu [closed]

Это скорее просьба о помощи со стороны сообщества Ubuntu. Я много искал и читал, и, думаю, что-то упустил.Я пытаюсь написать очень простую программу на Python, вот в чем проблема: я задаю вопрос raw_input ("question") , затем назначаю оператор if следующим образом: {{ 1}} Это ошибка:

The debugged program raised the exception unhandled NameError
"name 'tx_rate' is not defined"
File: /home/Budget.py, Line: 47.

Это код:

ans1 = raw_input("Do you know your tax rate?" )
if 'ans1' == 'yes':
     tx_rate = raw_input("What is it?")
     float(tx_rate)
     tx_rate = float(tx_rate)
     print "Thank you! Will use tax rate %s, instead of 0.15!" % (tx_rate)
elif "ans1" == "no":
    print "Okay, that's alright, we'll use 0.15 as the average tax rate!"
    tx_rate = 0.15
else:
    print "Sorry, incorrect value, please answer yes or no."
gross_pay = (hrs * rate) * 4.0
net_pay = gross_pay - (gross_pay * tx_rate) * 4.0 [That last line is line 47]

Ошибка возникает из-за того, что переменная для tx_rate никогда не назначается, потому что погода я отвечаю да или нет, она запускает параметр ELSE

, поэтому происходит следующее: когда я запускаю код, я получаю много вопросов, когда я спрашиваю о доходах, а затем, когда он загружает этот вопрос там, я отвечаю да или нет, и он печатает вариант else, а затем сообщает мне об ошибке " имя 'переменная' не определено] по-видимому, потому что, поскольку он не позволяет мне ответить "да" или "нет", он просто пытается запустить код с несуществующей переменной. Может ли кто-нибудь помочь мне исправить это? Извините, если это не Не где бы мне спросить!

0
задан 26 July 2015 в 10:25

2 ответа

@jaysheel utekar прав. Проблема в том, что, если ваш код заканчивается в else в вашем операторе if, переменная tx_rate не определена. Это приводит к тому, что вычисление в строке 47 вызывает исключение.

Но с вашим кодом есть еще несколько проблем: if 'ans1' == 'yes': всегда приводит к False, потому что вы сравниваете две разные строки, а не переменную и строку. Правильный код: if ans1 == 'yes':

Та же проблема с: elif "ans1" == "no":. Правильный код: elif ans1 == "no":

Вы можете переписать свое утверждение if в гораздо более короткой форме следующим образом:

if ans1 == 'yes':
    tx_rate = raw_input("What is it?")
    float(tx_rate)
    tx_rate = float(tx_rate)
    print "Thank you! Will use tax rate %s, instead of 0.15!" % (tx_rate)
else:
    print "Okay, that's allright, we'll use 0.15 as the average tax rate!"
    tx_rate = 0.15

Это гарантирует, что tx_rate всегда определено. [ 1119]

Другое решение, которое продолжает повторять вопрос до тех пор, пока пользователь не введет yes или no (и таким образом также гарантирует, что переменная tx_data определена), это:

tx_rate = None
while (not tx_rate):
    ans1 = raw_input("Do you know your tax rate?" )
    if ans1 == 'yes':
        tx_rate = raw_input("What is it?")
        float(tx_rate)
        tx_rate = float(tx_rate)
        print "Thank you! Will use tax rate %s, instead of 0.15!" % (tx_rate)
    elif ans1 == "no":
        print "Okay, that's alright, we'll use 0.15 as the average tax rate!"
        tx_rate = 0.15
    else:
        print "Sorry, incorrect value, please answer yes or no."

Если вы действительно хотите Строго говоря, вы можете добавить некоторый диапазон и проверку типов на входе для tx_rate. Люди могут ввести ноль или vlue больше 1 или даже текст вместо числа.

0
ответ дан 26 July 2015 в 10:25

Необходимо, вероятно, попытаться еще определить tx_rate=0.15 перед Вашим если... условия. Поскольку, когда Ваши вводы данных пользователем ничто для первого вопроса, где Вы просите да или не это непосредственно, еще не переходит в часть, где нет никакого tx_rate, настолько дающего Вам ошибка "переменная, не определенная"

2
ответ дан 26 July 2015 в 20:25
  • 1
    Сейчас я redonload виртуальное поле снова от центра человечности, но как я могу знать, является ли это новейшая версия? там какой-либо путь состоит в том, чтобы проверить? – Aleksey Timoshchenko 19 October 2016 в 23:48

Другие вопросы по тегам:

Похожие вопросы: