Python - Programmieraufgabe

Objektorientierte Skriptsprache: (python.org)
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Python - Programmieraufgabe

Beitrag von fat-lobyte » So Aug 15, 2010 12:28 am

Hallo!
Ich habe schon viel von Python gehört, und auch unter Debian und vor allem Ubuntu ist es in regem Einsatz.
So wie ich das mitbekommen habe ist Python eine wirklich hübsche Skriptsprache, gut als Ergänzung zu C++ (manchmal doch ein Overkill...).

Jetzt habe ich mir vorgenommen diese Sprache zu lernen. Python Guru muss ich nicht sein, aber Quellcode lesen und gegebenenfalls auch mal selbst was schreiben können würd ich schon gern.
Tutorial find ich schon, da mach ich mir keine Sorgen. Was ich allerdings brauche ist ne gute Aufgabe, damit ich das richtig lerne.

Deswegen bitte ich um ein bisschen Hilfe für mein vollkommen unkreatives Gehirn:
fällt jemandem eine Programmieraufgabe ein, die man mit Python (mehr oder weniger) gut lösen könnte?
Ich bräuchte quasi 2 Aufgaben:
- Einmal die DAU Version, Dinge die jeder halbwegs begabte Programmierer über Nacht löst.
- Einmal das etwas kniffligere, wo ich dann mal schon ein paar Tage (oder ne Woche?) sitzen müsste.

Was fällt euch dazu ein?
Oder habt ihr selbst Bedarf für ein Tool das ihr benötigen würdet, von dem ihr glaubt dass es einfach zu programmieren ist und für das ihr einfach zu Faul seid?
Bitte um Input.

Es müssen sich keineswegs nur die Python-Hacker angesprochen fühlen, ganz allgemeine Informatische Probleme (in angemessenem Schwierigkeitsgrad natürlich) dürfen auch formuliert werden.
Ich werde versuch in diesem Thread über meine Erfahrungen zu bloggen.

In diesem Sinne,
import antigravity;
mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python - Programmieraufgabe

Beitrag von Xin » So Aug 15, 2010 9:43 am

fat-lobyte hat geschrieben:Ich habe schon viel von Python gehört, und auch unter Debian und vor allem Ubuntu ist es in regem Einsatz.
So wie ich das mitbekommen habe ist Python eine wirklich hübsche Skriptsprache, gut als Ergänzung zu C++ (manchmal doch ein Overkill...).
Ich habe mir Python vor nicht ganz zwei Jahren auf Anfänger-Niveau beigebracht.

Allerdings fehlen mir wichtige Features, wie Const-Correctness und die Überladung von Operatoren bzw. Konstruktoren ist mir unsympathisch (also die Art und Weise, wie es in Python gehandhabt wird). Ich bin kein Freund von Garbage-Collectors.
Ich wollte eigentlich auch immer mal weiterlernen, aber ich fand nichts, was mich so sehr begeistert, als dass ich es durchgehend benutzen wollte.
Fakt ist aber auch, dass Python eine schnelle Sprache ist, um "mal eben schnell" etwas zu machen.

Wenn es aber schnell laufen soll, programmiert man es wieder in C bzw. in C++ mit export "C" {}. Man kann die Sicht auf die Klassen also nicht nach Python holen, man muss also einen C-Wrapper um eine C++-Klasse, um dann einen Python-Klassen-Wrapper um die C-Funktionen zu setzen. Wrapper um Wrapper machen die Sache jetzt nicht unbedingt schneller.

Fakt ist aber auch, dass ich seitdem nichts zu tun hatte, was ich in Python hätte lösen wollen. Mir ist Genesys deutlich sympathischer und bis dahin ist mir auch C++ sympathischer. Also konzentriere ich mich lieber darauf, Genesys in Gang zu bringen, als ein Python-Guru zu werden.
fat-lobyte hat geschrieben:Jetzt habe ich mir vorgenommen diese Sprache zu lernen. Python Guru muss ich nicht sein, aber Quellcode lesen und gegebenenfalls auch mal selbst was schreiben können würd ich schon gern.
Tutorial find ich schon, da mach ich mir keine Sorgen. Was ich allerdings brauche ist ne gute Aufgabe, damit ich das richtig lerne.
Ich habe damals einen Taschenrechner mit Hilfe von wxWidgets begonnen. Ich weiß jetzt gar nicht mehr, ob ich ihn fertig gestellt habe.
fat-lobyte hat geschrieben:- Einmal die DAU Version, Dinge die jeder halbwegs begabte Programmierer über Nacht löst.
Das wäre wohl der Taschenrechner. ^^
fat-lobyte hat geschrieben:- Einmal das etwas kniffligere, wo ich dann mal schon ein paar Tage (oder ne Woche?) sitzen müsste.
Auch das kann auch der Taschenrechner sein, wenn Dir die der Aufbau eines Taschenrechners noch unbekannt ist. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Python - Programmieraufgabe

