none entfernen

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
John Fischer
User
Beiträge: 6
Registriert: Freitag 29. Mai 2020, 14:46

Hallo,
ich bin grade daran für die Schule ein Sortierverfahren zu schreiben, beim filtern der Liste funktioniert alles, es wird jedoch immer noch non ausgegeben und mir fällt kein Weg ein wie ich das none weg bekommen könnte. wir sind mit Python noch nicht wirklich weit. Ich hab probiert alle nötigen Elemente hier mal einzufügen. Wäre super wenn irgendjemand eine Idee hätte.
Mit freundlichen Grüßen


G = [ ['Donald', 'Trump', 77, 'Washington'], ['Angela', 'Merkel', 63, 'Berlin'], ['Boris', 'Johnson', 49, 'London'] ]

def Liste_filtern(L):
print(L)
print('Um nach Alter zu filter......................1')
print('Um nach Name, Nachname, Wohnort zu filtern...2')
x = int(input('Nach was wollen sie Filtern?: '))
if x == 2:
a = str(input('Geben sie nun den Name, Nachname oder die Adresse an, nach der sie Filtern wollen: '))
for i in L:
if a in i:
print(i)


print('Liste Filtern.............................5')

Eingabe=int(input('Wählen sie durch eingeben der Zahlen eine der Funktionen aus: '))

if Eingabe == 5:
print(Liste_filtern(G))
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Deine Funktion macht viele Bildschirmausgaben, aber gibt keinen Rückgabewert an. Trotzdem übergibst du den Funktionsaufruf an print(). In dem Moment erhälst du None (und das passiert ganz zum Schluss), da Python dies ersatzweise nimmt, wenn man nichts anderes dafür programmiert hat. Die Lösung: Ersetze print(Liste_filtern(G)) durch Liste_filtern(G). Dann ist die Rückgabe immer noch None, aber du siehst sie nicht auf dem Bildschirm.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

G und L sind schlechte Variablennamen weil sie nur einbuchstabig sind und nichts aussagen. `addressen` wäre besser. Genauso ist x für ein Filterkriterium nicht passend. Noch schlimmer ist i für eine Adresse. Denn i wird üblicherweise für einen Index verwendet.
Bei

Code: Alles auswählen

for i in L:
    if a in i:
        print(i)
Kann niemand erraten, was das bedeuten soll. Bei

Code: Alles auswählen

for adresse in addressen:
    if suchwort in adresse:
        print(adresse)
ist alles klar. Gewöhn Dir also gleich an, sprechende Namen zu verwenden.
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@John Fischer: Ergänzende Anmerkungen:

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblichweise in einer Funktion die `main()` heisst.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

`liste_filtern()` passt nicht so ganz zur Tätigkeit der Funktion, denn da würde man eher so etwas erwarten was die eingbaute `filter()`-Funktion macht. Nicht dass da etwas ausgegeben wird.

`input()` liefert bereits eine Zeichenkette, da macht es keinen Sinn noch mal `str()` mit aufzurufen.

Zwischenstand (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python3


def personen_gefiltert_ausgeben(personen):
    print(personen)
    print("Um nach Alter zu filter......................1")
    print("Um nach Name, Nachname, Wohnort zu filtern...2")
    filter_auswahl = int(input("Nach was wollen sie Filtern?: "))
    if filter_auswahl == 2:
        suchbegriff = input(
            "Geben sie nun den Namen, Nachnamen, oder den Ort an,"
            " wonach sie Filtern wollen: "
        )
        for person in personen:
            if suchbegriff in person:
                print(person)


def main():
    personen = [
        ["Donald", "Trump", 77, "Washington"],
        ["Angela", "Merkel", 63, "Berlin"],
        ["Boris", "Johnson", 49, "London"],
    ]

    print("Liste Filtern.............................5")

    eingabe = int(
        input("Wählen sie durch eingeben der Zahlen eine der Funktionen aus: ")
    )
    if eingabe == 5:
        personen_gefiltert_ausgeben(personen)


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
John Fischer
User
Beiträge: 6
Registriert: Freitag 29. Mai 2020, 14:46

Vielen Dank für die ganzen hilfreichen Tipps, ich bin noch relativ neu und unser Lehrer lässt uns quasi alleine lernen, mir hilft also ziemlich jeder Tipp weiter
Antworten