Seite 1 von 3

Keine Ideen um das Gelernte umzusetzen

Verfasst: Dienstag 8. November 2011, 07:17
von mcdaniels
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 :mrgreen:

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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Dienstag 8. November 2011, 07:28
von noisefloor
Hallo,
Wo kamen da die Ideen her?
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).

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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Dienstag 8. November 2011, 09:16
von BlackJack
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.

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Dienstag 8. November 2011, 10:04
von mcdaniels
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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Dienstag 8. November 2011, 15:35
von noisefloor
Hallo,
Fragt sich nur, ob das nicht wieder eine Spur zu groß für mich ist
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.
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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:16
von mcdaniels
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

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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:21
von deets
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?

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:42
von snafu
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.

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:49
von mcdaniels
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

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:56
von snafu
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. ;)

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 12:59
von mcdaniels
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 klar :D

@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
Macht ja an sich genau das, was lt Beispiel gefordert ist.

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:02
von Hyperion
mcdaniels hat geschrieben: Deshalb mein Ansatz mit dem Zwischenspeichern in die Liste.
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...

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:03
von deets
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?

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:06
von mcdaniels
@hyperion: Ich muss das was snafu vorgeschlagen hat erst verinnerlichen. @snafu: Bitte die Lösung nicht posten! :)

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:09
von Hyperion
Vielleicht noch mal als Tipp, weil Du - vermutlich - noch einen Denkfehler machst bzgl. Deines In- und Outputs:

Code: Alles auswählen

Input:
1
2
88
42

Code: Alles auswählen

Output:
1
2
88
Vergleiche das mal mit Deinem Beispiel - und ich meine nicht den Fettdruck ;-)

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:19
von mcdaniels
@hyperion: Hm, bekomme exakt diese (deine) Ausgabe.

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:25
von deets
Bitte kopiere die Ausgabe und poste sie hier - in code-tags, natuerlich.

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:27
von mcdaniels
Input:
1
2
88
42
Output:
1
2
88

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:28
von Hyperion
mcdaniels hat geschrieben:@hyperion: Hm, bekomme exakt diese (deine) Ausgabe.
In Deinem Beispiel stand die "99" am Schluss der Eingabe. Das sollte - so weit ich das verstanden habe - gar nicht möglich sein.

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!?!

Re: Keine Ideen um das Gelernte umzusetzen

Verfasst: Donnerstag 12. April 2012, 13:33
von mcdaniels
So, nachdem ich mit meinen Edits sonst Chaos verursache, fasse ich nochmal zusammen ;)

Mein "Programm" kreiert folgende Ausgabe:

Code: Alles auswählen

Input:
1
2
88
42
Output:
1
2
88
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/