我正在编写一个小程序,它应该在文本文件中找到最长的句子。
我继续阅读我的代码,但我不明白为什么它不起作用。
该程序正在使用Entry
小部件。
基本上search()
函数处理一些例外(这部分工作),如果输入有效的文件名,它会跳转到while
循环。
while循环读取每一行并指定最长的longest
。
一旦到达空行,就会执行(或应该)elif
语句。
它应该显示Entry
小部件中最长的句子。
问题是最终在条目小部件中出现的问题。
我在Windows上使用Python 3.
这是我的代码:
from tkinter import *
def search(event):
try:
txtFile = open(str(entr.get()), 'r')
except:
entr.delete(0, END)
entr.insert(0, "File can't be found")
else:
x = 0
while 1:
rd = txtFile.readline()
if len(rd)> x:
longest = rd
x = len(rd)
elif rd == '':
break
txtFile.close()
entr.delete(0, END)
entr.insert(0, longest)
#####MAIN#####
wd = Tk()
wd.title('Longest sentence searcher')
entr = Entry(wd, bg='White')
entr.grid(row=0, column=0)
entr.bind('<Return>', search)
bttn = Button(wd, text='Search', bg='Light Green')
bttn.grid(row=1, column =0)
bttn.bind('<Button-1>', search)
wd.mainloop()
答案 0 :(得分:1)
问题是您的代码是用于关闭文件和显示最长行的代码:
while 1:
rd = txtFile.readline()
if len(rd)> x:
longest = rd
x = len(rd)
elif rd == '':
break
txtFile.close()
entr.delete(0, END)
entr.insert(0, longest)
break
突破了while循环,并且由于没有更多的代码,Python从函数返回。将最后三行移出while
- 循环,你应该是好的:
# Using 'True' for infinite loops is more idiomatic/pythonic
while True:
rd = txtFile.readline()
if len(rd) > x:
longest = rd
x = len(rd)
elif rd == '':
break
txtFile.close()
entr.delete(0, END)
entr.insert(0, longest)