Tkinter Python 程序中函数参数的名称错误
Name Error for function argument in Tkinter Python Program
我正在尝试为我的代码构建一个 Tkinter GUI,returns 给定一个所需的最少硬币数量
数量。我为我的代码使用了 lambda 函数,因为我知道你不能用 Tkinter 传递参数。
我提前为长代码的家伙道歉。我花了好几个小时研究它,却找不到如何修复它。我很感激你能给我的任何帮助或建议。
这是我收到的错误,然后是我的代码:
NameError: name 'stack' is not defined
import tkinter as tk
from tkinter import *
from functools import partial
#Given a number of cents, return the least number of coins that sums to that amount
def solve(cents):
stack = []
result = 0
quarter = 25
dime = 10
nickel = 5
penny = 1
difference = abs(cents - result)
if cents == 25:
result += quarter
return stack.append("25")
if cents == 10:
result += dime
return stack.append("10")
if cents == 5:
result += nickel
return stack.append("5")
if cents == 1:
result += penny
return stack.append("1")
while cents != result:
while difference >= quarter:
result += quarter
stack.append("25")
difference = abs(cents - result)
while difference >= dime and difference < quarter:
result += dime
stack.append("10")
difference = abs(cents - result)
while difference >= nickel and difference < dime:
result += nickel
stack.append("5")
difference = abs(cents - result)
while difference >= penny and difference < nickel:
result += penny
stack.append("1")
difference = abs(cents - result)
newResult = print(stack)
return newResult
def print(stack):
Quarter = 0
Dime = 0
Nickel = 0
Penny = 0
for num in stack:
if num == "1":
Penny += 1
elif num == "5":
Nickel += 1
elif num == "10":
Dime += 1
elif num == "25":
Quarter += 1
return f"Minimum coins required are: {Quarter} Quarters, {Dime} Dimes, {Nickel} Nickels, {Penny} Pennies "
root = tk.Tk()
root.title('Minimum Coins Needed')
canvas1 = tk.Canvas(root, width = 400, height = 300)
canvas1.pack()
label1 = tk.Label(root, text= "Click Calculate to see the Result")
canvas1.create_window(200, 230, window=label1)
entry1 = tk.Entry (root)
canvas1.create_window(200, 140, window=entry1)
button1 = tk.Button(text='Calculate',command= lambda: print(stack))
canvas1.create_window(200, 180, window=button1)
button1.pack()
root.mainloop()
问题出在这一行,
button1 = tk.Button(text='Calculate',command= lambda: print(stack))
堆栈变量未定义,但在您的函数打印中(警告,打印是内置函数python,请勿使用此函数名称)。
编辑:
return stack.append(...)
值 return 是 None
>>> s = []
>>> print(s.append("test"))
None
在你的解释器中测试 python。
简单的解决
stack = []
在代码开头某处的函数之外,或者在这种情况下可以这样做:
stack = []
def solve():
# the rest of the code
问题是你在函数内部定义它,这意味着该变量是该函数的局部变量,因此其他函数无法访问(其他选项是使用 global
我猜,但我不确定如何确切地说,也许这甚至不是这里的方式)
另外正如@Fred 提到的,不要使用 print
作为函数名,因为它已经是内置的。
还有一个更大的问题是,现在虽然它不会抛出任何错误,因为它可以工作,但它不会做任何事情,因为它对 return 来自函数的值毫无意义,如果该函数用于 Button 的 command
参数,因为您无法获得该 returned 值。
我正在尝试为我的代码构建一个 Tkinter GUI,returns 给定一个所需的最少硬币数量 数量。我为我的代码使用了 lambda 函数,因为我知道你不能用 Tkinter 传递参数。
我提前为长代码的家伙道歉。我花了好几个小时研究它,却找不到如何修复它。我很感激你能给我的任何帮助或建议。
这是我收到的错误,然后是我的代码:
NameError: name 'stack' is not defined
import tkinter as tk
from tkinter import *
from functools import partial
#Given a number of cents, return the least number of coins that sums to that amount
def solve(cents):
stack = []
result = 0
quarter = 25
dime = 10
nickel = 5
penny = 1
difference = abs(cents - result)
if cents == 25:
result += quarter
return stack.append("25")
if cents == 10:
result += dime
return stack.append("10")
if cents == 5:
result += nickel
return stack.append("5")
if cents == 1:
result += penny
return stack.append("1")
while cents != result:
while difference >= quarter:
result += quarter
stack.append("25")
difference = abs(cents - result)
while difference >= dime and difference < quarter:
result += dime
stack.append("10")
difference = abs(cents - result)
while difference >= nickel and difference < dime:
result += nickel
stack.append("5")
difference = abs(cents - result)
while difference >= penny and difference < nickel:
result += penny
stack.append("1")
difference = abs(cents - result)
newResult = print(stack)
return newResult
def print(stack):
Quarter = 0
Dime = 0
Nickel = 0
Penny = 0
for num in stack:
if num == "1":
Penny += 1
elif num == "5":
Nickel += 1
elif num == "10":
Dime += 1
elif num == "25":
Quarter += 1
return f"Minimum coins required are: {Quarter} Quarters, {Dime} Dimes, {Nickel} Nickels, {Penny} Pennies "
root = tk.Tk()
root.title('Minimum Coins Needed')
canvas1 = tk.Canvas(root, width = 400, height = 300)
canvas1.pack()
label1 = tk.Label(root, text= "Click Calculate to see the Result")
canvas1.create_window(200, 230, window=label1)
entry1 = tk.Entry (root)
canvas1.create_window(200, 140, window=entry1)
button1 = tk.Button(text='Calculate',command= lambda: print(stack))
canvas1.create_window(200, 180, window=button1)
button1.pack()
root.mainloop()
问题出在这一行,
button1 = tk.Button(text='Calculate',command= lambda: print(stack))
堆栈变量未定义,但在您的函数打印中(警告,打印是内置函数python,请勿使用此函数名称)。
编辑:
return stack.append(...)
值 return 是 None
>>> s = []
>>> print(s.append("test"))
None
在你的解释器中测试 python。
简单的解决
stack = []
在代码开头某处的函数之外,或者在这种情况下可以这样做:
stack = []
def solve():
# the rest of the code
问题是你在函数内部定义它,这意味着该变量是该函数的局部变量,因此其他函数无法访问(其他选项是使用 global
我猜,但我不确定如何确切地说,也许这甚至不是这里的方式)
另外正如@Fred 提到的,不要使用 print
作为函数名,因为它已经是内置的。
还有一个更大的问题是,现在虽然它不会抛出任何错误,因为它可以工作,但它不会做任何事情,因为它对 return 来自函数的值毫无意义,如果该函数用于 Button 的 command
参数,因为您无法获得该 returned 值。