NameError: name 'new' is not defined
import tkinter
from tkinter import ttk
def factorialo():
new = 1
a = int(vvod.get())
if a < 0:
new = "Введите положительное число!"
elif a == 0:
exit()
else:
for i in range(1, a + 1):
new = new * i
return new
root = tkinter.Tk()
root.title('Нахожедние факториала')
root.geometry("800x500")
print(root.geometry())
tkinter.Label(root, text="Нахождение факториала.").pack(pady=5)
tkinter.Label(root, text="Выход через ввод 0.").pack(pady=5)
vvod = tkinter.Entry(root, width=50, justify=tkinter.CENTER)
vvod.pack()
ttk.Button(root, text="Посчитать", command=factorialo).pack(pady=5)
tkinter.Label(root, text=new).pack(pady=20)
root.mainloop()
В общем сделал простой калькулятор факториала с UI на TkInter, при вводе в поле ввода и последующем нажатии на кнопку решения ниже должно выводить ответ, но выдаёт ошибку что якобы new не определено, если введу new = 1 до функции, то в ответе будет постоянно показана 1, помогите пожалуйста :)
Ответы (1 шт):
Дело в том, что переменная new у вас объявлена внутри функции factorialo, а значит является локальной переменной этой функции и неизвестной за ее пределами.
Поэтому ошибку неизвестной переменной вы видите именно при попытке работы с этой переменной из 26 строки, которая находится вне функции:
Traceback (most recent call last):
File "PythonCode.py", line 26, in <module>
tkinter.Label(root, text=new).pack(pady=20)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NameError: name 'new' is not defined
Самый простой способ решить проблему — сделать переменную new глобальной, т.е. вынести ее за пределы функции. При этом, чтобы внутри функции переменная new не определялась как локальная переменная, ее нужно тоже пометить соответствующим образом (global new)
new = 1
def factorialo():
global new
. . .
. . .