数学 "sign" 错误
Math "sign" error
我有一个问题,我尝试做简单的计算器,当我几乎完成并为成功而欢呼时,"sign",在捷克语中是 "znaménko"(加号、减号、倍数等。 ,那是译者给我的)总是加号,即使我选择了其他。我是新手,所以请注意。
你能告诉我我做错了什么吗?任何帮助表示赞赏! :)
代码如下:
from tkinter import *
def znamenkoplus():
znamenko = "+"
print(znamenko)
def znamenkominus():
znamenko = "-"
print(znamenko)
def znamenkokrat():
znamenko = "."
print(znamenko)
def znamenkodeleno():
znamenko = ":"
print(znamenko)
def rovnase():
prvnicislo = "%s" % (e1.get())
druhecislo = "%s" % (e2.get())
float(prvnicislo)
float(druhecislo)
print(prvnicislo)
print(druhecislo)
print(znamenko)
if znamenko == "+":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 + cislo2
print (vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == "-":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 - cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == ".":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 * cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == ":":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 / cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
master = Tk()
znamenko = "+"
master.title("Kalkulačka")
master.geometry("350x500")
firstLabel = Label(text="Vaše první číslo").place(x=25, y=25)
secondlabel = Label(text="Znaménko").place(x=25, y=75)
thirdlabel = Label(text="Vaše druhé číslo").place(x= 25, y= 125)
výsledekLabel = Label(text="", font=("Helvetica",30))
výsledekLabel.place(x=25, y=350, width=300,height=100)
e1 = Entry()
e2 = Entry()
e1.place(x=130, y=25, width=140)
e2.place(x=130, y=125, width=140)
buttonplus = Button(text="+", command=znamenkoplus).place(x=130, y=75)
buttonminus = Button(text="-", command=znamenkominus).place(x=165, y=75)
buttonkrat = Button(text="・", command=znamenkokrat).place(x=197, y=75)
buttondeleno = Button(text=":", command=znamenkodeleno).place(x=237, y=75)
buttonrovnase = Button(text="=", command=rovnase).place(x=130, y=175, width=140)
mainloop()
这并不是一个真正的 tkinter
问题,只是一个基本的 Python 问题。
您尝试从您的函数内部设置全局变量 znamenko
。这有效,但前提是您使用 global 关键字。
尝试:
def znamenkoplus():
global znamenko
znamenko = "+"
print(znamenko)
与更改变量的其他函数类似。
这是 tkinter
应用通常有一个主 class 的原因之一,您可以在其中放置状态变量,因此您可以通过 self
而不是使用全局访问它们无处不在。
变量阴影
在第 64 行,您将变量 znamenko
设置为默认 '+'
:
znamenko = "+"
然后,在您的运算符函数中,您尝试将其设置为用户定义的值,例如:
def znamenkoplus():
znamenko = "+"
print(znamenko)
这是可行的,但是,不是您想要的方式。它在函数 中更改变量znamenko
的值。
请注意,这不是第 64 行中的变量 znamenko
。这是一个 不同的变量 ,具有完全 不同的位置 ,具有相同的姓名。当这离开范围时,函数内部的 znamenko
被释放 - 并且全局变量 znamenko
保持不变(这就是为什么它总是 '+'
)。这称为 变量阴影。
试试这个:
def znamenkominus():
znamenko = "-"
print("Znamenko in the function", znamenko)
znamenko = "+"
print("Znamenko before change", znamenko)
znamenkominus()
print("Znamenko after change", znamenko)
znamenko
将具有与更改前相同的值。
从函数更改全局变量
您可以通过添加 global znamenko
:
来更改全局变量
def znamenkominus():
global znamenko
znamenko = "-"
print("Znamenko in the function", znamenko)
znamenko = "+"
print("Znamenko before change", znamenko)
znamenkominus()
print("Znamenko after change", znamenko)
这将更改全局变量(并且不会创建任何局部变量)
我有一个问题,我尝试做简单的计算器,当我几乎完成并为成功而欢呼时,"sign",在捷克语中是 "znaménko"(加号、减号、倍数等。 ,那是译者给我的)总是加号,即使我选择了其他。我是新手,所以请注意。
你能告诉我我做错了什么吗?任何帮助表示赞赏! :)
代码如下:
from tkinter import *
def znamenkoplus():
znamenko = "+"
print(znamenko)
def znamenkominus():
znamenko = "-"
print(znamenko)
def znamenkokrat():
znamenko = "."
print(znamenko)
def znamenkodeleno():
znamenko = ":"
print(znamenko)
def rovnase():
prvnicislo = "%s" % (e1.get())
druhecislo = "%s" % (e2.get())
float(prvnicislo)
float(druhecislo)
print(prvnicislo)
print(druhecislo)
print(znamenko)
if znamenko == "+":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 + cislo2
print (vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == "-":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 - cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == ".":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 * cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
if znamenko == ":":
cislo1 = float(prvnicislo)
cislo2 = float(druhecislo)
vysledek = cislo1 / cislo2
print(vysledek)
výsledekLabel.configure(text=vysledek)
master = Tk()
znamenko = "+"
master.title("Kalkulačka")
master.geometry("350x500")
firstLabel = Label(text="Vaše první číslo").place(x=25, y=25)
secondlabel = Label(text="Znaménko").place(x=25, y=75)
thirdlabel = Label(text="Vaše druhé číslo").place(x= 25, y= 125)
výsledekLabel = Label(text="", font=("Helvetica",30))
výsledekLabel.place(x=25, y=350, width=300,height=100)
e1 = Entry()
e2 = Entry()
e1.place(x=130, y=25, width=140)
e2.place(x=130, y=125, width=140)
buttonplus = Button(text="+", command=znamenkoplus).place(x=130, y=75)
buttonminus = Button(text="-", command=znamenkominus).place(x=165, y=75)
buttonkrat = Button(text="・", command=znamenkokrat).place(x=197, y=75)
buttondeleno = Button(text=":", command=znamenkodeleno).place(x=237, y=75)
buttonrovnase = Button(text="=", command=rovnase).place(x=130, y=175, width=140)
mainloop()
这并不是一个真正的 tkinter
问题,只是一个基本的 Python 问题。
您尝试从您的函数内部设置全局变量 znamenko
。这有效,但前提是您使用 global 关键字。
尝试:
def znamenkoplus():
global znamenko
znamenko = "+"
print(znamenko)
与更改变量的其他函数类似。
这是 tkinter
应用通常有一个主 class 的原因之一,您可以在其中放置状态变量,因此您可以通过 self
而不是使用全局访问它们无处不在。
变量阴影
在第 64 行,您将变量 znamenko
设置为默认 '+'
:
znamenko = "+"
然后,在您的运算符函数中,您尝试将其设置为用户定义的值,例如:
def znamenkoplus():
znamenko = "+"
print(znamenko)
这是可行的,但是,不是您想要的方式。它在函数 中更改变量znamenko
的值。
请注意,这不是第 64 行中的变量 znamenko
。这是一个 不同的变量 ,具有完全 不同的位置 ,具有相同的姓名。当这离开范围时,函数内部的 znamenko
被释放 - 并且全局变量 znamenko
保持不变(这就是为什么它总是 '+'
)。这称为 变量阴影。
试试这个:
def znamenkominus():
znamenko = "-"
print("Znamenko in the function", znamenko)
znamenko = "+"
print("Znamenko before change", znamenko)
znamenkominus()
print("Znamenko after change", znamenko)
znamenko
将具有与更改前相同的值。
从函数更改全局变量
您可以通过添加 global znamenko
:
def znamenkominus():
global znamenko
znamenko = "-"
print("Znamenko in the function", znamenko)
znamenko = "+"
print("Znamenko before change", znamenko)
znamenkominus()
print("Znamenko after change", znamenko)
这将更改全局变量(并且不会创建任何局部变量)