2016-12-07 55 views
-2

我需要使用遞歸爲了輸入保持調用自己,如果兩個輸入的總和不等於100,但每次我嘗試,我總是以它問爲輸入一次,然後一旦輸入,它返回一個十六進制值。實現遞歸到python3類的方法

class Z: 
    def __init__(self, probabilityX = 0, probabilityY = 0): 
     self.probabilityX = "" 
     self.probabilityY = "" 
    def getProbability(self): 
     print(self.probabilityX, self.probabilityY) 
    def input(self): 
     self.probabilityX = int(input("Enter probability of x:")) 
     self.probabilityY = int(input("Enter probability of y:")) 
     if self.probabilityX + self.probabilityY != 100: 
      input(self) 

def main(): 
    purs = Z() 
    purs.input() 
    purs.getProbability() 
main() 

任何幫助,非常感謝! 編輯:修正了拼寫錯誤

+2

它應該是'self.input()',而不是'input(self)'。 – zondo

+0

[請求用戶輸入,直到他們給出有效響應]的可能的重複(http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-回覆) – wwii

回答

0

幾件事情:

  1. 首先,這些都不是類方法,這個詞有特定的含義,你不應該混淆。你在這裏處理簡單的方法。
  2. (過時)兩個input調用缺少右括號:

    self.probabilityX = int(input("Enter probability of x:") 
    self.probabilityY = int(input("Enter probability of y:") 
    

    應改爲:

    self.probabilityX = int(input("Enter probability of x:")) 
    self.probabilityY = int(input("Enter probability of y:")) 
    

    我猜他們是錯別字,當你張貼的問題:-)

  3. 調用input(self)不符合您的想法。 input是一個內置函數,你用self作爲提示調用它。您應該再次使用self.input()(也許它重命名爲input_probabilities逃避混亂

  4. (過時)purs.getProbabilityP是拼寫錯誤,這是purs.getProbability()

  5. __init__沒有多大意義:。

    def __init__(self, probabilityX = 0, probabilityY = 0): 
        self.probabilityX = "" 
        self.probabilityY = "" 
    

    我不知道爲什麼你的probability(X|Y)提供默認參數,然後不分配給那些相應的實例屬性你應該做的:

    def __init__(self, probabilityX = 0, probabilityY = 0): 
        self.probabilityX = probabilityX 
        self.probabilityY = probabilityY 
    

作爲最後一點,我建議不要使用遞歸;一個while循環有效地完成這個技巧。

+0

非常感謝您的幫助Jim! – mikecal7