Listen eingeben lassen

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.
Antworten
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

Hallo zusammen,
ich habe folgendes Problem:
Ich suche eine Befehlskette, in der ein User beim ausführen eines Programms eine Liste mit mehreren Elementen eingeben kann, und das Programm anschließend mit dieser Liste arbeitet. Es soll das zum Beispiel das i-te Element der Liste ausgegeben werden (unten nochmal verdeutlicht)
Das Programm soll in etwa so funktionieren:
>>> Geben Sie eine Liste ein
1, 2, 3, 4, 5, 6
>>> Das Liste[1] Element ist die Zahl 2

Das ganze klingt ziemlich simple, jedoch funktioniert das ganze bei mir nur über einen unschönen weg!

Hier mal ein paar Ansätze der Problematik:
print("Geben Sie eine Liste ein")
Liste = input()
--> Die Leerzeichen und Kommas werden als einzelne Elemente gewertet, sprich das Liste[1] Element wäre ein Komma " , "

print("Geben Sie eine Liste ein")
Eingabe = input()
Liste = list(Eingabe)
--> Die Leerzeichen und Kommas werden ebenso als einzelne Elemente gewertet und aufgelistet

Folgendermaßen funktioniert es über ein unschönen weg: Ich trage im Programm selbst die Liste ein, und nicht in der Ausführung von Python Shell
print("Geben Sie eine Liste ein")
Liste = [ ] # --> Die Zahlenfolge in den eckigen Klammern eintragen
--> So funktioniert es wie gewünscht

Nun meine Frage an euch. gibt es einen Weg, dass die Liste im Programm von dem Benutzer eingegeben werden kann, ohne der Problematik mit den Kommas und Leerzeichen)

Liebe Grüße
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das was eingegeben wird, ist eine Zeichenkette.
Schau dir mal die Funktion .split() an, die Zeichenketten haben.
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

sparrow hat geschrieben: Mittwoch 10. Juni 2020, 10:10 Das was eingegeben wird, ist eine Zeichenkette.
Schau dir mal die Funktion .split() an, die Zeichenketten haben.
Danke für die Antwort!
Das ganze funktioniert nun schonmal besser, jedoch noch nicht optimal.
Liste = input()
Liste = Liste.split()
Bei der Ausgabe von print(Liste[1]) kommt nun jeweils das Element gefolgt von dem Komma.
Sprich die Ausgabe ist:
>>> 2,

Kann man das auch noch beheben?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jan163: Ja kann man. Lies mal die Dokumentation von `split()` an welchen Zeichen das aufteilt und wie man das ändern kann.

Und natürlich muss man die dadurch entstehenden Zeichenketten mit Ziffern drin auch noch in Zahlen umwandeln. Falls es ganze Zahlen sein sollen, braucht man dann noch `int()`, und eine Schleife oder „list comprehension“ oder `map()` und `list()`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

__blackjack__ hat geschrieben: Mittwoch 10. Juni 2020, 10:44 @Jan163: Ja kann man. Lies mal die Dokumentation von `split()` an welchen Zeichen das aufteilt und wie man das ändern kann.

Und natürlich muss man die dadurch entstehenden Zeichenketten mit Ziffern drin auch noch in Zahlen umwandeln. Falls es ganze Zahlen sein sollen, braucht man dann noch `int()`, und eine Schleife oder „list comprehension“ oder `map()` und `list()`.
Nochmals danke! Jedoch gibt es ein weiteres Problem:
Programm:
print("Geben Sie eine Liste ein")
Liste = input().split(", ")
print(Liste)

Ausgabe:
Geben Sie eine Liste ein
1, 2, 3, 4, 5, 6
['1', '2', '3', '4', '5', '6']
>>>
Die Liste wird nun wie gewünscht erstellt, jedoch ist jedes Element noch mit einem einen Hochstrich " '1' " versehen (sieht man oben in der Ausgabe).
Kann man diese Hochstriche auch noch entfernen?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jan163: hast Du in __blackjack__s Beitrag auch den letzten Satz gelesen?
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

Sirius3 hat geschrieben: Mittwoch 10. Juni 2020, 12:47 @Jan163: hast Du in __blackjack__s Beitrag auch den letzten Satz gelesen?
Ja das habe ich. Nur was bringt mir das, wenn ich mit all diesen Befehlen nichts anfangen kann, da ich sie noch nie benutzt habe oder nicht weis, wie ich sie anwenden soll?
Wie wäre es denn einfach mit einer netten Erklärung zum Lösungweg, sodass ich davon was lernen kann? Einfach nur Befehle hier zu schreiben bringt mir nichts, wenn ich noch nie mit denen gearbeitet habe. Mit int() und list() hsb ich hiet keine Ahnung was ich machen soll. Diesen map() Befehl oder list comprehension hab ich noch nie verwendet🤷🏻‍♂️
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und mal googeln und in der Dokumentation nach dieser Handvoll von Begriffen suchen - auch unmöglich?
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

