Seite 1 von 2
Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 15:05
von needphython
hallo,
ich möchte gerne mit eurer hilfe folgende Aufgaben lösen:
1. Es erzeugt eine leere Liste L1.
2. Es fordert den Benutzer auf, drei Zahlen einzugeben. Diese werden in eine Fließkommazahl umgewandelt und der erzeugten Liste L1 angehängt.
3. Es soll eine neue Liste L2 angelegt werden, die zweimal nacheinander die Elemente der Liste L1 enthält. Die Liste L2 soll angezeigt werden.
4. Es soll eine neue Liste L3 angelegt werden, dessen ersten zwei Elemente mit L2 übereinstimmen, dann die Zahl 42 enthält und letztlich die drei Elemente von L1 beinnhaltet.
5. Das zweite Element von L3 soll mit seinem Quadrat ersetzt werden.
6. Die Zahlen in L3 sollen einzelnd ausgegeben werden.
7. Es soll eine Liste L4 erzeugt werden, die die gleiche Länge hat wie L3 und als Einträge eine 0,falls der Eintrag dieser Stelle in L3 kleiner 3 ist und
eine 1, falls der Eintrag in L3 größer 3 ist. L4 soll dargestellt werden.
8. Der Benutzer soll aufgefordert werden, den “0-1” Code von L4 per Tastatur einzugeben. Ist der Code falsch, soll er einen Hinweis bekommen welche Stelle des Codes falsch ist und darf es drei mal neu versuchen. Danach wird das Programm mit einer entsprechenden Nachricht
abgebrochen. Wurde der Code komplett richtig eingegeben, wird das Programm mit einer entsprechenden positiven Nachricht beendet.
Aufgabe 1:
für Aufgabe 2 habe ich folgenden befehl raw_input() gefunden.
Code: Alles auswählen
Z1 = raw_input("zahl eingeben:")
Z2 = raw_input("zahl eingeben:")
Z3 = raw_input("zahl eingeben:")
das klappt aber nicht. wo ist der fehler?
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 15:09
von cofi
Willkommen im Forum und zu P
ython! (kein pHython!)
Nun der Fehler ist, dass du Z1-3 nicht in Fliesskommazahlen umwandelst und auch nicht an L1 anhaengst
Fuer ersteres gibt es die Funktion `float` und fuer letzteres solltest du dich mit den Methoden von Listen bekannt machen:
https://docs.python.org/2/library/stdty ... l#typesseq
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 15:22
von needphython
hi,
ja ich weiß das die aufgabe damit noch nicht gelöst ist, aber wenn ich
eingebe und enter drücke, dann bekomme ich folgende fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
Z1 = raw_input("Zahl eingeben")
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 16:14
von BlackJack
@needphython: Das ist keine komplette Fehlermeldung, da fehlt noch die Information was denn nun eigentlich der Fehler war.
Und das ganze soll sehr wahrscheinlich nicht einfach so in der Python-Shell eingegeben werden sondern in einer Datei gespeichert werden, die dann ausgeführt wird.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 16:21
von DaftWullie
@needphython:
Falls Du Python 3 nutzt (dann steht noch eine Zeile mit "NameError" unter der von Dir geposteten Fehlermeldung): Beim Übergang zu Version 3 wurde raw_input "ausgemustert" und durch input ersetzt.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 16:33
von BlackJack
@needphython: Da in den Aufgaben sowieso Schleifen ein Thema sein werden, kann man das auch bei der zweiten Aufgabe auch schon mit einer Schleife lösen, statt nahezu den selben Quelltext drei mal hin zu schreiben. Sich bei Code und Daten im Quelltext nicht zu wiederholen ist ein wichtiges Prinzip in der Programmierung, was oft als „DRY”-Prinzip („Don't Repeat Yourself”) bezeichnet wird.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 17:04
von needphython
BlackJack hat geschrieben:@needphython: Das ist keine komplette Fehlermeldung, da fehlt noch die Information was denn nun eigentlich der Fehler war.
Und das ganze soll sehr wahrscheinlich nicht einfach so in der Python-Shell eingegeben werden sondern in einer Datei gespeichert werden, die dann ausgeführt wird.
wie speichere ich das in eine datei? muss ich einen editor benutzen? (bin gerade ganz am anfang)
@DaftWullie
danke jetzt klappt es
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 17:44
von needphython
so ich habe aufg 2 gelöst:
Code: Alles auswählen
z1 = input("zahl eingeben:")
z2 = input("zahl eingeben:")
z3 = input("zahl eingeben:")
z1 = float
z2 = float
z3 = float
L1.append(z1)
L1.append(z2)
L1.append(z3)
aufg 3:
L2 = []
L2 = 2* L1
print(L2)
ist das soweit richtig?
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 17:48
von BlackJack
@needphython: Was denkst Du denn? Wie sieht die Ausgabe aus, und ist das das was in der Aufgabe beschrieben steht?
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 17:56
von /me
needphython hat geschrieben:L2 = []
L2 = 2* L1
print(L2)
ist das soweit richtig?
Da fragen wir mal zurück: Warum ordnest du zuerst einer leeren Liste den Bezeichner L2 zu, nur um direkt in der nächsten Zeile L2 an etwas anderes zu binden?
Eine weitere Frage tut sich im vorherigen Teil auf. Was enthält denn die Liste L1 am Ende des Programmablaufs?
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 18:07
von needphython
L1 enthält [<class 'float'>, <class 'float'>, <class 'float'>] ich habe keine zahlen bei der aufforderungen eingegeben
was ist bei aufg 4 mit elementen gemeint? ein tipp wäre nett
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 18:34
von Sirius3
@needphython: nochmal zurück: was glaubst Du bewirkt die Zeile
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 18:39
von BlackJack
@needphython: Mit Elementen sind die Werte in der Liste gemeint.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 18:45
von needphython
Sirius3 hat geschrieben:@needphython: nochmal zurück: was glaubst Du bewirkt die Zeile
sie wandelt z1 nicht in eine fließkommazahl, sondern setzt einfach z1 gleich float. wie wandle ich z1 in eine fließkommazahl?
mit float(z1) bekomme ich folgende fehlermeldung:
TypeError: float() argument must be a string or a number, not 'type'
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 19:17
von BlackJack
@needphython: Na so wie Du's da gezeigt hast, aber halt ohne `z1` vorher an die `float()`-Funktion zu binden. Du musst das auf der eingegebenen Zeichenkette aufrufen.
Mit welchem Lehrmaterial arbeitest Du eigentlich? Wenn ich mir Deinen Wissensstand so ansehe, solltest Du vielleicht erst einmal ein Grundlagentutorial durcharbeiten *bevor* Du die Aufgaben löst. Wie schon gesagt soll das sicher nicht in der Python-Shell eingegeben werden, und Aufgabe 2 würde schon von einer Schleife profitieren. Insgesamt wirst Du um Schleifen nämlich nicht herum kommen. „List comprehension”-Syntax wäre auch etwas was man kennen sollte. Und den Zusammenhang zwischen Wahrheitswerten und Zahlen oder die Syntax für bedingte Ausdrücke (``… if … else …``) sollte man kennen. Und für die letzte Aufgabe sollte man vielleicht sogar eine Funktion selber schreiben können.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 19:21
von darktrym
Ich wünschte mir, man würde den Allgemeine-Fragen-Bereich nicht als "Ich bin zu faul um mich einzulesen" missbrauchen. Die gestellten Aufgaben haben doch ziemlichen Übungsaufgabencharakter und sollten mit ein wenig einlesen machbar sein.
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 19:50
von needphython
hi,
also ich habe mit bluej die java grundlagen gelernt. ich habe aber schon paar monate mit bluej nicht gearbeitet. ich muss mich wieder ein bisschen einarbeiten. die if, while, for scheifen kenne ich. ich behersche sie jetzt nicht so gut, aber kann sie anwenden. mit python arbeite ich zum ersten mal. ich sollte schon in der lage sein die aufgaben zu lösen. ich muss mich halt ein bisschen einarbeiten und die befehle von python kennen lernen. befehle wie input(), append() kannte ich noch nicht. vielleicht gibt es die auch in java, aber ich kannte diese nicht.
meine lösung für aufgabe 1-3:
Code: Alles auswählen
L1 = []
z1 = input("zahl eingeben:")
z2 = input("zahl eingeben:")
z3 = input("zahl eingeben:")
Z1 = float(z1)
Z2 = float(z2)
Z3 = float(z3)
L1.append(Z1)
L1.append(Z2)
L1.append(Z3)
L2 = 2*L1
print(L2)
die restlichen aufgaben mache ich morgen
Re: Hilfe bei Aufgaben
Verfasst: Samstag 10. Mai 2014, 21:23
von darktrym
Erklärt aber nicht warum man "z1 = float" schreibt, wenn man eine Typumwandlung ausführen will. Das ist in allen Programmiersprachen Blödsinn².
Re: Hilfe bei Aufgaben
Verfasst: Sonntag 11. Mai 2014, 00:41
von BlackJack
@needphython: Teilweise ist Python deutlich anders als Java. Zum Beispiel ist Python's ``for``-Schleife das was in Java die ``for (Typ var: iterable)``-Schleife ist. Ein Gegenstück zu Java's ``for (init; test; update)``-Schleife gibt es in Python nicht. Das müsste man sich mit ``while`` nachbauen, falls man es denn wirklich braucht. Aber eigentlich braucht man so etwas nicht.
Wie man eine Zählschleife schreibt, muss man deswegen in Python aber ”neu” lernen, denn in Java schreibt man die in der Regel anders. Wenn man die in Java so wie in Python schreiben wollte, müsste man ein externe Bibliothek einbinden die so etwas wie `range()` in Python 3 bereit stellt, oder sich so einen Datentyp selber schreiben.
`input()` und `append()` sind keine Befehle sondern das eine ist eine Funktion und das andere eine Methode, in diesem Fall auf dem `list`-Datentyp. Befehle oder Anweisungen gehören zum Kern der Sprache den man nicht selber schreiben könnte, also so etwas wie ``import``, ``for``, und so weiter.
Wenn Du in Java schon die Grundlagen kannst, wirst Du dort sicher auch schon mit Container-Objekten wie Listen (`List`-Interface und beispielsweise `ArrayList` als konkrete Implementierung) oder Abbildungen (`Map`-Interface und beispielsweise `HashMap` als konkrete Implementierung) in Kontakt gekommen sein. Bei Java's `List`-Typen heisst die Methode `add()` statt `append()`.
Was in Python auch dazu kommt sind überladene Operatoren bei beliebigen Typen. ``*`` funktioniert in Java ja nur bei primitiven Zahltypen, was zum Beispiel das Rechnen mit anderen als den primitiven Zahltypen ziemlich blöd zu lesen macht, weil die keine Operatoren verwenden können, sondern man das alles mit Methoden schreiben muss.
Das mit den klein geschriebenen Namen und den gross geschriebenen Namen für die Eingaben und Zahlen ist keine gute Idee. Man muss auch nicht jeden Zwischenwert überhaupt an einen eigenen Namen binden. Und wie schon gesagt, man sollte dringend vermeiden nahezu den selben Quelltext mehrfach zu schreiben. Wenn der Code drei mal das gleiche machen soll, dann schreibt man das nicht dreimal als Quelltext sondern nur *einmal*, und zwar in einer Schleife die dreimal durchlaufen wird.
Es läuft wie schon mal gesagt darauf hinaus, dass Du erst einmal die *Python*-Grundlagen lernen solltest, bevor Du dir Aufgaben löst. Für jede Aufgabe einzeln nach einer Lösung zu suchen ist schwieriger und umständlicher. Die Aufgaben sehen sehr stark danach aus um zu überprüfen ob man die Grundlagen von Listen und allen möglichen darauf definierten Operationen kennt und anwenden kann.
Du kannst die Aufgaben ja auch mal in Java lösen um zu sehen wie unterschiedlich die Ergebnisse letztendlich aussehen.
Re: Hilfe bei Aufgaben
Verfasst: Sonntag 11. Mai 2014, 12:25
von Hyperion
@needphython: Bitte benutze für Code die dazugehörigen Tags (über das Menü direkt über der Nachrichteneingabe einfach auswählbar!). Damit wird Dein Code korrekt eingerückt und erhält obendrein ein hübschen Syntax-Highlighting.