Wie fängt ein Python-Programmierer einen Elefanten?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Wie fängt ein Python-Programmierer einen Elefanten?

Beitragvon henning » Mittwoch 19. Oktober 2005, 09:39

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 ,-)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 19. Oktober 2005, 11:01

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 19. Oktober 2005, 14:24

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 :D
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
BlackJack

Beitragvon BlackJack » Mittwoch 19. Oktober 2005, 22:06

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. ;-)
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Donnerstag 20. Oktober 2005, 05:33

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 ,-)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 20. Oktober 2005, 15:26

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder