文件读取和变量分配

时间:2018-04-15 07:47:14

标签: python list text list-comprehension filereader

所以我试图创建一个游戏,其中'GameMaster'从.txt文件中选择第一个单词,然后用户尝试猜测该单词。一旦用户正确猜出该单词,GameMaster会查看文件中的下一行,用户必须再次猜测,依此类推...

我遇到的问题是让程序在游戏继续时分配变量。程序应该迭代地查看,直到没有更多的单词可供选择,无论是2还是无限。

由于我在python中使用文件交互的经验不多,我最好的例子就是这样:

文件“input.txt”将包含:



大鼠
小鼠

我正在查看.txt文件中的内容:

def file_read():
with open ('/Users/someone/Desktop/input.txt', 'r') as myfile:
    data = myfile.read()
    for line in data:
        line.rstrip()
return data

3 个答案:

答案 0 :(得分:0)

您的函数返回文件的全部内容,保持不变。 myfile.read()以字符串形式返回文件中的数据。然后for循环遍历该字符串中的每个字符,而不是行。此外,rstrip()仅对每个角色起作用。它不会影响data的内容,因为data是一个不可变的字符串,rstrip()的返回值不存储在任何地方。

这样的事情更适合:

def file_read():
    with open('/Users/someone/Desktop/input.txt') as myfile:
        return [line.rstrip() for line in myfile]

这将从文件中返回剥离行的列表。然后,您的单词猜测代码将遍历列表。

上述方法可行,但是,如果输入文件很大,则效率不高,因为所有文件都将被读入内存以构建列表。更好的方法是使用一次生成剥离线的生成器:

def file_read():
    with open('/Users/someone/Desktop/input.txt') as myfile:
        for line in myfile:
            yield line.rstrip()

现在这个功能如此简单,打扰它似乎毫无意义。您的代码可能只是:

with open('/Users/someone/Desktop/input.txt') as myfile:
    for line in myfile:
        user_guess_word(line.rstrip())

其中user_guess_word()是一个与用户交互以猜测单词是什么的函数,并在猜测正确后返回。

答案 1 :(得分:0)

这种方式使用readlines逐行获取list中的文件内容。 readlines会返回包含行的list

现在遍历list以检查用户输入是否与行内容匹配(在这种情况下是一个单词)。

with open ('/Users/someone/Desktop/input.txt', 'r') as myfile:
    words = myfile.readlines()
    while x < len(words):
        if words[x] == input('Enter word to guess'):
            print('Predicted word correctly')
        else:
            print('Wrong word. Try again')
            x -= 1
        x += 1

答案 2 :(得分:0)

你可以这样做,

def fun():
    data = open('filename', 'r').readlines()
    user_guess, i = None, 0
    while i < len(data):
        user_guess = input()
        if user_guess not None and user_guess == data[i]:
            i = i + 1

在比较user_guess和data [i]

时,请修剪()/ strip()