2012-11-11 29 views
0

有時,當我在IDLE運行它,外殼將只顯示在怠速運轉時有時沒有返回與優化

>>

然而,當我關閉窗口並中止程序,它會在關閉之前的一秒鐘內正常顯示。大多數情況下,它會工作。

+0

請確保此處的縮進與您的程序中的縮進相同;例如,它在'def play_again():'之後關閉。 –

+0

這聞起來像功課。 –

+0

#2,你應該在代碼審查中發佈這樣的內容:http://codereview.stackexchange.com/。 @GamesBrainiac,它可能是家庭作業,但具體足夠通過。 – lolopop

回答

0

對於您在IDLE中的問題,我會定期嘗試flushing the stdout以查看它是否有幫助。

有關您的代碼如下一些意見:

  • 關於使用全局變量,在大多數情況下,你可以簡單地通過函數參數代替其使用。當你(認爲你)需要修改一個全局變量時,通常你會選擇寫錯的函數。作爲一個例子,絕對不需要在generate()中設置猜測變量,你可以在play()中完成。

  • 而不是allowed = ('0','1','2','3','4','5','6','7','8','9','0','+','*'), 考慮import string ; allowed= list(string.digits+'+'+'*')。在解釋器中執行dir(string)以獲得更有用的變量。

  • 沒有必要評估布爾值的相等性。 while (numguesses < maxguesses) and flag==True:應該是while (numguesses < maxguesses) and flag:

  • play_again()是不必要的遞歸。

  • s1 = secret[0] ; s2 = secret[1]可能是s1,s2=secret[:2]

  • for i in range(max): ; num = num + str(randint(0,9))可以改寫爲"".join([str(randint(0,9)) for i in range(max)])。有些人會認爲第一個更具可讀性,您可以自行決定。

最後這一點:

if (i%2 == 0): 
    evaluated = evaluated + s1 
else: 
    evaluated = evaluated + s2 

可以簡單地通過evaluated= (evaluated+s1) if not(i%2) else (evaluated + s2)取代。 我認爲你實際上並不需要括號,但它們增加了可讀性,恕我直言:

很明顯,關於代碼的一般結構還有很多可以說的,我試圖專注於python語言功能,你可能不會此時知道

+0

非常感謝,我設法清理了一些並刪除了5個變量! – userrandomnums