在括号之间更改变量

时间:2016-03-31 13:25:28

标签: python

这是我的代码:

for i, line in enumerate(searchlines):
    b = 1.860572
    if "%b" in line and "4.871899" in line and "1.995131" in line:
        m.write("match" + "\n")

我希望b变量位于我现在拥有'%b'的位置,所以它就像其他两个数字一样,但没有硬编码。谁知道怎么做?我还在学习Python。

1 个答案:

答案 0 :(得分:5)

if str(b) in line and "4.871899" in line and "1.995131" in line:

顺便说一句,在for循环内部进行赋值,根据迭代的内容不会改变,效率稍差。根据您的使用情况,可能更有意义:

b = 1.860572
for i, line in enumerate(searchlines):
    if str(b) in line and "4.871899" in line and "1.995131" in line:
        m.write("match" + "\n")

或者

b = "1.860572"
for i, line in enumerate(searchlines):
    if b in line and "4.871899" in line and "1.995131" in line:
        m.write("match" + "\n")

或者

b = 1.860572
b_s = str(b)
for i, line in enumerate(searchlines):
    if b_s in line and "4.871899" in line and "1.995131" in line:
        m.write("match" + "\n")

需要注意的另一件事是:将浮点数转换为字符串并不总是为您提供与首先创建浮点数相同的文字值。

>>> b = 1.9999999999999999
>>> s ="1.9999999999999999"
>>> str(b) in s
False
>>> str(b) in "abc2.0def"
True
>>> str(b)
'2.0'

这是因为str旨在返回一个可读的字符串,不一定能完美地代表对象的数据。对于浮点数,这意味着str()可能会舍入到比您最初指定的小数位数更少的位数。因此,如果您在文件中搜索精确的数字序列,那么首先将b创建为字符串可能是有意义的,因此不会损失精度。