__deets__ hat geschrieben: Mittwoch 10. Juni 2020, 13:34 Und mal googeln und in der Dokumentation nach dieser Handvoll von Begriffen suchen - auch unmöglich?
Bereits getan, nichts wirklich gefunden, dass mein Problem beschrieben hat🤷🏻‍♂️ Anstatt diesen dummen Kommentar zu schreiben, hättest du es mir doch einfach auch erklären können...

Echt sympathische & tolle Leute hier, denk das war das letzte mal, dass ich in diesem Forum nach Hilfe frage
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jan163: Hier gibt es Hilfe zur Selbsthilfe. Natürlich wirst Du nicht genau Dein Problem beschrieben finden. Aber Du wirst finden was die `int()`-Funktion macht, was eine „list comprehension“ ist, wie die aussieht, und was man damit machen kann, und beides zusammen führt dann zur Lösung. Programmieren ist nicht suchen nach dem exakten Problem oder nach der Lösung von anderen zu dem exakten Problem zu fragen und dann jeweils nur abzuschreiben, sondern die Werkzeuge die es gibt kennenlernen, und daraus selbstständig Lösungen zu bauen. Das müssen die Leute die Du hier um Hilfe fragst ja letztlich auch so machen.

Alles nötige Wissen was man zum Lösen Deines Problems braucht, kann man beispielsweise aus dem Anfängertutorial in der Python-Dokumentation ziehen. Das sind Grundlagen die antwortende in der Regel voraussetzen. Und wenn Du die nicht drauf hast, dann musst Du sie Dir erarbeiten. Das kann Dir letztendlich niemand anderes abnehmen. Falls dabei konkrete Fragen auftreten, kannst Du die natürlich gerne stellen.

Die Hochstriche in der Liste kommen übrigens daher, dass es sich um Zeichenketten handelt und deren `repr()`-Darstellung so aussieht, dass man sie als literale Zeichenketten in Quelltext kopieren kann. Du willst also nicht die Hochstriche entfernen, sondern die Elemente von Zeichenketten in Zahlen umwandeln.

Code: Alles auswählen

In [57]: items = ["1", "2", "3"]                                                

In [58]: items                                                                  
Out[58]: ['1', '2', '3']

In [59]: items[0]                                                               
Out[59]: '1'

In [60]: type(items[0])                                                         
Out[60]: str

In [61]: numbers = [1, 2, 3]                                                    

In [62]: numbers                                                                
Out[62]: [1, 2, 3]

In [63]: type(numbers[0])                                                       
Out[63]: int
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jan163: niemand weiß hier, was Du Dir schon angeschaut hast und wo Du dann nicht weiter kommst. Die Hochstriche zeigen dass es Strings sind, und __blackjack__ hat wörtlich geschrieben, dass bei split eine Liste von Strings erzeugt wird, und falls man Zahlen will, kann man Strings mit `int` in Zahlen umwandeln. Wenn man das für mehr als einen String machen möchte, die in einer Liste stecken, dann braucht man eine Schleife, oder Listcomprehension oder `map`.
Wo Du gerade in Deinem Lernstoff bist, weiß halt auch wieder niemand. Kennst Du schon den Unterschied zwischen verschiedenen Datentypen (str, int)? Weißt Du, was eine Liste ist? Wie man damit arbeitet? Was Schleifen sind?
Natürlich könnte man jetzt zu jedem der Punkte eine lange Erklärung abgeben, die im wesentlichen aus dem besteht, was eh schon in der Dokumentation oder in jedem einigemaßen ordentlichen Buch steht, oder man verweißt Dich auf diese Quellen. Dann lernst Du auch, wie Du diese Quellen benutzen kannst.
Aber wieder: niemand weiß hier, welche der Punkte Du noch nicht gelernt oder verstanden hast, und auf verdacht alles zu schreiben, dazu hat hier niemand die Zeit.
Also echt sympathische & tolle Fragende hier, wenn man nur die Frage verstehen würde.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jan163 hat geschrieben: Mittwoch 10. Juni 2020, 13:39
Bereits getan, nichts wirklich gefunden, dass mein Problem beschrieben hat🤷🏻‍♂️ Anstatt diesen dummen Kommentar zu schreiben, hättest du es mir doch einfach auch erklären können...

Echt sympathische & tolle Leute hier, denk das war das letzte mal, dass ich in diesem Forum nach Hilfe frage
Fuer Leute, die dermassen ignorant und anmassend sind, ist es auch schwer, Sympathie zu entwickeln. Das Internet ist VOLL von Einfuehrungen zu Python im allgemeinen, und den Stichworten im besonderen.

Das du "wer loest mir mein schlecht beschriebenes Problem fuer lau, sofort, und ohne von mir Eigeninitive abzuverlangen" in Google eingegeben hast, und dabei nix rum kam - tough luck. Du wirst nicht vermisst werden hier.
Antworten