Ich habe eine (wahrscheinlich typische ) Anfängerfrage zu Listen.
Ich deklariere eine Variable und eine Liste
tempaufgabe=""
aufgabe=[]
Danach gebe ich mit Input etwas ein.
input(tempaufgabe)
Danach lasse ich den Inhalt anzeigen
print( tempaufgabe)
Es wird angezeigt, was ich eingegeben habe.
Nun will ich das an das Ende der Liste aufgabe schreiben
aufgabe.append(tempaufgabe)
Wenn ich dann die Liste anzeigen lassen steht
['', '']
darin.
Alles findet in der gleichen Funktion statt.
Was mache ich falsch?
Ich danke euch für eure Hilfe.
Anfängerfrage zu Listen
-
- User
- Beiträge: 9
- Registriert: Freitag 26. Februar 2021, 14:05
Grüße von Schurmalok
Bitte zeige den konkreten Code, keine Umschreibung. In den dafuer vorgesehenen code-tagse (</>-Knopf im vollstaendigen Editor).
Denn das sollte funktionieren, siehe
Denn das sollte funktionieren, siehe
Code: Alles auswählen
def funktion():
aufgabe = []
tempaufgabe="etwas"
aufgabe.append(tempaufgabe)
print(aufgabe)
funktion()
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
Ich vermute, dass hier dein Denkfehler liegt. Das erste Argument von input() gibt nur an, was zur Eingabe angezeigt wird. Der Inhalt von tempaufgabe bleibt unverändert. Aber wie __deets__ sagt, braucht es Code um den genauen Fehler benennen zu können.Schurmalok hat geschrieben: Dienstag 26. Juli 2022, 15:33 Danach gebe ich mit Input etwas ein.
input(tempaufgabe)
Deine Vermutung ist falsch, dass `print(tempaufgabe)` das Eingegebene ausgibt, es wird nur ein leerer String ausgegeben. Du mußt das Ergebnis Deiner Eingabe an eine Variable binden.
Dass Dein Fehler nicht sofort aufgefallen ist, liegt daran, dass Du an `tempaufgabe` ein Dummywert gebunden hast. Man initialisiert keine Variablen auf Vorrat, sondern nutzt die einfach dann, wenn man sie wirklich braucht.
Benutze keine Abkürzungen. `tempaufgabe` hat irgendwas mit Temperatur zu tun, oder? Wenn Du eine Liste hast, dann sollen da wohl mehrere Aufgaben hinein, nenne das also `aufgaben`.
Dass Dein Fehler nicht sofort aufgefallen ist, liegt daran, dass Du an `tempaufgabe` ein Dummywert gebunden hast. Man initialisiert keine Variablen auf Vorrat, sondern nutzt die einfach dann, wenn man sie wirklich braucht.
Benutze keine Abkürzungen. `tempaufgabe` hat irgendwas mit Temperatur zu tun, oder? Wenn Du eine Liste hast, dann sollen da wohl mehrere Aufgaben hinein, nenne das also `aufgaben`.
Code: Alles auswählen
aufgaben = []
aufgabe = input("Aufgabe:")
aufgaben.append(aufgabe)
print(aufgaben)
-
- User
- Beiträge: 9
- Registriert: Freitag 26. Februar 2021, 14:05
Nur mal eine rasche Antwort, der Code folgt noch. Vielen Dank für eure Mühe. Ich habe tatsächlich einen Denkfehler gemacht. Bei meinem Input verändere ich Tempaufgabe nicht und somit bleibt sie leer wie oben initialisiert. Ich bin gerade nicht am Rechner und schicke den Code später, aber wahrscheinlich habt ihr recht und es ist mein Denkfehler. Mit "tempaufgabe meinte ich einen String-Variable, die ich eingebe und anschließend an die eigentlich Liste "aufgaben[]" anhänge. Temp soll temporär heißen. Später mehr....Erst einmal vielen Dank an euch für's Mitdenken. 

