我对Python还不熟悉。我一直在编写一个python计算器,但是float很烦人,因为0.1 + 0.2 != 0.3
所以我一直在使用decimal模块。我编写了一个脚本,将浮点值从输入转换为十进制数。我首先格式化了输入字符串,然后将其拆分为一个列表。我在这个列表(称为evalvar)上运行脚本(for循环),但是每当我更改I(迭代)的值以覆盖evalvar时,什么都不会发生。
代码:
evalvar = ["0.1", "+0.2"]
for i in evalvar:
try:
#i is now equal to "0.1"
i = str("""Decimal('""" + i + """')""")
#i is now equal to """Decimal('0.1')"""
except SyntaxError:
print(evalvar)
我自己找到了答案。
我没有使用for i in evalvar
,而是使用了for i in range(len(evalvar))
,并用evalvar[i]
替换了for循环中的所有i
。你知道吗
重新绑定迭代变量(
i
)当然不会修改您的evalvar
列表,而且由于字符串是不可变的,因此您也不能就地更新它。这里的解决方案是建立一个新的列表:或使用索引更新列表:
这就是说,将代码构建为字符串并将其传递给
eval
或ast.literal_eval
(我假设这是您的计划)肯定不是最佳解决方案。最好将输入解析为operand, operator, operand
三元组,从操作数生成numerical,并使用operator
模块进行操作,例如:相关问题 更多 >
编程相关推荐