<pre><code>randang=randir()
velx=math.floor(float(antvelocity)*float(math.cos(randang)))
</code></pre>
<p>因为第二行代码似乎是问题所在,最可能的原因是<code>randang</code>,因为<code>float()</code>不需要</em>浮点数,如果你做了类似<code>float('a')</code>这样的蠢事,你会得到一个不同的错误:</p>
<blockquote>
<p>ValueError: could not convert string to float: a</p>
</blockquote>
<p>实际上,对<code>randir</code>的定义说明了为什么:</p>
<pre><code>def randir():
n=float(random.randint(0,8))
ang=(n*math.pi)/4
</code></pre>
<p>它并没有明确地返回任何东西,</em>意味着您将得到<code>None</code>。</p>
<p>作为一个简单的例子,请参阅以下文本:</p>
<pre><code>>>> def nothing():
... pass
...
>>> print nothing()
None
>>> import math
>>> print math.cos(nothing())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a float is required
</code></pre>
<p>您需要从您的<code>randir()</code>函数返回一个float(或者一些可以变成float的东西):</p>
<pre><code>>>> def nothing():
... return 0.5
...
>>> print nothing()
0.5
>>> import math
>>> print math.cos(nothing())
0.87758256189
</code></pre>
<p>在您的情况下,函数应该是:</p>
<pre><code>def randir():
n = float(random.randint(0,8))
ang = (n * math.pi) / 4
return ang
</code></pre>