Hallo liebe Python Community!
Leider ist es wieder soweit. Ich habe nach einiger Zeit immer Probleme mir selbst Pythonaufgaben zu stellen, um das Gelernte zu festigen bzw. etwas sicherer in der Programmierung zu werden. Mir fällt einfach nichts ein, was ich nun sinnvolles damit umsetzen könnte. Immerwieder erwische ich mich dabei, wie ich von Tk bzw wxPython magisch angezogen werden. Hilft aber alles nix, denn zuerst sollte man sich ja mit den Basics auseinander setzen. Obwohl ein schickes Netzwerk/PC Inventarisierungstool wäre schon nicht schlecht
In Zusammenhang mit der Ideenarmut driftet dann natürlich wieder das Interesse ab, was ich gar nicht gut finde.
Welche Aufgaben habt ihr euch Anfangs gestellt? Wo kamen da die Ideen her?
LG
Daniel
Keine Ideen um das Gelernte umzusetzen
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
War vom Prinzip ganz einfach: Daten aus DB lesen, Graph zeichnen lassen (damals noch mit Google Charts, heute macht das ReportLab) und dann ausliefern.
Gruß, noisefloor
Das erste, was ich "richtig" programmiert habe, war eine Darstellung von Zahlen als grafisches Ergebnis. Habe ich als Webanwendung umgesetzt - und mir damit die Arbeit auf der Arbeit erleichtert (und anderen auch).Wo kamen da die Ideen her?
War vom Prinzip ganz einfach: Daten aus DB lesen, Graph zeichnen lassen (damals noch mit Google Charts, heute macht das ReportLab) und dann ausliefern.
Gruß, noisefloor
Für kleinere Aufgaben, nur um sich mit dem Programmieren zu beschäftigen finde ich das Project Euler oder den Sphere Online Judge (SPOJ) ganz interessant. Ersteres ist sehr mathematiklastig, oder zumindest „reiner“ als letzteres, denn schliesslich kommt man bei ganz vielen interessanten Themen mit Mathematik in Kontakt. Bei SPOJ kommen die Aufgaben oft in kleine Geschichten verpackt daher, die erahnen lassen wo die Kenntnisse, die man damit oder dafür erwirbt, real angewendet werden könnten.
Hallo,
vielen Dank für eure Anregungen. Ich habe nun etwas Interessantes zum Thema WMI gefunden:http://timgolden.me.uk/python/wmi/tutorial.html
Hiermit dürfte man in Verbindung mit dem http://msdn.microsoft.com/en-us/library ... 85%29.aspx einiges anstellen können.
Das ginge dann nämlich eventuell in die Richtung Python+WMI+MySql. (Inventarisierungstool)
Fragt sich nur, ob das nicht wieder eine Spur zu groß für mich ist .
LG
Daniel
vielen Dank für eure Anregungen. Ich habe nun etwas Interessantes zum Thema WMI gefunden:http://timgolden.me.uk/python/wmi/tutorial.html
Hiermit dürfte man in Verbindung mit dem http://msdn.microsoft.com/en-us/library ... 85%29.aspx einiges anstellen können.
Das ginge dann nämlich eventuell in die Richtung Python+WMI+MySql. (Inventarisierungstool)
Fragt sich nur, ob das nicht wieder eine Spur zu groß für mich ist .
LG
Daniel
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Aber solange man das Ding nicht publiziert bzw. intern nutzt finde ich das nicht weiter schlimm. Da hat man dann wenigsten ein Motivation, bei Zeiten einen Re-Write anzufangen.
Gruß, noisefloor
Sagen wir mal so: Wenn es funktioniert, ist es für den ersten Schuss IMHO ok. Wenn erstes Programm hat genau das gemacht was ich wollte, der Code an sich war aber aus heutiger Sicht ein wenig gruslig.Fragt sich nur, ob das nicht wieder eine Spur zu groß für mich ist
Aber solange man das Ding nicht publiziert bzw. intern nutzt finde ich das nicht weiter schlimm. Da hat man dann wenigsten ein Motivation, bei Zeiten einen Re-Write anzufangen.
Gruß, noisefloor
Hallo,
muss mal den uralten Thread ausgraben, denn ich habe versucht bei SPOJ eine einfache Problemstellung zu lösen.
Aufgabe
Your program is to use the brute-force approach in order to find the Answer to Life, the Universe, and Everything. More precisely... rewrite small numbers from input to output. Stop processing input after reading in the number 42. All numbers at input are integers of one or two digits.
Meine Lösung
Obwohl es meiner Meinung nach so läuft wie es soll, wird es als WRONG Answer bewertet. Ich frage mich nun, inwieweit man herausfinden kann, was SPOJ hier genau bemängelt... vielleicht habe ich ja auch die Aufgabenstellung missverstanden.
LG
Daniel
muss mal den uralten Thread ausgraben, denn ich habe versucht bei SPOJ eine einfache Problemstellung zu lösen.
Aufgabe
Your program is to use the brute-force approach in order to find the Answer to Life, the Universe, and Everything. More precisely... rewrite small numbers from input to output. Stop processing input after reading in the number 42. All numbers at input are integers of one or two digits.
Meine Lösung
Code: Alles auswählen
numbers = []
while True:
single_numbers = int(input('Give numbers: '))
if single_numbers != 42:
numbers.append(single_numbers)
elif single_numbers == 42:
print('Output:')
for elements in numbers:
print(elements)
break
LG
Daniel
Also zum einen faellt hier auf, dass du eine voellig unnoetigen zweiten Test im elif hast- ein simples else reicht, denn das wird ja genau dann ausgefuehrt, wenn das if *nicht* wahr gewesen ist.
Und zum zweiten denke ich machst du etwas unnoetiges, und damit auch potentiell falsches: du gibst die Zahlen nicht direkt einfach wieder aus, sondern stattdessen speicherst du die zwischen. Wo steht, dass das passieren soll?
Und zum zweiten denke ich machst du etwas unnoetiges, und damit auch potentiell falsches: du gibst die Zahlen nicht direkt einfach wieder aus, sondern stattdessen speicherst du die zwischen. Wo steht, dass das passieren soll?
Außerdem werden bei dir in jedem Durchlauf alle bisherigen Zahlen ausgegeben. Dies war ja so nicht gefordert.
Zudem würde ich mich an deiner Stelle streng an das halten, was in der Aufgabenstellung als erwarteter Output steht, d.h. keine Zusatztexte ausgeben oder ähnliches.
Ich hab das Problem im ersten Anlauf ohne großes Überlegen gelöst, indem ich einfach zeilenweise von STDIN in einer Endlosschleife lese und bei 42 abbreche. Alle anderen Zahlen werden in "ihrem" Schleifendurchlauf jeweils stumpf auf den Bildschirm geschrieben - fertig.
Zudem würde ich mich an deiner Stelle streng an das halten, was in der Aufgabenstellung als erwarteter Output steht, d.h. keine Zusatztexte ausgeben oder ähnliches.
Ich hab das Problem im ersten Anlauf ohne großes Überlegen gelöst, indem ich einfach zeilenweise von STDIN in einer Endlosschleife lese und bei 42 abbreche. Alle anderen Zahlen werden in "ihrem" Schleifendurchlauf jeweils stumpf auf den Bildschirm geschrieben - fertig.
Servus!
ich habe in der Angabe etwas unterschlagen. Hier ist unten ein Beispiel, wie es offenbar aussehen soll:
Input:
1
2
88
42
99
Output:
1
2
88
Deshalb mein Ansatz mit dem Zwischenspeichern in die Liste.
LG
Daniel
ich habe in der Angabe etwas unterschlagen. Hier ist unten ein Beispiel, wie es offenbar aussehen soll:
Input:
1
2
88
42
99
Output:
1
2
88
Deshalb mein Ansatz mit dem Zwischenspeichern in die Liste.
LG
Daniel
Es soll nicht *offenbar* so aussehen, es soll *exakt* so aussehen. Das ist ein ganz wichtiger Punkt. In aller Regel werden solche Aufgabenstellungen maschinell ausgewertet. Das sitzt kein menschlicher Prüfer hinter, der dein Programm abruft, die Zahlen händisch als Antwort auf deine Abfragen einträgt und am Ende ein grünes Häkchen setzt.
Das war mir schon klarDas sitzt kein menschlicher Prüfer hinter, der dein Programm abruft, die Zahlen händisch als Antwort auf deine Abfragen einträgt und am Ende ein grünes Häkchen setzt.
@Snafu: Hast du es auch hochgeladen und wurde es akzeptiert?
Nun hab ich es mal so versucht:
Code: Alles auswählen
numbers = []
print('Input:')
while True:
single_numbers = int(input())
if single_numbers != 42:
numbers.append(single_numbers)
else:
print('Output:')
for elements in numbers:
print(elements)
break
Zuletzt geändert von mcdaniels am Donnerstag 12. April 2012, 13:03, insgesamt 1-mal geändert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Da kapiere ich immer noch nicht den kausalen Zusammenhang; snafu wies Dich ja schon darauf hin, dass man die Zahlen einfach direkt ausgeben kann, wenn sie nicht 42 sind...mcdaniels hat geschrieben: Deshalb mein Ansatz mit dem Zwischenspeichern in die Liste.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ich bezweifele doch sehr stark, dass da eine solch formatierte Ausgabe gewuenscht ist. Sondern einfach nur eingelesen, und die Zahlen ausgegeben werden. Ich meine, dein Terminal kennt doch auch keinen Fett-Druck und so, oder?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Vielleicht noch mal als Tipp, weil Du - vermutlich - noch einen Denkfehler machst bzgl. Deines In- und Outputs:
Vergleiche das mal mit Deinem Beispiel - und ich meine nicht den Fettdruck
Code: Alles auswählen
Input:
1
2
88
42
Code: Alles auswählen
Output:
1
2
88
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In Deinem Beispiel stand die "99" am Schluss der Eingabe. Das sollte - so weit ich das verstanden habe - gar nicht möglich sein.mcdaniels hat geschrieben:@hyperion: Hm, bekomme exakt diese (deine) Ausgabe.
Unabhängig davon benötigt man einfach keine Liste - ich kann ehrlich gesagt gar nicht verstehen, was daran so kompliziert zu verstehen ist. Das Verwenden einer Liste ist doch viel "schwieriger"...
Edit: Aha... also war das Beispiel vorhin nicht korrekt!?!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
So, nachdem ich mit meinen Edits sonst Chaos verursache, fasse ich nochmal zusammen
Mein "Programm" kreiert folgende Ausgabe:
Das Beispiel in dem beim Input die 99 nach 42 auch noch eingegeben werden kann, stammt von der Aufgabenstellung http://www.spoj.pl/problems/TEST/
Mein "Programm" kreiert folgende Ausgabe:
Code: Alles auswählen
Input:
1
2
88
42
Output:
1
2
88