Beitrag von Panke » Di Jul 12, 2011 2:29 pm

Hm, einen einfachen FTP- oder IRC-Clienten könnt man programmieren, um sich eine
neue Sprache anzugucken. Dann muss man sich nämlich auch mit Nebenläufigkeit und Netzwerk rumschlagen und kann mal sehen, was die Standardbibliothek so hergibt.

Ansonsten programmier doch mal ein Programm (z.B. mit Qt), dass einen Text und einen regulären
Ausdruck nimmt und dann alle (Sub-)Matches in Text hervorhebt und als Baum darstellt. Klick im Baum markiert natürlich die entsprechenden Stellen im Text.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python - Programmieraufgabe

Beitrag von Xin » Di Jul 12, 2011 2:39 pm

Wenn Panke schon die alten Threads rauskramt, dann würde mich interessieren, wie weit Du, fat-lobyte, damit gekommen bist?

Ansonsten @Panke, wir haben einen Wettbewerb laufen, der sich mit Tutorials beschäftigt. Wenn Du in Python fit bist...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Python - Programmieraufgabe

Beitrag von Panke » Di Jul 12, 2011 3:31 pm

Ups, der Thread war so weit oben, dass ich gar nicht gemerkt habe, was für eine Leiche ich da
auskrame.

Allgemeine Python-Tutorials gibt es mittlerweile genug im Netz. Da ein weiteres zu machen
ist irgendwie witzlos. Eventuell setz ich mich nächsten Monat an ein Tutorial für CMake. Das
hatte ich mir eh mal vorgenommen.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Python - Programmieraufgabe

Beitrag von fat-lobyte » Di Jul 12, 2011 3:56 pm

Xin hat geschrieben:Wenn Panke schon die alten Threads rauskramt, dann würde mich interessieren, wie weit Du, fat-lobyte, damit gekommen bist?
Wie so vieles in den Mühlen der Zeit zerdrückt worden :-)
Nö, python kann ich nicht und hab auch seit damals nix mehr gemacht. Wird gelernt wenn tatsächlich bedarf besteht. Also wahrscheinlich nie :-)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python - Programmieraufgabe

Beitrag von Xin » Di Jul 12, 2011 11:37 pm

Panke hat geschrieben:Ups, der Thread war so weit oben, dass ich gar nicht gemerkt habe, was für eine Leiche ich da
auskrame.
Das Forum ist stark C/C++-lastig, was mir persönlich gefällt, aber proggen.org beschäftigt sich mit Programmierung allgemein, nicht nur mit C und C++.
Panke hat geschrieben:Allgemeine Python-Tutorials gibt es mittlerweile genug im Netz. Da ein weiteres zu machen
ist irgendwie witzlos.
Allgemeines gibt es überall. Wir haben ein offenes Wiki. Jeder, der mag, darf Dinge verbessern und eigene Erfahrungen einbringen.
Dafür muss man allerdings auch etwas da sein, was man verbessern kann, denn wir können kein allgemeines Tutorial pflegen.
Panke hat geschrieben:Eventuell setz ich mich nächsten Monat an ein Tutorial für CMake. Das
hatte ich mir eh mal vorgenommen.
Auch eine schöne Idee.


fat-lobyte hat geschrieben:
Xin hat geschrieben:Wenn Panke schon die alten Threads rauskramt, dann würde mich interessieren, wie weit Du, fat-lobyte, damit gekommen bist?
Wie so vieles in den Mühlen der Zeit zerdrückt worden :-)
Nö, python kann ich nicht und hab auch seit damals nix mehr gemacht. Wird gelernt wenn tatsächlich bedarf besteht. Also wahrscheinlich nie :-)
Schade, aber mir ging es mit Python ähnlich. Mir gefallen einige Ideen in Python sehr gut, aber ich selbst habe eigentlich auch keine Anwendung dafür.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Python - erstes Résumé

