Tkinter python 3名称';用户输入';没有定义

Tkinter python 3名称';用户输入';没有定义,tkinter,python-3.6,palindrome,nameerror,Tkinter,Python 3.6,Palindrome,Nameerror,所以我得到了这个任务,我应该创建一个回文检测器,并使用tkinter创建一个简单的接口。我们还必须删除指定字符并用空格替换它们。我还想补充一点,我们不允许使用isalnum() 现在的问题是: File "Documents/palindrometkinter.py", line 71, in result turn() File "Documents/palindrometkinter.py", line 62, in turn i = len(user_input) NameError: n

所以我得到了这个任务,我应该创建一个回文检测器,并使用tkinter创建一个简单的接口。我们还必须删除指定字符并用空格替换它们。我还想补充一点,我们不允许使用isalnum() 现在的问题是:

File "Documents/palindrometkinter.py", line 71, in result
turn()
File "Documents/palindrometkinter.py", line 62, in turn
i = len(user_input)
NameError: name 'user_input' is not defined 
说到python,我真的是个新手,所以我不是很擅长,但在几个小时的无所事事后,我开始寻求帮助。 这是我到目前为止的代码

# -*- coding: UTF-8 -*-

import tkinter
import tkinter.messagebox


def main():
 settings()
 tkinter.mainloop()

def settings():
 main_window = tkinter.Tk()
 top_frame = tkinter.Frame()
 mid_frame = tkinter.Frame()
 bottom_frame = tkinter.Frame()


 main_window.title("Palindromdetektor")
 main_window.geometry("400x400")


 global label1
 label1 = tkinter.Label(top_frame, text = "Skriv in ett palindrom nedan 
                                       för att testa det!",
                           bg = "green", width = 60, height = 6)
 global button1
 button1 = tkinter.Button(mid_frame, text = "Testa palindrom", height = 
    3, width = 22, command = result)

 global button2
 button2 = tkinter.Button(bottom_frame, text ="Spara palindrom", height 
  = 3, width = 22, command = save)                                

 global button3
 button3 = tkinter.Button(bottom_frame, text ="Avsluta programmet", 
     height = 3, width = 22, command=main_window.destroy)

 global palindromentry
 palindromentry = tkinter.Entry(mid_frame, width = 67)
 palindromentry.pack()


 top_frame.pack()
 mid_frame.pack()
 bottom_frame.pack()

 label1.pack()
 button1.pack()
 button2.pack()
 button3.pack()

def entry():
 not_valid = " -,.!?:;'+()/" #The not accepted characters
 user_input = palindromentry.get()
 i=0
 while i < len(not_valid): 
    user_input = user_input.replace( not_valid[i], "")
    i = i + 1
 global backward_string
 backward_string = ""


def turn():
 i = len(user_input)
 while i > 0:
   backward_string += user_input[i-1] 
   i -=1
   if user_input == backward_string:
    equal = True     


def result():
 turn()
 entry()
 feedback_string = ""
 if (user_input == backward_string):
    label1.config(text="Ja, detta är ett palindrom!", bg="green") #when 
                                                      it's a palindrome

 elif (user_input != backward_string):
    label1.config(text="Det är inte en palindrom!", bg="red") #message 
                                          when it's not a palindrome

 else:
     label1.config(text="Hoppsan nu har något gått fel!")    


def save():

 if (user_input == backward_string):
    my_palindrome = open("palindrom.txt", "a") # if it's a 
                             palindrome you should be able to save it.
    my_palindrome.write(user_input + "\n")
    label1.config(text="Palindrom har sparats!")

 elif (user_input != backward_string):
    label1.config(text="Det gick inte att spara, måste vara en 
                         palindrom!")# you can't save it when it's not

 else:
    label1.config(text="Något gick fel!") # when something goes wrong





if __name__ == '__main__':
     main()
#-*-编码:UTF-8-*-
进口tkinter
导入tkinter.messagebox
def main():
设置()
tkinter.mainloop()
def设置():
main_window=tkinter.Tk()
顶部框架=tkinter.frame()
中间帧=tkinter.frame()
底部框架=tkinter.frame()
主窗口标题(“回文detektor”)
主窗口几何图形(“400x400”)
全局标签1
label1=tkinter.Label(上框,text=“Skriv in ett palindrom nedan
för att testa det!“,
bg=“绿色”,宽度=60,高度=6)
全局按钮1
button1=tkinter.Button(中间帧,text=“Testa回文”,高度=
3,宽度=22,命令=结果)
全局按钮2
button2=tkinter.Button(底部框架,text=“Spara回文”,高度
=3,宽度=22,命令=save)
全局按钮3
button3=tkinter.Button(底部框架,text=“Avsluta programmet”,
高度=3,宽度=22,命令=main_window.destroy)
全局回文
回文长度=tkinter.Entry(中间帧,宽度=67)
palindromentry.pack()
顶部框架包()
mid_frame.pack()
底部框架包()
标签1.pack()
按钮1.pack()
按钮2.pack()
按钮3.pack()
def entry():
not_valid=“-,.!?:;”+()/“#未接受的字符
user\u input=palindromentry.get()
i=0
而i0时:
向后_字符串+=用户_输入[i-1]
i-=1
如果用户\u输入==向后\u字符串:
相等=真
def result():
转()
条目()
反馈_字符串=“”
如果(用户输入==反向字符串):
label1.config(text=“Ja,dettaär ett palindrom!”,bg=“green”)#
这是回文
elif(用户输入!=向后输入字符串):
label1.config(text=“Detär inte en palindrom!”,bg=“red”)#消息
当它不是回文时
其他:
label1.config(text=“hoppsannuharnågot gått fel!”)
def save():
如果(用户输入==反向字符串):
my_palindrome=open(“palindrom.txt”,“a”)#如果是a
回文你应该能够保存它。
我的回文。写(用户输入+“\n”)
label1.config(text=“Palindrom har sparats!”)
elif(用户输入!=向后输入字符串):
label1.config(text=“Det gick inte att spara,måste vara en
回文!)#如果没有回文,则无法保存
其他:
label1.config(text=“Något gick fel!”)#当出现问题时
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
您的用户输入变量仅在输入函数中定义。 您正在尝试访问当前上下文中不存在的变量(
turn()

如果您希望能够访问每个函数中的变量,请将其定义为全局变量,方法是将其置于脚本中其他所有变量之上

或者每次希望访问时都使用您的
回文条目.get()
。 希望这能帮助您更多地了解python


这可能会有帮助:

所以我让用户输入了一个全局变量。结果是程序启动,但当您单击“Testa回文”(尝试回文)按钮或“spara回文”(保存回文)按钮时,不会发生任何事情。