首页 > 解决方案 > 扩展列表理解

问题描述

我已将此行写为单行 for 循环:

p.x, p.y, p.z = [float(s) for s in input('Input X, Y, Z: ').split()]

它工作正常。但为了我自己的理解,我尝试将其扩展为:

p.x, p.y, p.z = input('Input X, Y, Z: ').split()
float(p.x)
float(p.y)
float(p.z)

但是TypeError: unsupported operand type(s) for -: 'str' and 'str'每当我尝试对它们进行操作时,它都会引发错误()。

有人可以向我解释我做错了什么并纠正它吗?

非常感谢!

标签: pythonpython-3.x

解决方案


正如其他人所说,float()不会更改其输入的值,而是返回新值。快速解决方法是map()float函数添加到拆分输入上。

class P:
    pass

p = P()

p.x, p.y, p.z = map(float, input('Input X, Y, Z: ').split())

print(p.__dict__)
# Input X, Y, Z: 5.6 3.2 6.7
# {'x': 5.6, 'y': 3.2, 'z': 6.7}

您可能还想捕获错误输入的异常。


推荐阅读