Python将输入与文件中的行进行比较



我的名字是Seix_Seix,我对我正在构建的Python程序有疑问。

问题是,我正在做一个"谜语游戏">(很傻,对吧?),以练习一些基本的Python技能。程序的预期流程是,你给它一个从1到5的数字,然后它打开一个文件,里面存储了所有的谜语,它会打印出你给出的数字行中的谜语。然后,它要求您输入答案,然后(这是所有崩溃的地方)它将您的答案与另一个文件(所有答案都在那里)上的相应行进行比较

这是代码,所以你可以看一下*(它是西班牙语,因为它是我的母语,但在评论中也有翻译和解释)

# -*- coding: cp1252 -*-
f = open ("C:UsersPublicoo.txt", "r") #This is where all the riddles are stored, each one in a separate line
g = open ("C:UsersPublicee.txt", "r") #This is where the answers to the riddles are, each one in the same line as its riddle
ques=f.readlines()
ans=g.readlines()
print "¡Juguemos a las adivinanzas!" #"Lets play a riddle game!"
guess = int(raw_input("Escoge un número entre 1 y 5. O puedes tirar los dados(0) ")) #"Choose a number from 1 to 5, or you can roll the dice (0)" #This is the numerical input, in which you choose the riddle
if guess==0:
import random
raw_input(random.randrange(1, 5))
print (ques[guess-1]) #Here, it prints the line corresponding to the number you gave, minus 1 (because the first line is 0, the second one is 1 and so on)
a=input("¿Sabes qué es?") #"Do you know the answer?" #Here, you are supposed to type the answer to the riddle.
while True:
if a==(ans[guess-1]): #And here, it is supposed to compare the answer you gave with the corresponding line on the answer file (ee.txt). 
print "ok" #If you are correct it congratulates you, and breaks the loop.
break
else:
print "no" #If you are wrong, it repeats its question over and over again

于是,我运行了这个程序。一段时间内一切都很好,直到我必须输入答案的那一刻;在那里,无论我放了什么,即使它是对的还是错的,它都会给我下一个错误:

Traceback (most recent call last):
File "C:Users[User]Desktoplol.py", line 16, in <module>
a=input("¿Sabes qué es?") #"Do you know the answer?" #Here, you are supposed to type the answer to the riddle.
File "<string>", line 1, in <module>
NameError: name 'aguacate' is not defined #It is the correct answer BTW

知道这个问题是在开始比较答案时产生的,我也认为这可能是因为我写错了。。。秀,你有什么建议吗?

提前感谢

您需要使用raw_input()而不是input(),否则Python将尝试计算输入的字符串-由于aguacate不是Python知道的表达式,它将抛出您找到的Exception。

此外,你的"掷骰子"程序也不起作用(试着输入0,看看会发生什么)。那应该是

if guess == 0:
# import random should be at the start of the script
guess = random.randrange(1,6)

根据要求,对您的代码发表一些其他评论:

总的来说,这很好。有一些小东西你可以优化:

您没有关闭已打开的文件。当你只读它们时,这不是问题,但一旦你开始写文件,它就会引起问题。最好尽快适应。最好的方法是使用with语句块;即使在程序执行过程中发生异常,也会自动关闭文件:

with open(r"C:UsersPublicoo.txt") as f, open(r"C:UsersPublicee.txt") as g:
ques = f.readlines()
ans = g.readlines()

请注意,我使用了原始字符串(如果字符串中有反斜杠,这一点很重要)。如果您将文件命名为tt.txt,您的版本就会失败,因为它会查找名为Public<tab>t.txt的文件,因为t会被解释为制表符。

另外,花点时间学习一下PEP-8,Python风格指南。它将帮助您编写可读性更强的代码。

由于您使用的是Python 2,所以可以去掉print (ques[guess-1])中的括号(或者切换到Python 3,因为Unicode,我还是建议使用它!此外,在Python 3中,raw_input()最终被重命名为input())。

然后,我认为你需要从你的答案字符串中去掉后面的换行符,否则它们将无法正确比较(同时,去掉不必要的括号):

if a == ans[guess-1].rstrip("n"): 

相关内容

  • 没有找到相关文章

最新更新