咖啡机 - 新函数中预期有无效语法和语句结束
Coffee Machine - invalid syntax and End of Statement expected in new function
所以我正在尝试创建一个咖啡机程序(你选择一种饮料,机器会检查成分、资源和你投入的钱,然后它会分配饮料。)一切顺利,直到我得到到程序处理硬币的部分,如果足够,将它们添加到机器中的金额。
我不太擅长 return 语句和全局与本地范围,所以我认为它们是问题所在。我尝试使用谷歌搜索,但没有任何结果可以真正解决我遇到的具体问题。
这是相关函数的代码:
def process_coins(order, money):
print("Please insert coins.")
quarters = float(input("Quarters: ")) * quarters_value
dimes = float(input("Dimes: ")) * dimes_value
nickles = float(input("Nickles: ")) * nickles_value
pennies = float(input("Pennies: ")) * pennies_value
total = quarters + dimes + nickles + pennies
if total < MENU[order]["cost"]:
total = 0
return print("Sorry, that's not enough money. Money refunded.")
else:
return money += total
PyCharm 告诉我最后一行“预计语句结束”和“无效语法”。
当我删除“return”时,它会运行但实际上不会将总数添加到机器中的钱中。我还尝试将 money += total 括起来,这将这两个问题都变成了“意外的表达式语法”。
老实说,我不明白为什么这行不通。我只想 pycharm 将“total”(局部范围)添加到“money”(全局范围)和 return 中,以便我可以在其余代码中使用它。
我也不明白为什么这个函数在我将它作为参数添加到括号中之前不能使用变量“money”,但它能够使用变量“dimes_value”等。很好,即使这些只是在代码开头的“money”之前的一行中提到,并且不是函数括号中参数的一部分。
我错过了什么?
if total < MENU[order]["cost"]:
total = 0
return print("Sorry, that's not enough money. Money refunded.")
else:
money += total
return money
问题是 return
can only return expressions, but an augmented assignment 是一个 语句 。这就是您收到语法错误的原因。
对于 Python >= 3.8,您可以使用 assignment expression 来解决这个问题:
return (money := money + total)
* 注意必要的括号。
这将同时分配给 money
和 return 分配给它的值。
但这会产生一个新问题:money
will now be considered a local variable(因为你在函数内部给它赋值)你会得到一个不同的错误。
要克服这个,您需要声明
global money
在函数开始处。
但实际上最好的解决方案是根本不使用全局变量,只需 return money + total
,然后在调用函数的全局范围内分配 returned 值。
所以我正在尝试创建一个咖啡机程序(你选择一种饮料,机器会检查成分、资源和你投入的钱,然后它会分配饮料。)一切顺利,直到我得到到程序处理硬币的部分,如果足够,将它们添加到机器中的金额。 我不太擅长 return 语句和全局与本地范围,所以我认为它们是问题所在。我尝试使用谷歌搜索,但没有任何结果可以真正解决我遇到的具体问题。 这是相关函数的代码:
def process_coins(order, money):
print("Please insert coins.")
quarters = float(input("Quarters: ")) * quarters_value
dimes = float(input("Dimes: ")) * dimes_value
nickles = float(input("Nickles: ")) * nickles_value
pennies = float(input("Pennies: ")) * pennies_value
total = quarters + dimes + nickles + pennies
if total < MENU[order]["cost"]:
total = 0
return print("Sorry, that's not enough money. Money refunded.")
else:
return money += total
PyCharm 告诉我最后一行“预计语句结束”和“无效语法”。 当我删除“return”时,它会运行但实际上不会将总数添加到机器中的钱中。我还尝试将 money += total 括起来,这将这两个问题都变成了“意外的表达式语法”。 老实说,我不明白为什么这行不通。我只想 pycharm 将“total”(局部范围)添加到“money”(全局范围)和 return 中,以便我可以在其余代码中使用它。 我也不明白为什么这个函数在我将它作为参数添加到括号中之前不能使用变量“money”,但它能够使用变量“dimes_value”等。很好,即使这些只是在代码开头的“money”之前的一行中提到,并且不是函数括号中参数的一部分。 我错过了什么?
if total < MENU[order]["cost"]:
total = 0
return print("Sorry, that's not enough money. Money refunded.")
else:
money += total
return money
问题是 return
can only return expressions, but an augmented assignment 是一个 语句 。这就是您收到语法错误的原因。
对于 Python >= 3.8,您可以使用 assignment expression 来解决这个问题:
return (money := money + total)
* 注意必要的括号。
这将同时分配给 money
和 return 分配给它的值。
但这会产生一个新问题:money
will now be considered a local variable(因为你在函数内部给它赋值)你会得到一个不同的错误。
要克服这个,您需要声明
global money
在函数开始处。
但实际上最好的解决方案是根本不使用全局变量,只需 return money + total
,然后在调用函数的全局范围内分配 returned 值。