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")
еще одна вещь, чтобы следить за: преобразования float to string не всегда дает вам то же самое буквальное значение, которое вы использовали для создания float в первую очередь.
>>> b = 1.9999999999999999
>>> s ="1.9999999999999999"
>>> str(b) in s
False
>>> str(b) in "abc2.0def"
True
>>> str(b)
'2.0'
Это потому, что str
предназначена для возврата читаемой строки, не обязательно что-то совершенно репрезентативные данных объекта. Для float это означает, что str()
может округлить до меньшего количества знаков после запятой, чем вы первоначально указали. Поэтому, если вы просматриваете файл для точной последовательности цифр, может возникнуть смысл создать b
в качестве строки в первую очередь, поэтому нет никакой потери точности.
Что вы подразумеваете под «жестким кодированием»? –
@ GáborErdős: Он означает, что фактически не выполняет 'if" 1.860572 "в строке ...' – zondo