2012-07-10 47 views
0

我試圖做一個簡單的「猜測遊戲」,但它所做的只是要求輸入,就是這樣。我的猜測遊戲有什麼問題?

這裏是我的代碼:

import random 

def guess(): 
    if a == b: 
     print "Correct!" 
     n = input("Press 0 to quit or 1 to try again.") 
     if n == 0: 
      print "" 
     if n == 1: 
      return guess 
    else: 
     print "Wrong! " 
     n = input("Press 0 to quit or 1 to try again.") 
     if n == 0: 
      print "" 
     if n == 1: 
      return guess 

a = random.randint(1,2000) 
b = input("Guess a number between 1 and 2000 ") 
+7

您定義了'guess'方法,但沒有調用它。 – eumiro 2012-07-10 14:00:17

+7

首先,不要在Python 2中使用'input'(使用'raw_input')。其次,你永遠不會調用'guess()'。 – geoffspear 2012-07-10 14:00:29

+0

就像@Wooble所說的,避免使用'input',因爲它相當於'eval(raw_input())',這意味着它將執行任意的Python代碼。 – thegrinner 2012-07-10 14:06:53

回答

9

你是不是調用guess功能。你應該在結尾處加上:

guess(a, b) 

,你應該如下修改guess功能:

def guess(a, b): 
    # your code here 

這是必要的,因爲你需要的值ab傳遞到您的guess功能。否則,guess函數中的ab沒有任何價值(它們只是未定義的局部變量),Python不知道該怎麼做。

通過以上操作,您至少可以檢查您是否猜對了。但是如果你想重複猜測,你需要更多地修改代碼。


作爲一個例子,這裏是猜測遊戲的更新版本,做工作:

import random 

def guess(a): 
    b = raw_input("Guess a number between 1 and 2000 ") 
    if a == b: 
     print "Correct!" 
    else: 
     print "Wrong! " 
     n = raw_input("Press 0 to quit or 1 to try again.") 
     if n == "0": 
      print "" 
     if n == "1": 
      guess(a) 

a = random.randint(1, 2000) 
guess(a) 

功能guess現在只需一個整數需要被猜到的整數。在函數內部,我們要求用戶輸入一個整數,我們將它存儲在b中。然後我們告訴用戶猜測是否正確。如果猜測是正確的,那麼功能guess就結束了。

如果猜測是錯誤的,那麼我們讓用戶有機會再次嘗試,如果他們想要。請注意,我們現在檢查if n == "0":而不是if n == 0:,因爲n是一個字符串,而不是一個整數。如果用戶輸入1,那麼我們再次調用guess,整數將被猜測(a),整個事情再次開始。

+0

除了這不會解決程序的所有其他問題,例如嘗試返回自己的'guess'。 – geoffspear 2012-07-10 14:02:17

+1

@Wooble:的確如此。但修復代碼必須從某處開始。 – 2012-07-10 14:04:08

+0

請考慮包括關於使用[raw_input](http://docs.python.org/library/functions.html#raw_input)而不是輸入的內容 - 它更安全,因爲它不包含「eval」調用! – thegrinner 2012-07-10 14:04:09