2012-10-05 144 views
1

我的名字是Seix_Seix,我對我正在構建的Python程序有疑問。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,關於如何做到這一點的任何建議是正確的?

預先感謝

回答

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"): 
+0

親愛的母親......它實際上工作!我真的覺得,**現在真的**啞......¬¬ 但是,雖然嚴重,但非常感謝** **非常**。 對於骰子的一部分,我很專注於解決比較問題,我完全忘了它... 哦!還有一件事...你可以給我一些關於代碼的意見嗎?我在這裏是一個完整的n00b,所以我可以使用我可以得到的所有反饋... 再次感謝, Seix_Seix –

+1

@Seix_Seix:好的,我編輯了我的答案。我希望你會像我一樣享受StackOverflow。您可能還需要花一點時間閱讀[FAQ](http://stackoverflow.com/faq),這將有助於您更好地開始工作(沒有任何惱人的老態偶的風險):) –

+0

+1,患者和完整答案。 – nneonneo

相關問題