Crossin的编程教室

标题: 每日一坑1疑问 [打印本页]

作者: 小灰飞    时间: 2017-1-4 15:04
标题: 每日一坑1疑问
初学者,写了下每日一坑1的解答,但是执行结果不理想。请大家帮忙分析下问题出在哪里了,谢谢
class Lottery:
    def __init__(self,m,n):
        self.m=m+1
        self.n=n
    def Doublecolor(self):
        import random
        self.a={}
        for i in range(1,self.m):
            b=random.randint(1,self.n)
            if b not in self.a:
                self.a[i]=b
            else:
                self.m=self.m+1
        return self.a
c=Lottery(15,40)
print c.Doublecolor()
print c.m
作者: crossin先生    时间: 2017-1-4 20:55
还可以啊,你都用上面向对象了。
只是你取数的逻辑不清楚,感觉被你弄复杂了。我没看懂你 self.m = self.m +1 是想起什么作用

其实有个方法 random.sample ,可以更简单的来做这个题
作者: 小灰飞    时间: 2017-1-4 21:08
crossin先生 发表于 2017-1-4 20:55
还可以啊,你都用上面向对象了。
只是你取数的逻辑不清楚,感觉被你弄复杂了。我没看懂你 self.m = self.m  ...

谢谢您。我本来想的是,如果某次随机生成的数与已经生成过的数有重复,就增加一次随机生成,所以用了self.m=self.m+1。但是执行结果显示没有增加随机生成次数。请教下,如果按目前这个思路,要怎么改呢?
作者: crossin先生    时间: 2017-1-5 19:16
小灰飞 发表于 2017-1-4 21:08
谢谢您。我本来想的是,如果某次随机生成的数与已经生成过的数有重复,就增加一次随机生成,所以用了self ...

把for循环改成while,用一个数值来记录循环次数,如果产生了重复的,就不算次数,否则减一,直到全部结束。

或者直接用最终列表的元素个数来作为while的条件




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5