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)
随机数的范围与
if
和elif
语句中测试的范围不匹配。random.randint
在其参数之间生成一个随机数,包括两个端点。另一方面,一个range
包含其起始值,但不包含其结束值。在当
randint
生成数字100时,if
不会检测到它,因此您会从函数的底部掉下来,Python将返回None
。这就是为什么稍后在代码中出现错误的原因。在快速修复方法是使用
random.randrange
,而不是random.randint
。这将生成一个0-99范围内的随机数,这是您的代码检查的内容。在进一步的改进可能是根本不使用
range
,因为您可以简单地进行少于比较的操作来获得相同的效果:我保留了返回值,但是如果您不希望返回值同时包含},那么您可能还希望将第一个
0
和{randint
更改为randrange
(或者只调整边界)。在以下是“无”的来源:
相关问题 更多 >
编程相关推荐