Não é exatamente sobre o ubuntu [closed]

0

Este é mais um pedido de ajuda da comunidade do Ubuntu. Eu fiz muitas buscas e leituras e acho que estou perdendo alguma coisa. Eu estou tentando escrever um programa muito básico em python, aqui está o problema: eu faço a pergunta raw_input("question" ) , então atribua uma declaração if da seguinte forma: Este é o erro:

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

Este é o código:

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]

O erro vem da variável para tx_rate nunca ser atribuída porque o tempo I asnwer sim ou não executa a opção ELSE

então o que acontece é que quando eu executo o código, eu recebo muitas perguntas, se eu perguntar sobre ganhos, e quando ele carrega essa pergunta, respondo sim ou não e imprime a opção else então me diz error "name 'variable' is not defined] aparentemente porque, como não me permite responder com sim ou não, ele apenas tenta executar código com uma variável inexistente. Alguém poderia me ajudar a consertar isso? Desculpe se isso não é onde eu deveria perguntar!

    
por Jerry White 26.07.2015 / 09:01

2 respostas

2

Você provavelmente deve tentar definir tx_rate = 0.15 antes de suas condições if ... else. Porque quando seu usuário insere nada para a primeira pergunta onde você pede sim ou não, ele vai direto para a parte else onde não há tx_rate, então você está com erro "variável não definida"

    
por redchief 26.07.2015 / 09:52
0

@jaysheel utekar está certo. O problema é que, se o seu código acabar no caso else da instrução if , a variável tx_rate não será definida. Isso faz com que o cálculo na linha 47 lance uma exceção.

Mas há mais alguns problemas com seu código: if 'ans1' == 'yes': sempre resultará em False, porque você está comparando duas strings diferentes e não uma variável e uma string. O código correto é: if ans1 == 'yes':

O mesmo problema com: elif "ans1" == "no": . O código correto é: elif ans1 == "no":

Você pode reescrever sua instrução if de uma forma muito mais curta da seguinte forma:

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

Isso garante que tx_rate esteja sempre definido.

Outra solução que continua repetindo a pergunta até que o usuário insira yes ou no (e, portanto, também garanta que a variável tx_data esteja definida) é:

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."

Se você realmente quiser ser rigoroso, adicione um intervalo e uma verificação de tipo na entrada de tx_rate . As pessoas poderiam inserir zero ou um vlue maior que 1 ou até mesmo texto em vez de um número.

    
por NZD 26.07.2015 / 10:53