python中类的递归函数

时间:2014-05-26 19:12:28

标签: python

我不知道,为什么不在python中使用该代码。问题是,我可以得到数字,但有时一些数字是统一的。我想在1到90之间做5个不同的数字。

class lottery:
    def __init__(self):
        self.price = 50
    def list(self):
        numbers = []            
        for i in range(0,5):
            numbers.append(random.randint(0,90))
        for i in range(1,5):
            for j in range(0,i-1):
                if (numbers[i]==numbers[j]):
                    game.list()
        return numbers
game = lottery()
game.list()

或者有没有更好的方法来解决我的问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用random.sample

def list(self):
    return random.sample(xrange(90), 5)

这是(特别是对于5的大值)比每次随机化创建重复时更有效,并且还避免了堆栈溢出的可能性。

答案 1 :(得分:1)

首先,您应该导入random模块:

import random

问题是你没有返回你从递归调用中获得的结果,因此你仍然会返回list重复的数字。它应该是:

def list(self):
    numbers = []
    for i in range(0, 5):
        numbers.append(random.randint(0, 90))
    for i in range(1, 5):
        for j in range(0, i - 1):
            if (numbers[i] == numbers[j]):
                return self.list()  # return
    return numbers

请注意self用于访问调用该方法的类的实例。另外,请勿忘记print结果:

game = lottery()
print game.list()

注意:

请勿使用list作为变量或方法的名称,因为它会隐藏list的内置定义。