Umgedrehtes if

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
maxip
User
Beiträge: 61
Registriert: Dienstag 11. März 2008, 09:43

Umgedrehtes if

Beitragvon maxip » Dienstag 24. Juni 2008, 14:29

Hi,

ich wurde gerne statt

Code: Alles auswählen

if debug: print x

gerne sowas wie

Code: Alles auswählen

print x if debug

schreiben. Ich bin mir nicht sicher, aber ich glaube ich hab das mal in Python gesehen, wie ist da die genau Syntax, weil so wie oben funktioniert es nicht...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Dienstag 24. Juni 2008, 14:43

Da stellt sich mir nur die Frage: Wozu? Ist doch semantisch exakt identisch und wäre nur eine Variation der vorhandenen Schreibweise.

Ich habe so etwas iirc noch nicht gesehen - aber die Gurus hier werden sicherlich etwas dazu sagen können ;-)
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

Beitragvon Daniela » Dienstag 24. Juni 2008, 14:48

Welchen Sinn soll denn dieses "umgedrehte" if denn haben.

Ich kann da im Moment nicht wirklich den Sinn erkennen.

Die normale if-Anweisung ist doch ansich logisch. erst wenn eine Bedingung eingetroffen ist, soll etwas gemacht werden.

Wenn erst ein Ereignis eintretten soll, und dann eine Bedingungsprüfung stattfinden soll, fällt mir spontan nur eine fussgesteuerte do-while-Schleife (http://de.wikipedia.org/wiki/Do-while-Schleife) ein. Jedenfalls für Java.
Ich weiß nicht, vielleicht gibt es so was ähnliches auch für Python?!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Dienstag 24. Juni 2008, 14:48

Es gibt nur den unären Operator, also:

Code: Alles auswählen

print "foo" if False else "bar"
# "bar"
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 24. Juni 2008, 14:48

Du hast vermutlich so etwas gesehen:

Code: Alles auswählen

s = "gerade" if a%2 == 0 else "ungerade"
Zuletzt geändert von numerix am Dienstag 24. Juni 2008, 15:07, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 24. Juni 2008, 14:51

Daniela hat geschrieben:Welchen Sinn soll denn dieses "umgedrehte" if denn haben.

Ich kann da im Moment nicht wirklich den Sinn erkennen.


Der "Sinn" ist, dass man in solchen Fällen, wo es um eine alternative Zuweisung geht, den Code knapper - und je nach Geschmack - übersichtlicher halten kann.
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

Beitragvon Daniela » Dienstag 24. Juni 2008, 14:55

pütone hat geschrieben:
Daniela hat geschrieben:Welchen Sinn soll denn dieses "umgedrehte" if denn haben.

Ich kann da im Moment nicht wirklich den Sinn erkennen.


Der "Sinn" ist, dass man in solchen Fällen, wo es um eine alternative Zuweisung geht, den Code knapper - und je nach Geschmack - übersichtlicher halten kann.


Aha, wenn das so ist.

Vielleicht am Anfang ein bissl verwirrend, wenn man jetzt nicht so an diese schreibweise gewöhnt ist.

Letztlich sowieso eine Geschmacksfrage.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Dienstag 24. Juni 2008, 14:56

Daniela hat geschrieben:Welchen Sinn soll denn dieses "umgedrehte" if denn haben.

Ich kann da im Moment nicht wirklich den Sinn erkennen.

Die normale if-Anweisung ist doch ansich logisch. erst wenn eine Bedingung eingetroffen ist, soll etwas gemacht werden.

Wenn erst ein Ereignis eintretten soll, und dann eine Bedingungsprüfung stattfinden soll, fällt mir spontan nur eine fussgesteuerte do-while-Schleife (http://de.wikipedia.org/wiki/Do-while-Schleife) ein. Jedenfalls für Java.
Ich weiß nicht, vielleicht gibt es so was ähnliches auch für Python?!

Ja.

Code: Alles auswählen

while True:
    do_stuff()
    if foo():
        break
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 24. Juni 2008, 15:02

Code: Alles auswählen

sys.stdout.write('a\n' if True else '')

Die Bedingung ist dann jeweils zum Testen anzupassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 24. Juni 2008, 15:07

Und mit print geht es tatsächlich auch:

Code: Alles auswählen

print ("ungerade" if a%2 else "gerade")
nummer9
User
Beiträge: 6
Registriert: Montag 23. Juni 2008, 12:19

Beitragvon nummer9 » Dienstag 24. Juni 2008, 15:20

Wenn du knappen Code schreiben möchtest, geht statt

Code: Alles auswählen

if foo==bar:
    print "haha"
print "hi"
print "ho"

auch

Code: Alles auswählen

if foo==bar: print "haha"
print "hi"; print "ho"


Ist aber verpöhnt und eigentlich immer unnötig und unübersichtlich. :!:
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

Beitragvon sechsrad » Dienstag 24. Juni 2008, 15:20

Die normale if-Anweisung ist doch ansich logisch. erst wenn eine Bedingung eingetroffen ist, soll etwas gemacht werden.


if wahr dann print "wahr"
was ist daran logisch, verstehe ich nicht.

print "wahr" wenn if wahr !
was ist an dieser fragestellung unlogisch?


oder in forth :

34 45 +

ist mathematisch verständlicher als 34 + 45 ...

mfg
Zuletzt geändert von sechsrad am Dienstag 24. Juni 2008, 15:25, insgesamt 1-mal geändert.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Beitragvon Karl » Dienstag 24. Juni 2008, 15:24

sechsrad hat geschrieben:
Die normale if-Anweisung ist doch ansich logisch. erst wenn eine Bedingung eingetroffen ist, soll etwas gemacht werden.


was ist daran logisch, verstehe ich nicht.

print "wahr" wenn bedingung wahr ist !

was ist an dieser fragestellung falsch?


oder in forth :

34 45 +

ist mathematisch verständlicher als 34 + 45 ...

mfg

Welche Fragestellung? Eher ein Ausdruck :p
Und was ist an 34 45 + "mathematisch verständlicher"? als an 45 + 45?
Erklär mir das mal bitte.
Aber zum eigentlichem Thema:
Ist logisch völlig gleich, wie rum ich das if drehe.
Hauptsache es besteht der Zusammenhang zwischen dem If und dem
Then, bzw dem Do ... if
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 24. Juni 2008, 15:27

In Lisp:
[code=](+ 34 45)[/code]
Ich denke sechsrad wollte ausdrücken dass die RPN keine zusätzlichen Klammern braucht um Präzedenzen richtig aufzulösen.

Was es hier mit dem Thema zu tun hat - keine Ahnung.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

Beitragvon sechsrad » Dienstag 24. Juni 2008, 15:32

Und was ist an 34 45 + "mathematisch verständlicher"? als an 45 + 45?


ich kann doch erst 2 zahlen addieren , wenn diese vorhanden sind.

ist doch unlogisch wenn ich eine zahl habe und die schon mit einem zeichen addiere(+).

schau dir mal den asm-code an, dort werden erst die beiden zahlen in empfang genommen und dann addiert, vorher geht es nicht.


vom assembler verlangen wir die verständlichkeit aber schreiben tun wir chaotisch und meinem , das es logisch ist.

jetzt wird aber vom thema abgegangen....

mfg

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]