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