2011-03-27 36 views
0

我對python很陌生,所以我確定我的代碼效率很低,等等,但我只是感覺我的方式和此刻正在學習,所以請原諒我一般的無知。寫一個隨機生成的測驗,需要記得隨機生成的對象

我的測驗目前需要一系列的引號,並隨機打印出他們的前20個字符(通過片),這個想法是quizee背誦其餘的。

我想添加獲取整個報價的能力,但我不知道如何告訴python回憶隨機模塊生成的最後一個對象。

這裏是我的代碼:

import random 
control = True 

JCIIiii34 = "Valiant men never taste of death but once" 
SonnetSeventeen = "If I could write the beauty of your eyes,\nAnd in fresh numbers number all your graces,\nThe age to come would say this poet lies,\nSuch heavenly touches ne'er touched earthly faces." 
SonnetEighteen = "So long as men can breath and eyes can see,\nSo long lives this, and this gives life to thee." 
JCIii101 = "I had as lief not be as live to be\nIn awe of such a thing as I myself" 


print "After quote type 'exit' to leave, or 'next' for next quote" 

while control: 
    quote = random.choice([SonnetSeventeen,SonnetEighteen,JCIIiii,JCIii]) 
    print quote[:20] 
    var = raw_input ("\n") 
    if var == "exit": 
     control = False 
    elif var == "next": 
     print "\n" 
     control = True 

所以想什麼,我能夠做的就是增加一個elif的聲明說

elif var == "answer": 
    print #the full quote 

凡print語句調用的對象最初被切片,但完整地打印它。

我已經閱讀了隨機模塊的python庫條目,但沒有找到答案。我也開放更有效的方式做到這一點(我知道我可以將報價存儲在一個單獨的文件中,但還沒有弄清楚)。

在此先感謝您的幫助!

回答

2

您可以使用quote本身:

while control: 
    quote = random.choice([SonnetSeventeen,SonnetEighteen,JCIIiii34,JCIii101]) 
    print quote[:20] 
    var = raw_input ("\n") 
    if var == "exit": 
     control = False 
    elif var == "next": 
     print "\n" 
     control = True 
    elif var == "answer": 
     print quote 
+0

嗯,我覺得自己像個傻瓜。我考慮過它,但認爲它會隨機生成。因此,如果我沒有弄錯,在這樣的while循環中,隨機模塊不會再次隨機化,直到循環完成,並且對象「quote」將臨時指向最後生成的對象,直到它再次循環。這是否準確?編輯:謝謝! – user679400 2011-03-27 22:29:58

+0

是的,就是這樣。如果您需要保留更長時間,只需將該報價保存在另一個變量中(如'last_quote')。 – 2011-03-27 22:33:44

+0

優秀,謝謝! – user679400 2011-03-27 22:37:48

2

quote[:20]不破壞原來的quote。所以普通print quote應該工作!

(順便說一句,如果你仍然需要它,你不必記得從random的最後一個值,你可以保存它返回的最後一個值)

+0

我是個假人。我認爲,由於引用被分配給一個隨機生成的對象,它會在每次被調用時隨機生成,但我想在一個循環中它只會生成一次,直到它被告知再次生成爲止。 – user679400 2011-03-27 22:36:44

+0

不,你是對的 - 它會每次都會再生。我假設用戶應該在一個循環中回答測驗。如果沒有,你應該在當前循環之外移動引用選擇方法,並引入另一個循環:猜測當前引用的innner循環,程序邏輯的外循環(next quote/exit) – pajton 2011-03-27 22:41:17

0

相同的答案埃米利奧,但你也可以使用打印[20:]只打印先前未顯示的報價的其餘部分。此外,爲了simpifly什麼埃米利奧說,你可能只是做:

while True: 
    quote = random.choice([SonnetSeventeen,SonnetEighteen,JCIIiii34,JCIii101]) 
    print quote[:20] 
    var = raw_input ("\n") 
    if var == "exit": 
     break 
    elif var == "next": 
     print "\n" 
    elif var == "answer": 
     print quote[20:] 

在「elif的VAR ==‘未來’」的聲明,你並不需要控制分配給真正的,因爲它已經爲True時,達到那一點。