在简单的代码中出现错误却找不到原因

2024-10-06 08:55:29 发布

您现在位置: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\速度转换器.py,第5行,在 结果=str(单位*1.6)+“kmh” TypeError:无法将序列与“float”类型的非int相乘


Tags: inputyourifisvalue编程unitresult
2条回答

哦,那很简单。你要用一个“str”对象乘以一个“float”。再次检查您的代码:

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

在上面的例子中,我们知道将原始字符串乘以整数是有效的。为什么会这样?这很简单,基本上就是让程序做nfoo,这很容易做到。就像这样:

'foo' + 'foo' + 'foo'

您将注意到这里使用了加法运算符(这是受支持的)。你知道吗

另一方面,让我们试试这个:

'a' * .5

程序应该做什么?我们要的是字母a的一半。程序可以用许多方法解释这个问题(例如用a的二进制或十六进制表示除以.5),但是没有明确的方法返回预期的结果。相反,我们只是得到一个错误。你知道吗

我们可以通过显式地将float转换为int来绕过类型错误:

'a' * int(.5) # works and returns ''

注意这里我们得到了'',因为int(.5)0,这就是事情变得混乱的地方。很多人认为int(.5)1,如果你没有意识到语言的隐含行为,这可能会导致意想不到的行为。你知道吗

所有这些都引出了一个非常重要的问题,这也是像str * float这样的事情导致错误的原因:我们拥有的更隐含的行为(假设你的意思是int(float))可能会产生bug(在许多语言中都会产生bug),因此Python对你所做的事情非常explicit。如果你想要一个int,你必须要一个int,这会产生更干净、更容易阅读(和理解)的代码。你知道吗

您正在使用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)

相关问题 更多 >