【问题标题】:Python Error, Local variable might be referenced before assignment, variable outside the if conditionPython 错误,局部变量可能在赋值之前被引用,变量在 if 条件之外
【发布时间】:2018-11-01 02:13:20
【问题描述】:

我是python编程的新手,做了我的第一个基础程序

我必须访问并打印 if 函数中的本地变量,如果我尝试访问它,它显示可能引用了本地变量

这是完整的代码

def main():
print("Please place your order by filling the options")

name = input("What is your name ")
while not name.isalpha():
    print("invalid name")

age = input("What is your age ")
if not age.isdigit():
    print("Please type in correct form")
    if age >= "50":
    print("you are not allowed!")
    sys.exit()

item_1 = "burger"
item_2 = "pizza"
print("what would you like to order?")

print(item_1 + "\n" + item_2)
order = input()

item_1_large = "large burger"
item_1_small = "small burger"

item_2_large = "large pizza"
item_2_small = "small pizza"

if order == item_1:
    print("What would you like to choose?")
    print(item_1_large + "\n" + item_1_small)
    selection_of_category = input()
elif order == item_2:
    print("What would you like to choose?")
    print(item_2_large + "\n" + item_2_small)
    selection_of_category = input()

print("How many ")
number_of_order = input()

burger_price_large = int(10)
burger_price_small = int(5)
pizza_price_large = int(15)
pizza_price_small = int(8)




if order == item_1_large:
    result = burger_price_large * int(number_of_order)
elif order == item_1_small:
    result = burger_price_small * int(number_of_order)
elif order == item_2_large:
    result = pizza_price_large * int(number_of_order)
elif order == item_2_small:
    result = pizza_price_small * int(number_of_order)



if order == item_1:
    print("Your Burger Order Has Been Placed")
elif order == item_2:
    print("Your Pizza Order Has Been Placed")
else:
    print("You have made wrong choice")

print("Dear Mr. " + name, "Your Total Bill is $" + str (result))
while True:
main()
if input("Would you like to order something? (Y/N)").strip().upper() != 'Y':
    today = date.today()
    print("Thank you for your order")
    print(today)
    break

我遇到以下错误 print("尊敬的先生" + name, "您的账单总额是 $" + str (result)) UnboundLocalError:赋值前引用了局部变量“结果”

【问题讨论】:

  • 在调用print(...) 行之前,代码中没有任何result = ... 分配被执行。所以Python不知道如何处理result这个变量,它没有任何价值(不要和None混淆)

标签: python local-variables


【解决方案1】:

您的问题是 result 仅在 if 和 else-if 语句下定义。这意味着如果 if 或 else-if 语句中的每个条件都失败,则不会定义结果,但您将尝试使用它的值。

您有两种解决方案来解决此问题:

  1. 使最后一个 elif 和 else 成为一个包罗万象的对象,并对所有可能的 order 值都有一个值
  2. 如果所有 if 和 elif 条件均失败,则在最后一个 elif 之后使用单独的 else 将结果定义为“N/A”之类的内容。

【讨论】:

  • 感谢您的回复,但如果我按照您所说的去做,例如我做了最后一个 elif else else: result = Pizza_price_small * int(number_of_order) 但在这种情况下,python 只是读取它而不是 if 和 elif 条件,如果我用空字符串或“N”传递 else 条件/A" 最后,那么在这种情况下,python 每次只向我显示 else 条件
  • @TECH360-BIS3300 你能帮我重述你的问题吗?更好的是,如果你能把更新后的代码发给我就好了。
  • 所以这里是更新的代码 if order == item_1_large: result = burger_price_large * int(number_of_order) elif order == item_1_small: result = burger_price_small * int(number_of_order) elif order == item_2_large: result = Pizza_price_large * int(number_of_order) else: result = Pizza_price_small * int(number_of_order) 在这种情况下,在每个条件下它只显示 else 的结果,而不是其他条件
  • 如果 order == item_1_large,根据您的第二个建议,这是另一个更新的代码: result = burger_price_large * int(number_of_order) elif order == item_1_small: result = burger_price_small * int(number_of_order) elif order == item_2_large: result = Pizza_price_large * int(number_of_order) elif order == item_2_small: result = Pizza_price_small * int(number_of_order) else: result = "N/A" 在这种情况下,它总是在每个条件下打印结果 N/A
  • @TECH360-BIS3300 您的输入总是小写吗?由于您正在比较字符串,因此大写会搞砸。
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 2021-12-19
  • 2013-07-04
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多