Seite 1 von 1
Anderer Wert wenn eine Liste übergeben wird
Verfasst: Mittwoch 5. Juli 2023, 21:43
von norgsmen
Hi Leute, es geht um diesen Code hier:
Code: Alles auswählen
name = input("Name: ")
final_user_name = ''
for c in range(len(name)):
if not name[c].isnumeric():
final_user_name += name[c]
print(final_user_name)
Dieses Programm filtert mir die Strings aus dem input heraus.
Wenn ich aus
name = input("Name: ") eine Liste mache -->
[input("Name: ")] funktioniert das ganze nicht mehr korrekt. Es wird dann die komplette Eingabe inklusive den Zahlen ausgegeben.
Wenn ich z.b als input 'Tim4' eingebe, sucht er dann bei
if not name[c].isnumeric(): immer nach vier Listen? Also nach 0, 1, 2, 3?
Falls das so ist, dann wird doch mit 0 'Tim4' übergeben, warum funktioniert der Code dann dennoch nicht richtig?
Außerdem wollte ich noch Frage wie eine Funktion funktioniert, bei dem kein Argument übergeben wird, obwohl einer gefordert wird?
Hier wird bei
key die Funktion
s übergeben aber ohne ein argument mit zuübergeben obwohl einer gefordert wird.
Danke für alle Antworten!
Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Mittwoch 5. Juli 2023, 21:56
von __blackjack__
@norgsmen: Also die erste Frage verstehe ich nicht so wirklich. "Tim4" ist halt nicht numerisch, also wird es nicht gefiltert.
Das ist aber auch ganz schrecklich unpythonischer Code. Man iteriert nicht über Zahlen um die dann als Index zu verwenden, sondern gleich über die Elemente:
Code: Alles auswählen
final_user_name = ""
for character in name:
if not character.isnumeric():
final_user_name += character
Und hier ist dann das ``+=`` in der Schleife noch ineffizient. Das macht man nicht. Der idiomatische Weg ist die Ergebnisse in einer Liste zu sammeln und am Ende mit der `join()`-Methode auf Zeichenketten zusammen zu fügen. Oder auch gleich einen Generatorausdruck an die Methode übergeben:
Code: Alles auswählen
final_user_name = "".join(
character for character in name if not character.isnumeric()
)
Bei der zweiten Frage wird `sorted()` die *Funktion* *übergeben*. Wo sollte denn da welches Argument übergeben werden‽ *Aufgerufen* wird die Funktion dann von `sorted()` und zwar *mit* Argument.
Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 06:58
von Dennis89
Hallo,
ergänzend zur ersten Frage, wenn der Name in einer Liste steht, dann erreichst du mit dem Index nicht den ersten Buchstaben des Namens, sondern das erste (oder halt je nach Index) Element der Liste:
Code: Alles auswählen
>>>>name = [input("Name: ")]
>>>>Name: >? Tim4
>>>>name
['Tim4']
>>>>name[0]
'Tim4'
>>>>name[0][0]
'T'
Du musst dann also erst auf das Element der Liste zugreifen und dann über dieses Element iterieren und die Zeichen prüfen. Das würde man dann mit zwei 'for'-Schleifen machen, wie __backjack__ gezeigt hat. Der direkte Indexzugriff in meinem Beispiel soll nur darstellen, was sich hinter diesem Index verbiergt.
Grüße
Dennis
Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 07:37
von __blackjack__
Wobei etwas das `name` heisst eher keine Liste sein sollte. Und Listen die grundsätzlich immer genau ein Element haben, sollten auch keine Listen sein. Die Lösung wäre also keine zweite Schleife, sondern die unsinnige Liste weg lassen.

Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 07:49
von Dennis89
Ich bin davon ausgegangen, dass die Antwort der nächstens Frage so aussehen könnte:
Code: Alles auswählen
print("Bitte ein paar Namen eingeben, damit die Antwort von Dennis sinn macht :)")
names = [input("Name: ") for _ in range(5)]

Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 08:04
von __blackjack__
Ich erweitere das dann gleich mal:
Code: Alles auswählen
print(
"Bitte ein paar Namen eingeben, damit die Antwort von Dennis Sinn macht 🙂"
)
names = [
"".join(
character for character in input("Name: ") if not character.isnumeric()
)
for _ in range(5)
]

Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 09:35
von norgsmen
@__blackjack__
zu frage 2: Das ist ja die Frage. wenn die Funktion an sorted() übergeben wird, was nutzt sie dann als Argument? Weil die Funktion ja wie gesagt ein Argument erwartet.
Frage 1: Wenn name = input("Name: ") nicht zur Liste gemacht wird, werden die Buchstaben gefiltert. Bei name = [input("Enter a username: ")]
wird nun alles Ausgegeben, was man als Input eingibt. Die Frage ist daher was genau bewirkt die Liste das jetzt alles Ausgegeben wird, was als input eingegeben wurde statt nur die Buchstaben.
Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 10:40
von Dennis89
Die Liste bewirkt, dass der Name in einer Liste steht und man/du weitere Namen in einer Liste sammeln kann. Wie kommst du denn darauf, hier eine Liste zu erstellen bzw. was ist denn dein Ziel? Wenn es dir nur um einen Namen geht, dann brauchst du keine Liste.
Erklärung mit Beispiel zur Liste:
https://docs.python.org/3/tutorial/intr ... html#lists
Als Argument wird der Wert aus deiner Liste benutzt, siehe hier:
https://docs.python.org/3/howto/sorting ... -functions
Grüße
Dennis
Re: Anderer Wert wenn eine Liste übergeben wird
Verfasst: Donnerstag 6. Juli 2023, 13:09
von __blackjack__
@norgsmen: Die Funktion `sorted()` ruft die Funktion die als `key`-Argument übergeben wird auf, mit jedem Element von dem ersten Argument das `sorted()` übergeben wird. Die muss ja für jedes Element heraus finden was der Sortierschlüssel ist.