2014-02-18 137 views
1

我一直在使用我的折扣变量获取错误。名称错误:未定义全局名称'折扣'。请看看我的代码并帮助我。我不想修改函数的参数。全局名称未定义错误

def finddiscount(quantity): 
    if quantity >= 1 and quantity <= 9: 
     discount = 0 
    elif quantity >= 10 and quantity <= 19: 
     discount = .2 
    elif quantity >= 20 and quantity <= 49: 
     discount = .30 
    elif quantity >= 50 and quantity <= 99: 
     discount = .40 
    elif quantity >= 100: 
     discount = .50 
    return discount 
def calctotal(quantity, price): 
    finddiscount(quantity) 
    disc = (price*quantity)*discount 
    total = (price*quantity) 
    due = (price*quantity)-(price*quantity)*dicount 
    print ("\t","Order total $",format(total, "10.2"),"\n\t","Discount $",format(disc,"10.2"),"\n\t","Amount Due $",format (due, "10.2"),sep="") 
def main(): 
    quantity = int(input("How many packages where purchased?")) 
    price = float(input("How much is each item?")) 
    calctotal(quantity, price) 
main() 
+0

好吧我加了谢谢你 – user3285386

回答

3

如果您想要在多块范围内访问它,则必须声明discount为全局。

discount = 0 

def finddiscount(quantity): 
    ... 
    global discount # Needed to modify global copy of discount 
    discount = 1 
+0

当我试着回去宣布它是一个全球性的,它给了我错误名称'折扣'在全球声明前分配 – user3285386

+0

你可以发布显示你的原始折扣声明的代码'? – jeremyjjbrown

+0

@jeremyjjbrown我不认为'折扣'应该是一个全球性的。实际上有一个函数调用来在抛出错误的函数中计算它。 – Nabla

1
disc = (price*quantity)*discount 

你从来没有在calctotal定义discount(既不在全球范围内)。将结果从finddiscount(quantity)分配给它。此刻的你正在计算折扣,但它并没有使用任何变量立即丢弃结果:

def calctotal(quantity, price): 
    discount = finddiscount(quantity) 
    disc = (price*quantity)*discount 
    total = (price*quantity) 
    due = (price*quantity)-(price*quantity)*dicount 
    print ("\t","Order total $",format(total, "10.2"),"\n\t","Discount $",format(disc,"10.2"),"\n\t","Amount Due $",format (due, "10.2"),sep="") 
0

如果我们看一下代码

def calctotal(quantity, price): 
    finddiscount(quantity) 
    disc = (price*quantity)*discount 
    total = (price*quantity) 
    due = (price*quantity)-(price*quantity)*dicount 
    print ("\t","Order total $",format(total, "10.2"),"\n\t","Discount $",format(disc,"10.2"),"\n\t","Amount Due $",format (due, "10.2"),sep="") 

既不discount也不dicount(我该块假设错字)已在calctotal()中声明。下面要解决夜发出

def calctotal(quantity, price): 
    discount = finddiscount(quantity) 
    disc = (price*quantity)*discount 
    total = (price*quantity) 
    due = (price*quantity)-(price*quantity)*discount 
    print ("\t","Order total $",format(total, "10.2"),"\n\t","Discount $",format(disc,"10.2"),"\n\t","Amount Due $",format (due, "10.2"),sep="") 

编辑: 同时使discount一个全局变量当然是一个办法做到这一点,一般我建议,除非你有一个很好的理由不使变量全球。例如 - 如果应用的折扣将受到外部功能的影响,并且您希望它在finddiscount()中更改,那么全局变量将很好地工作。但是,在这种情况下,您将在finddiscount()内创建discount的所有可能值,并且使用赋值更有意义。

全局变量的问题在于,您可能会意外地将它们重新分配给您不打算执行的操作,并且如果无缘由地完成命名空间,它可能会造成混乱。

相关问题