获取Nonetype()< = int()

时间:2014-04-01 23:58:07

标签: python python-3.x

我的代码生成随机加权数

但是,我收到了错误

output expected .05 output received .06

问题在于eval_autograder(n),但是如何解决此问题以显示直方图?

2 个答案:

答案 0 :(得分:3)

这是None的来源:

>>> 100 in range(95,100)
False
>>> 

答案 1 :(得分:0)

您的随机数范围与您在ifelif语句中测试的范围之间存在不匹配。 random.randint在其参数之间生成一个随机数,包括两个端点。另一方面,range包含其起始值,但不包含其结束值。

randint生成数字100时,if无法检测到它,因此您将从函数的底部掉下来并且Python将返回None 。这就是您稍后在代码中收到错误的原因。

作为快速解决方法,请使用random.randrange而不是random.randint。这将生成0-99范围内的随机数,这是您的代码检查的内容。

进一步的改进可能是根本不使用range,因为你可以简单地进行比较而不是比较以获得相同的效果:

def autograder():
    i = randrange(0,100) # changed function here, generates numbers 0-99
    if i < 45:
        return randint(90,100)
    elif i < 80:
        return randint(80,89)
    elif i < 95:
        return randint(70,79)
    else: # this catches i < 100, but we don't need to specify it exactly
        return randint(0,69)

我保留了返回值,但如果您不想要返回值,您可能还想将第一个randint更改为randrange(或只是调整边界)包括0100