这并不完全是关于 ubuntu

这并不完全是关于 ubuntu

这更像是对 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始终被定义。

另一个解决方案是不断重复该问题直到用户输入yesno(从而也确保变量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 的值,甚至可以输入文本而不是数字。

相关内容