2017-04-04 2 views
-4

Ich bin durch eine Zeile (Zeile mit "Leerzeichen" getrennt durch Leerzeichen) innerhalb einer Datei und möchte eine Teilzeichenfolge eines Feldes mit einem anderen statischen Wert vergleichen. Wenn der Vergleich wahr ist, möchte ich eine Zeichenkette 'X' ausgeben, ansonsten 'Y'. Ich frage mich, wie es mit Python gemacht werden kann. Jede Hilfe wäre willkommen. Vielen Dank.Vergleichen Sie zwei Zeichenfolgen innerhalb einer print-Anweisung und drucken Sie entsprechend Werte

Code: -

for i in inputm[1:]:  
    print('\n',i[0].split(':')[0] 
       ,str(datetime.strptime(i[0].split(':')[1],'%Y%m%d'))[:10] 
       ,i[1],round(sum(float(v) if v else 0.0 for v in i[2:6])/4,2) 
       ,i[6][0:23] 
     ) 

Eingang: -

1:20160101 123 10 20 0 0 http://www.google.com/favorites 
2:20170101 234 20 30 10 0 http://www.doodle.com/favorites 

Ausgang: -

1 2016-01-01 123 7.5 Correct 
2 2017-01-01 234 17.5 InCorrect 

Kommentare: - Ich bin wirklich an diesem Stück Code interessiert.

i[6][0:23] 

Möchten Sie die oben Teilzeichenfolge mit http://www.google.com vergleichen und wenn sie dann Correct sonst falsch drucken lassen.

+0

Tupel innerhalb einer Datei? Teilzeichenfolge einer Spalte? Was genau redest du? Diese Wörter haben eine Bedeutung. Bitte halten Sie sich an die Standardterminologie. Und was meinst du mit einer Print-Aussage? Erstens, 'print' ist eine Funktion, keine Aussage in Python 3, und ich bin mir nicht sicher, warum du es trotzdem machen willst. –

+0

Es sieht so aus, als ob Sie möchten, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben (einen [mcve] zu bilden), die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung, etc.). Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [Tour] und [fragen]. – TigerhawkT3

+0

@ TigerhawkT3 Ich fordere hier keinen Code auf ... Als ich neu bei Python bin, habe ich auf Google geforscht und geblättert, aber ich habe wirklich nichts gefunden, was bedingtes Drucken mit einer Print-Anweisung zu tun hat ... – Teja

Antwort

-1

Python bietet eine ternären-Stil Ausdruck Syntax, die wie folgt aussieht:

value1 if condition else value2 

Sie, das zu drucken verwenden können:

x = some_number() 
print('X' if x < 10 else 'Y') 
+1

die Frage enthält bereits einen bedingten Ausdruck, also vermutlich der Autor weiß über sie ... –

+0

Nein. OP hat das von einer anderen Frage vor ungefähr 30 Minuten bekommen. –

+0

Ja, es sieht so aus, als hätte OP heute Python abgeholt und versucht Code zu produzieren, indem er SO dazu bringt, es für ihn zu schreiben. Das macht diese Antwort nicht relevant (wenn es so wäre, wäre es ein Duplikat von [this] (http://stackoverflow.com/questions/11880430/how-to-write-inline-if-statement-for- drucken) sowieso). – TigerhawkT3

-2

Sie könnten Inline-if-Anweisung -

"Correct" if some_condition else "InCorrect" 

Dies wird "Korrigieren" zurückgeben, wenn die Bedingung wahr ist.

Aber ich schlage Ihnen wirklich vor, einige Zwischenvariablen zu verwenden. Ihr Code ist nicht lesbar.

-1

Versuchen Sie nicht, alles auf einmal, teile und herrsche zu tun:

# read the lines 
with open('myfile.txt', 'rb') as fp: 
    rows = fp.readlines() 

# split the lines into fields 
rows = [row.split() for row in rows] 

# create a function to format field values 
def fmt_row(row): 
    res = [] 
    res += row[0].split(':') # split the first field on : 
    res += [float(field) for field in row[1:-1]] # convert all but first/last field to float 
    date = res[1] 
    res[1] = '%s-%s-%s' % (date[:4], date[4:6], date[6:]) 
    return res 

# convert/format all the rows 
rows = [fmt_row(row) for row in rows] 

# finally create the output 
output = [[ 
    row[0], # first output field 
    row[1], # second.. 
    round(sum(row[2:-1]/4), 2), 
    'Correct' if row[-1] == 'http://www.google.com/favorites' else 'InCorrect' 
] for row in rows] 

# print the output? 
print '\n'.join([' '.join(row) for row in output]) 
+0

Es funktioniert nicht ... – Teja

+0

@ Teja: "Es funktioniert nicht" ist keine nützliche Problemstellung, und mit über 150 Fragen zu Ihrem Namen sollten Sie das wissen. –

Verwandte Themen