所以我试图创建一个游戏,其中'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
答案 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()