在简单的代码中获取错误,无法找出原因

时间:2018-02-06 13:19:25

标签: python

编程新手,我正在尝试制作我的第一个程序,但是我遇到了错误,我不知道为什么。它应该将速度从每小时英里数转换为每小时公里数

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

2 个答案:

答案 0 :(得分:2)

您使用unit代替value。另请注意ifinput之间的差异。它还建议使用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),这就是事情变得混乱的地方。如果您不了解该语言的隐含行为,许多人会期望1str * 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 ,这样可以产生更清晰,更易于阅读(和理解)的代码。