Seite 1 von 1
Wie fängt ein Python-Programmierer einen Elefanten?
Verfasst: Mittwoch 19. Oktober 2005, 09:39
von henning
Moin!
Die meisten von euch kennen sicher die
Elefantenjagd.
Ich frage mich gerade, wie ein Python-Programmierer (mit ein bisschen humoristischer selbstkritik) einen Elefanten jagen würde?
Vielleicht:
- Für alle Tiere in Afrika:
- Fange dieses Tier, versuche es mit Erdnüssen zu füttern
und an seinem Rüssel zu ziehen.
- Wenn keine Aunahme ausgelöst wurde, breche die Schleife ab,
die Suche ist beendet.
Das wäre so ein Ansatz a la Ducktyping ,-)
Verfasst: Mittwoch 19. Oktober 2005, 11:01
von Leonidas
Die Elefantenjagt kannte ich nocht nicht, ist aber witzig.
Code: Alles auswählen
def is_elefant(tier):
try:
tier.feed("Erdnuss")
tier.pull(u"Rüssel")
return True
except:
return False
tiere = get_animals("Africa")
elefanten = [tier for tier in tiere if is_elefant(tier)]
Da könnte man aber auch
filter() nutzen.
Verfasst: Mittwoch 19. Oktober 2005, 14:24
von CM
Nee, das finde ich nicht gut. Ist ja total ineffizient erst einmal alle zu fangen und dann zu testen. Ein bißchen effizienter sind wir Pythonprogrammieren meist schon
Wie wäre
Code: Alles auswählen
#dann muss man nicht suchen, wo es sowieso keine Elefanten gibt:
Gebiet = Africa[north_of_Sahel:cape]
#nicht fangen, sondern bloß nachschauen
tiere = lookup_animals(Gebiet)
for tier in tiere:
#ein Elefant reicht!
if is_elefant(tier): gefunden = tier.location(); break
Und wenn es auf die Performance ankommt, kann man das Gebiet des Vorkommens und den Suchalgorithmus immer noch verfeinern ...
Gruß,
Christian
edit: Einmal, hatte mich vertippt
Verfasst: Mittwoch 19. Oktober 2005, 22:06
von BlackJack
Und das man mit der Funktion auch einen Ameisenbär erwischen kann, wenn der nichts gegen eine Erdnuss einzuwenden hat, dann ist uns das wurscht, weil es beim "duck-typing" schliesslich nicht auf den exakten Typ ankommt, sondern nur darauf, dass das erwartete Verhalten des Objekts stimmt.
Verfasst: Donnerstag 20. Oktober 2005, 05:33
von henning
Stimmt, also geht der Python-Programmierer davon aus, der Ameisenbär müsse ein Elefant sein, bis erbeim Verladen merkt, dass die Ohren zu klein sind ,-)
Verfasst: Donnerstag 20. Oktober 2005, 15:26
von Leonidas
Hängt natürlich ab, was unser "Elefant" für ein Interface haben müsste:
.is_gross() liefert True
.farbe() liefert "grau"
.feed("Erdnuss") gibt keine NahrungGroesserAlsTier Exception (aber da würde schon .ist_gross() False gaben) oder andere Exceptions
.pull("Ruessel") gibt auch keine KoerperteilNotFound Exceptions
.get_ruessel() müsste dann auch eine <Ruessel instance at 0x?> geben.
Aber das ist bei Menschen recht ähnlich: hat Flügel, ist klein, kein Fell, gelb gestreift -> Biene -> Hilfe! Dabei ist es auch egal, ob das fliegende Teil wirklich auch eine Instanz der Biene Klasse ist, oder nur ein anderes Tier, dass sich per Duck typing tarnt.