Grüße von Schurmalok
- __blackjack__
- User
- Beiträge: 14055
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Schurmalok: Mal aus Sicht von Pascal oder BASIC gesprochen gibt es in Python keine VAR beziehungsweise BYREF Argumente. Allerdings werden bei einfachen Zuweisungen und bei der Übergabe von Argumenten auch nie implizit Werte kopiert. Also ist es auch anders als die Übergabe bei Pascal wenn man nicht VAR angibt oder bei BASIC wenn man ein Argument als BYVAL deklariert.
Namen bei einfachen Zuweisungen und bei Argumenten beziehen sich auf das selbe Objekt. Das nennt sich dann „call by (object) sharing“.
Und zumindest zu Pascal ein Unterschied: Zeichenketten sind unveränderlich. Bei BASIC ist das bei den klassischen Dialekten, mit denen ich angefangen habe, auch so, dass Zeichenketten unveränderlich sind, es gibt auch Dialekte wo das anders ist.
Ich würde übrigens eher keine Funktion schreiben die eine Liste bekommt, und da dann ein Element erzeugt und anhängt, sondern eher eine Funktion, die ein Element erzeugt und als Rückgabewert liefert, und der Aufrufer dann das Element an die Liste anhängt. ”Echte” Funktionen ohne Seiteneffekte lassen sich leichter nachvollziehen, leichter testen, und flexibler verwenden wenn das Ergebnis mal nicht in einer Liste landen soll.
Auch `temporaer` ausgeschrieben ist selten ein sinnvoller Namenszusatz. Variablen sollten nicht global sein, damit hat man lokale Namen, und die sind von ihrer Natur her *alle* temporär. Wenn das Wort keine Bedeutung in der Problemdomäne hat, und damit eine tatsächliche Information ist, oder man neben `temporaere_aufgabe` nicht auch noch eine `aufgabe` hat, gegen die sich das abgrenzt (und man echt keinen besseren Namen findet), sind das viele Buchstaben mit relativ wenig bis gar keiner Bedeutung für den Leser.
Namen bei einfachen Zuweisungen und bei Argumenten beziehen sich auf das selbe Objekt. Das nennt sich dann „call by (object) sharing“.
Und zumindest zu Pascal ein Unterschied: Zeichenketten sind unveränderlich. Bei BASIC ist das bei den klassischen Dialekten, mit denen ich angefangen habe, auch so, dass Zeichenketten unveränderlich sind, es gibt auch Dialekte wo das anders ist.
Ich würde übrigens eher keine Funktion schreiben die eine Liste bekommt, und da dann ein Element erzeugt und anhängt, sondern eher eine Funktion, die ein Element erzeugt und als Rückgabewert liefert, und der Aufrufer dann das Element an die Liste anhängt. ”Echte” Funktionen ohne Seiteneffekte lassen sich leichter nachvollziehen, leichter testen, und flexibler verwenden wenn das Ergebnis mal nicht in einer Liste landen soll.
Auch `temporaer` ausgeschrieben ist selten ein sinnvoller Namenszusatz. Variablen sollten nicht global sein, damit hat man lokale Namen, und die sind von ihrer Natur her *alle* temporär. Wenn das Wort keine Bedeutung in der Problemdomäne hat, und damit eine tatsächliche Information ist, oder man neben `temporaere_aufgabe` nicht auch noch eine `aufgabe` hat, gegen die sich das abgrenzt (und man echt keinen besseren Namen findet), sind das viele Buchstaben mit relativ wenig bis gar keiner Bedeutung für den Leser.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 9
- Registriert: Freitag 26. Februar 2021, 14:05
Hallo zusammen,
das Problem war ich. Ich habe einfach den Input-Befehl falsch verwendet. Jetzt tut die Funktion, was sie soll. Vielen Dank auch für eure Anregungen, wie man Code besser machen kann. Ich lerne ja noch....
das Problem war ich. Ich habe einfach den Input-Befehl falsch verwendet. Jetzt tut die Funktion, was sie soll. Vielen Dank auch für eure Anregungen, wie man Code besser machen kann. Ich lerne ja noch....

Grüße von Schurmalok