Beitrag von fat-lobyte » Di Sep 13, 2011 3:32 pm

Hallo. Nachdem ich nun in meiner Aufgabe relativ weit fortgeschritten bin, möchte ich ein kleines Résumé über meine Erfahrungen mit und meine Gefühle zu Python.

Python sieht für mich wie eine gut durchdachte Skriptsprache aus, eine die nicht einfach "gewachsen" oder entstanden ist, sondern wo von Anfang an auf grundlegende Werte geachtet wurde. (Diese sind in meinem anderen Post beschrieben)

Einige bestimmte Sprachfeatures haben mir besonders gut gefallen, und ich finde da könnten sich andere Sprachen durchaus was abschauen:
  • Hübsche Syntax. Ich finde das ist eine sehr wichtige Eigenschaft, wenn ich mir im Vergleich dazu Bash oder Perl ansehe.
  • Einfache, klare und eindeutige Verwendung von Modulen
  • Elegante Wahl der Syntax und Semantik von Schleifen, die immer auf "Iteratable"-Objekten operieren.
  • else-Clause bei Schleifen und try-except-Blöcken
  • finally-Clause bei try-except-Blöcken. Auch wenn in anderen Sprachen diese durch Destruktoren unnötig werden, muss man trotzdem manchmal von hinten durch die Brust ins Auge. Nicht so mit Python.
  • Gute Wahl von grundlegenden Datentypen: string, list, tuple, und besonders das Dictionary gefallen mir sehr. Diese sind sehr klar, schnell und ohne viel drumherum-Syntax verwendbar.
  • Sehr gute und bequeme Abstraktion der Betriebssysteminterfaces. Die meisten benötigten Befehle sind vorhanden, und einfach zu verwenden.
    Das macht Python übrigens auch zu einem super Ersatz für Bash-Skripte, die zwar oft zu regelrechten Programmen auswachsen, denen aber eindeutig die Sprachmächtigkeit fehlt. Außerdem killen sie mit ihren sed, grep, find, awk, ... jegliche Performance, da dazu jedes mal ein Programm aufgerufen, geladen, ein Prozess gestartet, Ein/Ausgaben umgeleitet und dann der Prozess wieder geschlossen werden muss.
  • Sehr reiche Standardbibliothek. Für den Normalsterblichen findet sich für so ziemlich jede Aufgabe etwas. Meine persönlichen Lieblingsmodule:
    argparse, logging, queue und subprocess
  • Erweiterbarkeit, und zwar sowohl die Erweiterbarkeit von Python mit C/C++-Code als auch die Erweiterbarkeit von C/C++-Code mit Python finde ich toll.
  • Generatorfunktionen, die ihren Wert pro iteration mit "yield" statt return zurückgeben
Einige Dinge,die zwar in anderen Sprachen vorhanden sind, ich aber trotzdem gut finde:
  • try-except-finally-else- Blöcke. Oft gesehen, aber in Python gut durchdacht und angenehm verwendbar.
  • Context-Manager und with-Statement. Wie ich finde ein Gelungener Ersatz für das Fehlen von Destruktoren. Die __exit__() Funktion wird innerhalb des with-Blockes immer aufgerufen, selbst wenn eine Exception geworfen wird.
  • Operatorüberladung. Obwohl die Syntax zu deren Definition etwas seltsam aussieht, finde ich das Sprachfeature einfach gut.
Natürlich ist auch Python nicht der heilige Gral. Einige Dinge sind Verbesserungswürdig:
  • Klassen fühlen sich etwas seltsam an, die Unterscheidung zwischen (statischen) Klassenmembern und Objektmembern ist nicht so ganz klar, es gibt nicht (wirklich) Private Variablen, stattdessen nur ein Name-Mangling.
  • Alles ist ein Objekt - Funktionen, Objekte, auch Klassen selbst, ja sogar ganze Module. Hier bin ich etwas zwiegespalten ob mir das gefallen oder missfallen soll. Auf jeden Fall ist es eine Eigenheit.
  • Und natürlich etwas, was in jeder Skriptsprache ein grosses Manko ist: fehlende Typsicherheit. Und das ist für mich anscheinend ein ziemlicher Killer: Es ist ziemlich schwierig durch den Programmverlauf nachzuverfolgen, welche Attribute ein Objekt hat, das in einer Funktion generiert wurde. Deswegen häuften sich bei mir Fehler, wo auf nicht vorhandene Tupel-Elemente oder auf nicht vorhandene Attribute zugegriffen wurde.
    Mir ist klar, dass Typsicherheit schwer von Skriptsprachen verlangt werden kann, und dass man auch viel Flexibilität dabei verliert, aber das ist das was mir bei grösseren Projekten am meisten Fehlen würde.
