Boolsche Warheitstafel Funktion gesucht....

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.
BlackJack

Spacekiss hat geschrieben:Also Blackjacks Lösung ist :D ärger mich garde das ich ent selber auf die Idee gekommen bin, naja bin eher Haskell gewöhnt, da sind for Schleifen unbekannt ^^
Aber es gibt "List Comprehension" (LC). Die äussere ``for``-Schleife kann man auch noch durch eine ersetzen:

Code: Alles auswählen

def bool_tab(variable_count):
    return ([bool(i & 2**bit) for bit in xrange(variable_count)]
            for i in xrange(2**variable_count))

print list(bool_tab(3))
Eigentlich ist es eine "Generator Expression" wegen der runden Klammern statt der eckigen. Das ist der Python-Weg (ab Version 2.4) um "lazy evaluation" in LCs zu bringen.

In Haskell würde das so aussehen:

Code: Alles auswählen

import Bits

boolTab :: Int -> [[Bool]]
boolTab vars = [int2bools n vars    |  n <- [0 .. bit vars - 1]]
    -- Python: [int2bools(n, vars) for n in xrange(vars)]

int2bools :: Int -> Int -> [Bool]
int2bools n bits = [testBit n i|i <- [0 .. bits - 1]]
Ich habe die innere LC in eine Funktion rausgezogen und als Kommentar versucht die Übersetzung von LCs zwischen Haskell <-> Python deutlich zu machen.

@Leonidas: In Haskell gibt es keine "Anweisungen". Nur Funktionen. Und davon kann man nur in Ausnahmefällen mehrere nacheinander ausführen lassen, weil es streng genommen bei der Auswertung kein vorher/nachher gibt, weil keine Auswertereihenfolge vorgeschrieben ist. Das muss man natürlich für Ein-/Ausgabe Operationen machen können weil die "reale Welt" eben doch irgendwie sequentiell arbeitet.

``if`` habe ich in Haskell übrigens noch nie benutzt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:@Leonidas: In Haskell gibt es keine "Anweisungen". Nur Funktionen.
Ich habe das Wort "Anweisung" stellvertretend für irgendeine Aktion des Programmes eingesetzt, diese Ungenauigkeit sei mir bitte verziehen.
BlackJack hat geschrieben:Und davon kann man nur in Ausnahmefällen mehrere nacheinander ausführen lassen, weil es streng genommen bei der Auswertung kein vorher/nachher gibt, weil keine Auswertereihenfolge vorgeschrieben ist. Das muss man natürlich für Ein-/Ausgabe Operationen machen können weil die "reale Welt" eben doch irgendwie sequentiell arbeitet.
Ja, ich denke das war eben genau so ein Fall (Monad), es ging zwar nicht um Dateien, aber die kommen später im Kapitel. Ich war nur recht deprimiert, dass das nicht so wollte wie ich.
BlackJack hat geschrieben:``if`` habe ich in Haskell übrigens noch nie
benutzt.
Da bin ich ja beruhigt, weil ifs unter Haskell sind wohl nicht mein Freund ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

BlackJack hat geschrieben:Ist mir ja fast ein wenig peinlich, das ich nur eine Minute hierfür brauchte: ;-)
Hi BlackJack

Dein Zeitaufwand für die Lösung des Problems ist nicht
ganz ehrlich. Du hast vergessen die Zeit für das erst-
malige entdecken der Methode 'yield' die in einer Python
Dokumentation sicher nicht im ersten Kapitel zu finden ist,
und die Möglichkeiten der Methode zu erforschen, nicht
mit einberechnet Hi. Ich vermute da eher 5 Minuten.

Deine Lösungsansatz für das Problem ist aber genial!

Gruss wuf :wink:
Take it easy Mates!
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hallo,

Bin gerade auf eine Lösung Dookies zu obigen Problem gestoßen.
Dookies Lösung bietet aber noch mehr Anwendungsbereiche, da sie zu jedem Iteratorobjekt alle möglichen Kombinationen erstellt.

http://www.python-forum.de/viewtopic.php?t=1812
Gruß, Harry
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

wuf hat geschrieben:Du hast vergessen die Zeit für das erst-
malige entdecken der Methode 'yield' die in einer Python
Dokumentation sicher nicht im ersten Kapitel zu finden ist,
und die Möglichkeiten der Methode zu erforschen, nicht
mit einberechnet Hi. Ich vermute da eher 5 Minuten.
Ich vermute, dass das bei BlackJack schon ewig lange her ist, dass sich das nicht mehr rechner. Wenn du's mitrechnen willst, müsstest du ja auch noch die Zeit zum Python-lernen einrechnen und dann kommst du auf etwas mehr als 5 Minuten ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Die True-False-Matrix erinnert mich irgendwie an die Nullen und Einsen einer Binär-Tabelle...
So, nun weiß ich auch durch den Thread, wie man sowas erstellen kann:
http://www.python-forum.de/viewtopic.php?p=22152#22152

Wobei BlackJack Lösung recht ähnlich aussieht...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten