python - 扩展列表理解
问题描述
我已将此行写为单行 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'
每当我尝试对它们进行操作时,它都会引发错误()。
有人可以向我解释我做错了什么并纠正它吗?
非常感谢!
解决方案
正如其他人所说,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}
您可能还想捕获错误输入的异常。
推荐阅读
- database - 将两个表的查询与另一个表连接起来
- android - 如何让导航视图上方的状态栏颜色在打开时发生变化
- c++ - 将单一 BGR 颜色转换为 HSV C++ OpenCV 4
- node.js - 如何将 Node-js 数据库查询绑定到 Web 表单
- ruby-on-rails - 猴子用 Rails 用业务逻辑修补核心类
- python - 将数据库中的表从不同服务器上的 MySQL 服务器复制到我的计算机
- php - 如果字符后跟数字,则替换字符
- gnuplot - 使用 gnuplot 的累积数据和外推
- arrays - perl - 将数组放入一个数组中
- css - 仅使用 css 将 bootstrap 4 汉堡图标更改为三点菜单图标的最佳方法