<p>哦,那很简单。你要用一个“str”对象乘以一个“float”。再次检查您的代码:</p>
<pre><code>unit = input(str("is your speed in mph or kmh? ")).lower()
</code></pre>
<p>返回字符串。你知道吗</p>
<p>您想这样做:</p>
<pre><code>if unit == 'mph':
result = str(value * 1.6) + 'kmh'
elif unit == 'kph':
result = str(value / 1.6) + 'mph'
else:
pass
</code></pre>
<p>你的意思可能是:</p>
<pre><code>unit = str(input('Is your speed in mph or kmh?')).lower()
</code></pre>
<p>因为前一个版本是从一个字符串显式创建一个字符串。同样值得注意的是,按照惯例,对简单字符串使用<code>' '</code>。你知道吗</p>
<p><strong>编辑:</strong>要详细说明字符串乘法,让我们举这个例子:</p>
<pre><code>foo = 'foo'
foo * 3 # multiplication by int produces foofoofoo
foo * 2.5 # multiplication by double produces error
</code></pre>
<p>在上面的例子中,我们知道将原始字符串乘以整数是有效的。为什么会这样?这很简单,基本上就是让程序做<code>n</code><code>foo</code>,这很容易做到。就像这样:</p>
<pre><code>'foo' + 'foo' + 'foo'
</code></pre>
<p>您将注意到这里使用了加法运算符(这是受支持的)。你知道吗</p>
<p>另一方面,让我们试试这个:</p>
<pre><code>'a' * .5
</code></pre>
<p>程序应该做什么?我们要的是字母a的一半。程序可以用许多方法解释这个问题(例如用<code>a</code>的二进制或十六进制表示除以<code>.5</code>),但是没有明确的方法返回预期的结果。相反,我们只是得到一个错误。你知道吗</p>
<p>我们可以通过显式地将<code>float</code>转换为<code>int</code>来绕过类型错误:</p>
<pre><code>'a' * int(.5) # works and returns ''
</code></pre>
<p>注意这里我们得到了<code>''</code>,因为<code>int(.5)</code>是<code>0</code>,这就是事情变得混乱的地方。很多人认为<code>int(.5)</code>是<code>1</code>,如果你没有意识到语言的隐含行为,这可能会导致意想不到的行为。你知道吗</p>
<p>所有这些都引出了一个非常重要的问题,这也是像<code>str * float</code>这样的事情导致错误的原因:我们拥有的更隐含的行为(假设你的意思是<code>int(float)</code>)可能会产生bug(在许多语言中都会产生bug),因此Python对你所做的事情非常<code>explicit</code>。如果你想要一个<code>int</code>,你必须要一个<code>int</code>,这会产生更干净、更容易阅读(和理解)的代码。你知道吗</p>