Python 获取非类型()<;=int()

Python 获取非类型()<;=int(),python,python-3.x,Python,Python 3.x,我的代码生成一个随机加权数 然而,我得到了一个错误 output expected .05 output received .06 问题是eval_autograder(n)有问题,但如何解决此问题以显示直方图?以下是无的来源: >>> 100 in range(95,100) False >>> 以下是“无”的来源: >>> 100 in range(95,100) False >>> 以下是“无”的来源: &g

我的代码生成一个随机加权数

然而,我得到了一个错误

output expected .05 output received .06

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

以下是无的来源:

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

以下是“无”的来源:

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

以下是“无”的来源:

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

以下是“无”的来源:

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

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

randint
生成数字100时,它不会被
if
s检测到,因此您会从函数底部掉下来,Python将返回
None
。这就是为什么您的代码稍后会出现错误

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

进一步的改进可能是根本不使用
范围
,因为您只需进行少于一次的比较即可获得相同的效果:

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)
def自动加载器():
i=randrange(0100)#此处更改函数,生成数字0-99
如果i<45:
返回randint(90100)
elif i<80:
返回随机数(80,89)
elif i<95:
返回randint(70,79)
else:#这捕获i<100,但我们不需要精确指定它
返回randint(0,69)

我保留了返回值的原样,但是您可能还希望将第一个
randint
更改为
randrange
(或者只调整边界)如果您不希望返回值同时包含
0
100
,则随机数的范围与
if
elif
语句中测试的范围不匹配
random.randint
在其参数之间生成一个随机数,包括两个端点。另一方面,
范围
包含其起始值,但不包含其结束值

randint
生成数字100时,它不会被
if
s检测到,因此您会从函数底部掉下来,Python将返回
None
。这就是为什么您的代码稍后会出现错误

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

进一步的改进可能是根本不使用
范围
,因为您只需进行少于一次的比较即可获得相同的效果:

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)
def自动加载器():
i=randrange(0100)#此处更改函数,生成数字0-99
如果i<45:
返回randint(90100)
elif i<80:
返回随机数(80,89)
elif i<95:
返回randint(70,79)
else:#这捕获i<100,但我们不需要精确指定它
返回randint(0,69)

我保留了返回值的原样,但是您可能还希望将第一个
randint
更改为
randrange
(或者只调整边界)如果您不希望返回值同时包含
0
100
,则随机数的范围与
if
elif
语句中测试的范围不匹配
random.randint
在其参数之间生成一个随机数,包括两个端点。另一方面,
范围
包含其起始值,但不包含其结束值

randint
生成数字100时,它不会被
if
s检测到,因此您会从函数底部掉下来,Python将返回
None
。这就是为什么您的代码稍后会出现错误

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

进一步的改进可能是根本不使用
范围
,因为您只需进行少于一次的比较即可获得相同的效果:

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)
def自动加载器():
i=randrange(0100)#此处更改函数,生成数字0-99
如果i<45:
返回randint(90100)
elif i<80:
返回随机数(80,89)
elif i<95:
返回randint(70,79)
else:#这捕获i<100,但我们不需要精确指定它
返回randint(0,69)

我保留了返回值的原样,但是您可能还希望将第一个
randint
更改为
randrange
(或者只调整边界)如果您不希望返回值同时包含
0
100
,则随机数的范围与
if
elif
语句中测试的范围不匹配
random.randint
在其参数之间生成一个随机数,包括两个端点。另一方面,
范围
包含其起始值,但不包含其结束值

randint
生成数字100时,它不会被
if
s检测到,因此您会从函数底部掉下来,Python将返回
None
。这就是为什么您的代码稍后会出现错误

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

进一步的改进可能是根本不使用
范围
,因为您只需做少于比较即可获得