将文件中的字符读入列表会导致问题

时间:2015-12-16 16:22:44

标签: python list file tkinter

我有一些代码从单词列表中选择一个随机单词并将其显示在标签上。然后,用户必须正确地重新键入该单词以得分。 我决定使用一个文本文件来存储单词并将其读入程序中的列表中,但这会导致问题。

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

1 个答案:

答案 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)