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