Ich habe an einem textbasierten Spiel in Python gearbeitet und bin auf eine Instanz gestoßen, in der ich eine Zeichenfolge basierend auf einer Reihe von Bedingungen unterschiedlich formatieren möchte.
Insbesondere möchte ich Text anzeigen, der Elemente in einem Raum beschreibt. Ich möchte, dass dies in der Raumbeschreibung genau dann angezeigt wird, wenn sich das betreffende Objekt in der Artikelliste des Raumobjekts befindet. Bei der Einrichtung habe ich das Gefühl, dass das einfache Verketten von Zeichenfolgen basierend auf Bedingungen nicht wie gewünscht ausgegeben wird, und es wäre besser, für jeden Fall eine andere Zeichenfolge zu haben.
Meine Frage ist, gibt es eine pythonische Methode zum Formatieren von Zeichenfolgen basierend auf dem Ergebnis einer Booleschen Bedingung? Ich könnte eine for-Schleifenstruktur verwenden, aber ich habe mich gefragt, ob es etwas Einfacheres gibt, ähnlich einem Generatorausdruck.
Ich suche etwas Ähnliches in Stringform
num = [x for x in xrange(1,100) if x % 10 == 0]
Als allgemeines Beispiel für das, was ich meine:
print "At least, that's what %s told me." %("he" if gender == "male", else: "she")
Mir ist klar, dass dieses Beispiel kein gültiges Python ist, aber es zeigt im Allgemeinen, wonach ich suche. Ich frage mich, ob es einen gültigen Ausdruck für die Formatierung von booleschen Zeichenfolgen gibt, ähnlich wie oben. Nachdem ich mich ein wenig umgesehen hatte, konnte ich nichts finden, was speziell mit der Formatierung bedingter Zeichenfolgen zu tun hatte. Ich habe im Allgemeinen mehrere Beiträge zu Formatzeichenfolgen gefunden, aber das ist nicht das, wonach ich suche.
Wenn so etwas tatsächlich existiert, wäre es sehr nützlich. Ich bin auch offen für alternative Methoden, die vorgeschlagen werden können. Vielen Dank im Voraus für jede Hilfe, die Sie leisten können.
quelle
Antworten:
Ihr Code tatsächlich ist gültig Python , wenn Sie zwei Zeichen entfernen, das Komma und den Doppelpunkt.
>>> gender= "male" >>> print "At least, that's what %s told me." %("he" if gender == "male" else "she") At least, that's what he told me.
Modernere
.format
Stilanwendungen:>>> s = "At least, that's what {pronoun} told me.".format(pronoun="he" if gender == "male" else "she") >>> s "At least, that's what he told me."
Dabei kann das zu formatierende Argument ein Argument sein, das
dict
Sie in einer beliebigen Komplexität erstellen.quelle
else
/if
Anweisungen, um eine Inline zu simulierenelif
. Aber Sie sollten es wirklich nicht, Sie sollten stattdessen eine Funktion definieren.Auf Python 3.6 oder höher, ein verwenden formatiert Stringliteral (sie sind f-Strings genannt:
f"{2+2}"
produziert"4"
) mit einerif
Erklärung:print(f"Shut the door{'s' if abs(num_doors) != 1 else ''}.")
Sie können keine Backslashes verwenden , um Anführungszeichen im Ausdrucksteil einer F-Zeichenfolge zu umgehen, sodass Sie doppelte
"
und einfache'
Anführungszeichen mischen müssen . (Sie können immer noch Backslashes im äußeren Teil eines F-Strings verwenden, z. B.f'{2}\n'
ist in Ordnung)quelle
's'
es sich um eine Variable handelt?print(f"Shut the door{my_variable if num_doors > 1 else ''}.")
In Python gibt es einen bedingten Ausdruck, der die Form annimmt
A if condition else B
Ihr Beispiel kann leicht in gültiges Python umgewandelt werden, indem nur zwei Zeichen weggelassen werden:
print ("At least, that's what %s told me." % ("he" if gender == "male" else "she"))
Eine Alternative, die ich oft vorziehen würde, ist die Verwendung eines Wörterbuchs:
pronouns = {"female": "she", "male": "he"} print "At least, that's what %s told me." % pronouns[gender]
quelle