Nichts desto trotz möchte ich sagen, dass sich Python von Grund auf "richtig" anfühlt, man bewegt sich vergleichsweise beschwingt durch den Rechner.
Ich bin froh es gelernt zu haben, nicht als Ersatz für andere Sprachen, sondern eher als ergänzug. Es macht sich gut in meiner Werkzeugkiste.
(Und nachdem halb gnome darin geschrieben ist, kann ich jetzt fröhlich lauter kleine Applets und Progrämmchen schreiben ;-) )


So, das waren meine Erfahrungen, meine Meinungen.
Ende.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Python - Programmieraufgabe

Beitrag von Xin » Di Sep 13, 2011 3:36 pm

Wir haben einen py:-Namensraum, den Du gerne füllen darfst. *g*

Dein letztes Posting würde ich da jedenfalls schonmal für richtig halten.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Python - Programmieraufgabe

Beitrag von Dirty Oerti » Di Sep 13, 2011 4:11 pm

Python sieht für mich wie eine gut durchdachte Skriptsprache aus, eine die nicht einfach "gewachsen" oder entstanden ist, sondern wo von Anfang an auf grundlegende Werte geachtet wurde. (Diese sind in meinem anderen Post beschrieben)
Das kann ich nur bestätigen. Ich arbeite auch damit und bin begeistert :)
Sehr gute und bequeme Abstraktion der Betriebssysteminterfaces. Die meisten benötigten Befehle sind vorhanden, und einfach zu verwenden.
Das macht Python übrigens auch zu einem super Ersatz für Bash-Skripte, die zwar oft zu regelrechten Programmen auswachsen, denen aber eindeutig die Sprachmächtigkeit fehlt. Außerdem killen sie mit ihren sed, grep, find, awk, ... jegliche Performance, da dazu jedes mal ein Programm aufgerufen, geladen, ein Prozess gestartet, Ein/Ausgaben umgeleitet und dann der Prozess wieder geschlossen werden muss.
Ich benutze es exakt dazu, es ist für mich hauptsächlich das Mittel der Wahl, um komplizierte und schwer zu wartende Bash Skripte zu umgehen. ich benutze zwar dennoch häufig andere Programme aus Python heraus (z.B. mount) aber hier kann ich sicher sein, dass ich bei einem Fehler alles gut abfangen kann und nicht das komplette Chaos entsteht, wie es in Bash Skripten meist der Fall ist.
Klassen fühlen sich etwas seltsam an, die Unterscheidung zwischen (statischen) Klassenmembern und Objektmembern ist nicht so ganz klar, es gibt nicht (wirklich) Private Variablen, stattdessen nur ein Name-Mangling.
Das fehlen wirklich privater Variablen empfinde ich als eines der besten Dinge überhaupt :D
Und zwar, weil man so nicht mit getter und setter Methoden überschwemmten Code schreiben muss.
Es erfordert allerdings auch einiges an Disziplin seitens des Entwicklers.
Und es macht es Möglich, z.B. auch aspektorientierte Ansätze einzubringen, auch wenn ich damit (noch) keine Erfahrung habe.

Super finde ich, dass man nicht einfach nur 1 Konstruktor hat, sondern dass man auf unzählige Arten in die Erstellung eines Objektes (und auch eines Klassen-Objektes selbst) eingreifen kann.

Statische Member von Objektmembern zu unterscheiden ist aber wirklich etwas schwierig... -,-
Und natürlich etwas, was in jeder Skriptsprache ein grosses Manko ist: fehlende Typsicherheit. Und das ist für mich anscheinend ein ziemlicher Killer: Es ist ziemlich schwierig durch den Programmverlauf nachzuverfolgen, welche Attribute ein Objekt hat, das in einer Funktion generiert wurde.
Ich finde, Python gibt hier aber gute Hilfestellung, Typüberprüfungen sind ja möglich. "Fehlende Typsicherheit" kann teilweise auch gewinnbringend angewandt werden. Es erfordert nur - wieder - Disziplin des Entwicklers.

Den py:* Namensraum kann ich auch mit füllen, aber erstmal muss ich mich mal um Java kümmern :D
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten