2016-03-31 8 views
1

dies ist mein Code:ändern Variable in Klammern

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

Ich möchte die b Variable im Ort haben, wo ich jetzt '%b' haben, so sein wie die anderen zwei Zahlen, aber ohne Fest es Codierung . Weiß jemand, wie man das macht? Ich lerne immer noch Python.

+1

Was meinst du mit 'hard coding it'? –

+0

@ GáborErdős: Er meint, ohne tatsächlich "wenn" 1.860572 "in Zeile ..." – zondo

Antwort

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

Nebenbei bemerkt ist es leicht ineffizient einen Auftrag in einem for Schleife zu haben, ändert sich nicht auf das, was über iteriert wird. Je nach Anwendungsfall kann es mehr Sinn zu tun machen:

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

Oder

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

Oder

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

Eine weitere Sache zu achten gilt: Umwandlung eines Float zu einem String gibt nicht immer den gleichen literalen Wert, den Sie zum Erstellen des Floats an erster Stelle verwendet haben.

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

Dies liegt daran, str ausgelegt ist eine lesbare Zeichenfolge zurück, die nicht unbedingt etwas vollkommen repräsentativ für die Daten des Objekts. Für Floats bedeutet das, str() könnte auf weniger Dezimalstellen runden als ursprünglich angegeben. Wenn Sie also eine Datei nach einer genauen Ziffernfolge durchsuchen, kann es sinnvoll sein, zuerst b als Zeichenkette zu erstellen, damit die Präzision nicht verloren geht.

Verwandte Themen