我有一个存储变量的列表。这些变量存储 float 。对于我正在制作的程序的一部分,如果一个值末尾有.0,我需要将其删除,如果没有,它可以保持不变。
例如: 2.0将变成2 3.5 仍为 3.5
现在问题出现在程序的后面,我需要对同一组数字进行排序和上下舍入。如果我包含所有关于为什么会这样的推理,那么这个问题就太长了。
我目前的代码如下:
AddRatio=0.35
SubRatio=0.2
MultiRatio=0.2
DiviRatio=0.2
MoneyRatio=0.25
num_add_qs=10*AddRatio
num_sub_qs=10*SubRatio
num_multi_qs=10*MultiRatio
num_divi_qs=10*DiviRatio
num_money_qs=10*MoneyRatio
NumQs = [num_add_qs, num_sub_qs, num_multi_qs, num_divi_qs, num_money_qs]
for i in range(0,len(NumQs)):
if isinstance(NumQs[i], float) == True:
NumQs[i]=str(NumQs[i])
if NumQs[i][2]=="0":
NumQs[i]=NumQs[i][0:1]
NumQs[i]=int(NumQs[i])
else:
NumQs[i]=float(NumQs[i])
i=i+1
如果我
print(NumQs)
返回
[3.5, 2, 2, 2, 2.5]
这就是我想要的结果。
问题是变量的实际值没有改变。 如果我:
print(num_add_qs, num_sub_qs, num_multi_qs, num_divi_qs, num_money_qs)
结果是:
3.5 2.0 2.0 2.0 2.5
如果是整数,则变量需要存储为整数,如果不是 float ,则需要存储为 float 。我将它们转换为字符串纯粹是为了删除相关的 .0。
我哪里出错了?
最佳答案
我需要对您当前的代码进行一些改进:
- 不要使用
isinstance
,而是使用:x == int(x)
。 - 永远不要使用大量单独的相似/链接变量,要么将它们全部存储在
列表
中(就像你一样)并忘记变量,或者更好地使用字典
.
因此,采用字典方法,我们得到的是:
AddRatio=0.35
SubRatio=0.2
MultiRatio=0.2
DiviRatio=0.2
MoneyRatio=0.25
num_add_qs=10*AddRatio
num_sub_qs=10*SubRatio
num_multi_qs=10*MultiRatio
num_divi_qs=10*DiviRatio
num_money_qs=10*MoneyRatio
num_dict = {'add': 10*AddRatio, 'sub': 10*SubRatio, 'multi': 10*MultiRatio, \
'divi': 10*DiviRatio, 'money': 10*MoneyRatio}
num_dict = {k: int(v) if v == int(v) else v for k, v in num_dict.items()}
# --> {'sub': 2, 'multi': 2, 'money': 2.5, 'add': 3.5, 'divi': 2}
因此,为了回答您关于字典理解如何工作的评论,这是我最好的解释 - 通过解释器作为示例胜于 Eloquent :
>>> int(1.0) if 1.0 == int(1.0) else 1.0
1
>>> int(1.6) if 1.6 == int(1.6) else 1.6
1.6
>>> d = {'a': 1.0, 'b': 2.5, 'c': 3}
>>> d.items()
dict_items([('c', 3), ('a', 1.0), ('b', 2.5)])
>>> for k, v in d.items():
... print("k: {}, v: {}".format(k, v))
...
k: c, v: 3
k: a, v: 1.0
k: b, v: 2.5
>>> {i: i+2 for i in range(8)}
{0: 2, 1: 3, 2: 4, 3: 5, 4: 6, 5: 7, 6: 8, 7: 9}
>>> {k: int(v) if v == int(v) else v for k, v in d.items()}
{'c': 3, 'a': 1, 'b': 2.5}
关于PYTHON - 如何迭代变量列表并根据设置条件更改值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240762/