我的名字是Seix_Seix,我怀疑我正在构建的Python程序。
问题是,我正在做一个“谜语游戏”(愚蠢,对吧?),来练习一些基本的Python技能。程序的预期流程是你给它一个从1到5的数字,然后它打开一个文件,其中存储了所有的谜语,并打印出你给出的数字行中的那个。 然后,它会要求您输入一个输入,在其中键入答案,然后(这是所有崩溃的地方)它将您的答案与另一个上的相应行进行比较文件(所有答案都是)。
这是代码,所以你可以看看*(它是西班牙语,因为它是我的母语,但它也在评论中有翻译和解释)
# -*- coding: cp1252 -*-
f = open ("C:\Users\Public\oo.txt", "r") #This is where all the riddles are stored, each one in a separate line
g = open ("C:\Users\Public\ee.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]\Desktop\lol.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
我知道这个问题在开始比较答案时会产生,我也知道,这可能是因为我写错了...... Sooo,任何关于怎么做对了?
提前致谢
答案 0 :(得分:1)
您需要使用raw_input()
而不是input()
,否则Python会尝试评估输入的字符串 - 并且因为aguacate
不是Python知道的表达式,所以它会抛出异常你找到。
此外,您的“掷骰子”例程不起作用(尝试输入0
并查看会发生什么)。那应该是
if guess == 0:
# import random should be at the start of the script
guess = random.randrange(1,6)
根据要求提供有关您的代码的其他一些评论:
总的来说,这很好。您可以优化一些小事情:
您没有关闭已打开的文件。当你只是阅读它们时,这不是问题,但是一旦你开始写文件就会引起问题。最好快点习惯。最好的方法是使用with
语句块;即使在程序执行期间发生异常,它也会自动关闭您的文件:
with open(r"C:\Users\Public\oo.txt") as f, open(r"C:\Users\Public\ee.txt") as g:
ques = f.readlines()
ans = g.readlines()
请注意,我使用了原始字符串(如果字符串中有反斜杠,则很重要)。如果您已将文件命名为tt.txt
,则您的版本将失败,因为它会查找名为Public<tab>t.txt
的文件,因为\t
将被解释为制表符。
另外,请花点时间研究PEP-8, the Python style guide。它将帮助您编写更易读的代码。
由于您正在使用Python 2,您可以删除print (ques[guess-1])
中的括号(或切换到Python 3,我建议无论如何因为Unicode!而且,在Python 3中,raw_input()
终于已重命名为input()
)。
然后,我认为您需要从答案字符串中删除尾随的换行符,否则它们将无法正确比较(同样,删除不必要的括号):
if a == ans[guess-1].rstrip("\n"):