2016-03-31 2 views
1

это мой код:Изменение переменной в скобках

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

@ GáborErdős: Он означает, что фактически не выполняет 'if" 1.860572 "в строке ...' – zondo

ответ

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") 

еще одна вещь, чтобы следить за: преобразования 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 в качестве строки в первую очередь, поэтому нет никакой потери точности.

Смежные вопросы