我有一些代码从单词列表中选择一个随机单词并将其显示在标签上。然后,用户必须正确地重新键入该单词以得分。 我决定使用一个文本文件来存储单词并将其读入程序中的列表中,但这会导致问题。
try:
from tkinter import *
except ImportError:
from Tkinter import *
import random
with open("WORDS_FILE.txt") as f:
WORDS = list(f.readlines())
word_count = 0
def shuffle():
global word
go_btn.pack_forget()
while word_count < 4:
word = random.choice(WORDS)
label.config(text=str(word))
return
def check(event):
global word, word_count
if entry.get().lower() == word.lower():
update_right()
elif entry.get().lower() != word.lower():
update_wrong()
shuffle()
entry.delete(0, END)
def update_right():
global word, word_count
word_count += 1
WORDS.remove(word)
wrong_label.config(text="")
def update_wrong():
global word, word_count
wrong_label.config(text="WRONG!", fg='red')
root = Tk()
label = Label(root, font=("Helvetica", 60))
wrong_label = Label(root, text="", font =("Helvetica, 14"))
go_btn = Button(root, text="GO!", command=shuffle)
entry = Entry(root)
root.bind("<Return>", check)
label.pack()
wrong_label.pack()
go_btn.pack()
entry.pack()
entry.focus_set()
root.mainloop()
我的问题是,即使我正确地重新输入这个词,它仍然总是错误的。我检查了文本文件,似乎没有任何问题。文本文件如下:
Games
Development
Keyboard
Speed
Typer
Anything
Syndicate
Victory
答案 0 :(得分:0)
我认为错误来自这里:
with open("WORDS_FILE.txt") as f:
WORDS = list(f.readlines()) #Carriage return is given in each line.
在这一部分中,您将使用list
构造函数读取文件的每一行并创建一个列表。但是,当从文件读取时,每行在末尾都有一个回车符。所以基本上,你想通过在列表的每个字符串上应用.strip('\n')
来删除回车。这可以像这样天真地完成:
这样做的方法不好:
with open("WORDS_FILE.txt") as f:
WORDS = list(f.readlines()) #Carriage return is given in each line.
for i in range(len(WORDS)): # Iterate over list indexes
WORDS[i] = WORDS[i].strip('\n') # In place string replacement.
虽然这样做了,但是在你的单词列表上迭代两次似乎是正确的(一次在f.readlines()
中读取文件时,一次在剥离'\n'
之后)。避免这种情况有两种解决方案:
解决方案1:显式文件读取迭代:
WORDS = []
with open("WORDS_FILE.txt") as f:
for line in f:
WORDS.append(line.strip('\n'))
解决方案2:使用函数.strip('\n')
和 lambda-expression .readlines()
生成的map
函数应用with open("WORDS_FILE.txt") as f:
WORDS = list(map(lambda s: s.strip('\n'), f.readlines()))
函数EM>:
classnumber=$(cat "ClassTimetable.aspx?CourseId=156784&TermCode=1620" | tr '\n' '\r' | head -n 1 | cut -d '>' -f1235- | cut -d '<' -f1)