这更像是对 ubuntu 社区的求助。我搜索和阅读了很多资料,我想我漏掉了一些东西。我正在尝试用 python 编写一个非常基本的程序,问题如下:我提出问题raw_input("question" )
,然后分配一个if
语句,如下所示:这是错误:
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 选项,然后告诉我error "name 'variable' is not defined]
似乎是因为,因为它不允许我用是或否回答,它只是尝试用不存在的变量运行代码。有人能帮我解决这个问题吗?抱歉,如果这不是我应该问的地方!
答案1
您可能应该尝试在 if...else 条件之前定义 tx_rate=0.15。因为当您的用户在第一个问题(即您询问是或否)中未输入任何内容时,它会直接转到没有 tx_rate 的 else 部分,因此会给出错误“变量未定义”
答案2
else
@jaysheel utekar 是对的。问题是,如果您的代码以语句中的情况结束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
始终被定义。
另一个解决方案是不断重复该问题直到用户输入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
。人们可以输入零或大于 1 的值,甚至可以输入文本而不是数字。