在python3类方法中实现递归

在python3类方法中实现递归,python,python-3.x,class,recursion,Python,Python 3.x,Class,Recursion,我需要使用递归,以便在两个输入的总和不等于100时,输入继续调用自身,但每次我尝试时,我总是以它请求输入一次而结束,然后一旦输入,它返回一个十六进制值 class Z: def __init__(self, probabilityX = 0, probabilityY = 0): self.probabilityX = "" self.probabilityY = "" def getProbability(self): print

我需要使用递归,以便在两个输入的总和不等于100时,输入继续调用自身,但每次我尝试时,我总是以它请求输入一次而结束,然后一旦输入,它返回一个十六进制值

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()
非常感谢您的帮助! 编辑:修复了键入错误

以下几点:

  • 首先,这些不是类方法,这个术语有一个特定的含义,您不应该混淆。你在处理简单的方法
  • (过时)两个
    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:"))
    
    我猜当你发布这个问题时,它们是错别字:-)

  • 调用
    input(self)
    并不能实现您的想法
    input
    是一个内置函数,您可以使用
    self
    作为提示来调用它。您应该再次使用
    self.input()
    (并可能将其重命名为
    input\u probabilities
    )以避免混淆

  • (过时)
    purs.getProbabilityP
    拼写错误,它是
    purs.getProbability()

  • 您的
    \uuuuu init\uuuuuu
    没有多大意义:

    def __init__(self, probabilityX = 0, probabilityY = 0):
        self.probabilityX = ""
        self.probabilityY = ""
    
    我不知道为什么您为
    概率(X | Y)
    提供默认参数,然后不将这些参数分配给相应的实例属性。您应该这样做:

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

  • 作为最后一点,我建议不要使用递归;
    while
    循环有效地发挥了作用。

    应该是
    self.input()
    ,而不是
    input(self)
    。非常感谢您的帮助,Jim!