Seite 1 von 1

Was macht dieser Ausdruck ?

Verfasst: Dienstag 7. August 2018, 16:33
von Septias
Wie lässt sich dieses Ausruck:

Code: Alles auswählen

abs(n) != 1 and "s" or ""
in normale If-statements umwandeln ? Also nen Mehrzeiler.

Lg. Septias

Re: Was macht dieser Ausdruck ?

Verfasst: Dienstag 7. August 2018, 16:48
von Sirius3
Das ist das selbe wie

Code: Alles auswählen

["", "s"][abs(n) != 1]
oder

Code: Alles auswählen

"s"*(abs(n) != 1)
oder

Code: Alles auswählen

"s" if abs(n) != 1 else ""

Re: Was macht dieser Ausdruck ?

Verfasst: Dienstag 7. August 2018, 20:08
von noisefloor
Hallo,

[s]bin gerade verwirrt... warum ergibt `True and "s"` `s` als Ergebnis?[/s]

Gruß, noisefloor

EDIT: Verwirrung hat sich erledigt. RTFM hilft halt ;-)

Re: Was macht dieser Ausdruck ?

Verfasst: Dienstag 7. August 2018, 21:49
von __deets__
Und die Negation der Bedingung zeigt, warum das schon immer ein doofer Trick war:

Code: Alles auswählen

abs(n) == 1 and '' or 's'

Re: Was macht dieser Ausdruck ?

Verfasst: Dienstag 7. August 2018, 22:50
von kbr
Natürlich ist alles richtig im Sinne der Grammatik, aber wenn denn eine Variante pythonisch ist, dann diese:

Code: Alles auswählen

"s" if abs(n) != 1 else ""
Alles andere kostet potentiell reviewende Kollegen Zeit, was nicht unbedingt beliebt macht. Und selbst diese wird durch Negation (vgl. __deets__) noch leichter verständlich:

Code: Alles auswählen

"" if abs(n) == 1 else "s"
Python ist das egal, aber der menschliche Leser kann dem besser folgen.

Re: Was macht dieser Ausdruck ?

Verfasst: Mittwoch 8. August 2018, 09:22
von Septias
Dieser Ausrdruck ist im datetime.timedelta Modul xD, dachte eigentlich die könnten programmieren :P ^^

Re: Was macht dieser Ausdruck ?

Verfasst: Mittwoch 8. August 2018, 09:26
von Septias
Sirius3 hat geschrieben: Dienstag 7. August 2018, 16:48 Das ist das selbe wie

Code: Alles auswählen

["", "s"][abs(n) != 1]
oder

Code: Alles auswählen

"s"*(abs(n) != 1)
oder

Code: Alles auswählen

"s" if abs(n) != 1 else ""
woher "weiß" das Programm im zweiten Codeschnipsel, dass es bei False einen leeren String zurück geben muss ? Und wo kann ich die Syntax mit dem Stern nachschlagen Kenn die nämlich noch nicht ^^ (Die Zweite auch nicht, aber die schien mir relativ logisch)

Re: Was macht dieser Ausdruck ?

Verfasst: Mittwoch 8. August 2018, 10:05
von Sirius3
Der Trick ist immer, dass False der Zahl 0 und True der Zahl 1 entspricht.

Re: Was macht dieser Ausdruck ?

Verfasst: Mittwoch 8. August 2018, 10:41
von __blackjack__
@Septias: Die können Programmieren und hatten als sie das geschrieben haben noch keinen bedingten Ausdruck zur Verfügung. Die Syntax gab es zu dem Zeitpunkt noch nicht.

Die „Syntax mit dem Stern“ ist einfach Multiplikation von Zeichenketten mit einer ganzen Zahl und wie Sirius3 schon geschrieben hat, das Wahrheitswerte auch ganze Zahlen sind:

Code: Alles auswählen

In [3]: 'x' * 10
Out[3]: 'xxxxxxxxxx'

In [4]: 'x' * 1
Out[4]: 'x'

In [5]: 'x' * 0
Out[5]: ''

In [6]: 'x' * True
Out[6]: 'x'

In [7]: 'x' * False
Out[7]: ''

In [8]: True == 1
Out[8]: True

In [9]: isinstance(True, int)
Out[9]: True

In [10]: issubclass(bool, int)
Out[10]: True
Das Wahrheitswerte von Zahlen abgeleitet sind, hat auch wieder historische Gründe, denn auch `bool`, und `True` und `False` gab es nicht von Anfang an in Python. Zu Beginn wurden da wie in C 1 und 0 für genommen.