我试图使用Python为游戏编写一些代码,并且似乎无法将我的变量从按钮单击命令中提取到字典变量中供以后使用。我要做的是按一下按钮运行jingle_add(),让它运行一些计算,更新显示并返回所使用的树值,然后更改回相应的字典键。如果在jingle_add()中直接调用字典值,我可以让代码工作,但我试图压缩我的代码,并将其用作多个不同类型值的模板,这些值将保存在同一个字典中,并使用不同的按钮调用它们。但是,在下面的代码版本中,我根本无法让它运行,并且没有给出明显的错误,只是在lambda行上出现了一个标志。我在兰巴的电话里缺少了什么吗?还是我在回程中错过了什么?
data = {'fans': 0, 'jingle': 0, 'jingle_cost': 15}
jingle_button = Button(win, text = "Make a jingle - +0.1 fans/sec", command = lambda: data['fans'], data['jingle_cost'], data['jingle'] = jingle_add(data['fans'], data['jingle_cost'], data['jingle']))
def jingle_add(fans, cost, building):
if fans >= cost:
fans -= cost
cost = round(cost * (1.07**building), 1)
building += 1
return fans, cost, building发布于 2016-06-21 06:33:14
在其当前形式中,由于lambda表达式中的赋值,您的代码无法编译。另一种方法是定义函数中的功能,并将该函数用作回调:
def add_to_data():
data['fans'], data['jingle_cost'], data['jingle'] = jingle_add(data['fans'], data['jingle_cost'], data['jingle'])
jingle_button = Button(win,
text = "Make a jingle - +0.1 fans/sec", command = add_to_data)(请注意,add_to_data在用作command参数时不使用括号。)
发布于 2016-06-21 06:15:17
请说明你从哪里得到可变的‘成本’。然后尝试打印一些东西,检查它是否在第一个循环中运行:
if fans >= cost:您的代码是正确的,检查您正在循环的值。
https://stackoverflow.com/questions/37936427
复制相似问题