Hilfe bei Aufgaben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

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:

Code: Alles auswählen

L1 = []
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?
Zuletzt geändert von Hyperion am Sonntag 11. Mai 2014, 12:22, insgesamt 1-mal geändert.
Grund: Code in Python-Code-Tags gesetzt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum und zu Python! (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
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

hi,

ja ich weiß das die aufgabe damit noch nicht gelöst ist, aber wenn ich

Code: Alles auswählen

Z1 = raw_input("zahl eingeben:")
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")
Zuletzt geändert von Hyperion am Sonntag 11. Mai 2014, 12:22, insgesamt 1-mal geändert.
Grund: Code in Python-Code-Tags gesetzt.
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.
DaftWullie
User
Beiträge: 37
Registriert: Donnerstag 17. Mai 2012, 21:28

@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.
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.
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

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
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

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?
Zuletzt geändert von Hyperion am Sonntag 11. Mai 2014, 12:21, insgesamt 1-mal geändert.
Grund: Code in Python-Code-Tags gesetzt.
BlackJack

@needphython: Was denkst Du denn? Wie sieht die Ausgabe aus, und ist das das was in der Aufgabe beschrieben steht?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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?
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

L1 enthält [<class 'float'>, <class 'float'>, <class 'float'>] ich habe keine zahlen bei der aufforderungen eingegeben

Bild

was ist bei aufg 4 mit elementen gemeint? ein tipp wäre nett
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@needphython: nochmal zurück: was glaubst Du bewirkt die Zeile

Code: Alles auswählen

z1 = float
BlackJack

@needphython: Mit Elementen sind die Werte in der Liste gemeint.
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

Sirius3 hat geschrieben:@needphython: nochmal zurück: was glaubst Du bewirkt die Zeile

Code: Alles auswählen

z1 = float
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'
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.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

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.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
needphython
User
Beiträge: 11
Registriert: Samstag 10. Mai 2014, 14:56

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
Zuletzt geändert von Hyperion am Sonntag 11. Mai 2014, 12:23, insgesamt 1-mal geändert.
Grund: Code in Python-Code-Tags gesetzt.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Erklärt aber nicht warum man "z1 = float" schreibt, wenn man eine Typumwandlung ausführen will. Das ist in allen Programmiersprachen Blödsinn².
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten