编程新手,我正在尝试制作我的第一个程序,但是我遇到了错误,我不知道为什么。它应该将速度从每小时英里数转换为每小时公里数
unit = input(str("is your speed in mph or kmh? ")).lower()
value = float(input("what is your speed? "))
if unit == 'mph':
result = str(unit * 1.6) + 'kmh'
if unit == 'kph':
result = str(unit / 1.6) + 'mph'
else:
pass
print(value, unit, "is equal to ", result)
追踪(最近一次通话): 文件“C:\ Users \ spenc \ Desktop \ Coding \ speedconverter.py”,第5行,in result = str(单位* 1.6)+'kmh' TypeError:不能将序列乘以'float'
类型的非int答案 0 :(得分:2)
您使用unit
代替value
。另请注意if
和input
之间的差异。它还建议使用elif
:
unit = input(str("is your speed in mph or kmh? ")).lower()
value = float(input("what is your speed? "))
if unit == 'mph':
result = str(value * 1.6) + 'kmh'
elif unit == 'kmh':
result = str(value / 1.6) + 'mph'
print(result)
else:
pass
print(value, unit, "is equal to ", result)
答案 1 :(得分:0)
哦,这很简单。你正在增加一个' str'通过“浮动”对象。仔细检查您的代码:
unit = input(str("is your speed in mph or kmh? ")).lower()
返回一个字符串。
你想这样做:
if unit == 'mph':
result = str(value * 1.6) + 'kmh'
elif unit == 'kph':
result = str(value / 1.6) + 'mph'
else:
pass
你也可能意味着:
unit = str(input('Is your speed in mph or kmh?')).lower()
由于前一版本是从字符串显式创建字符串。另外值得注意的是,按惯例,使用' '
表示简单的字符串。
编辑:为了详细说明字符串乘法,我们举个例子:
foo = 'foo'
foo * 3 # multiplication by int produces foofoofoo
foo * 2.5 # multiplication by double produces error
在上面的例子中,我们知道将原始字符串乘以整数是有效的。为什么是这样?好吧,就像要求程序制作n
foo
一样简单。这很容易做到。这就像这样:
'foo' + 'foo' + 'foo'
您将在此处注明使用加法运算符(支持)。
另一方面,我们试试这个:
'a' * .5
该计划应该做什么?我们要求写一半的信。该程序可以解释这许多方式(例如,将a
的二进制或十六进制表示除以.5
),但没有明确的方法来返回预期结果。相反,我们只是得到一个错误。
我们可以做的是通过明确地将float
转换为int
来绕过类型错误:
'a' * int(.5) # works and returns ''
请注意,虽然''
int(.5)
是0
,但我们得到int(.5)
,这就是事情变得混乱的地方。如果您不了解该语言的隐含行为,许多人会期望1
为str * float
,这会导致意外行为。
这一切都导致了一个非常重要的观点,以及像int(float)
这样的事情导致错误的原因:我们拥有的隐式行为(假设你的意思是explicit
)会产生错误(和在许多语言中它确实如此)因此Python非常int
关于你的工作。如果你想要int
,你必须要求ImportError: [joblib] Attempting to do parallel computing without protecting your import on a system that does not support forking. To use parallel-computing in a script, you must protect your main loop using "if __name__ == '__main__'". Please see the joblib documentation on Parallel for more information
,这样可以产生更清晰,更易于阅读(和理解)的代码。