Elemente nach Zahlen filtern und ausgeben

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
qhost
User
Beiträge: 2
Registriert: Dienstag 23. Februar 2021, 20:34

Hallo, ich bin hier noch sehr neu, also bitte ich um Verzeihung, falls hier etwas falsch ist :D

Ich habe folgendes Problem:
Bei einer Aufgabe von der Schule, soll ich die Elemente eines eingegeben Satzes darauf untersuchen, ob es sich dabei um eine Zahl handelt. Die Zahlen dieses Satzes sollen dann ausgegeben werden.
Ich habe auch schon einen Ansatz. Nur weiß ich nicht, wie ich das Elemente auf jede Zahl überprüfen kann, denn ich denke es gibt einen leichteren Weg, als alle Zahlen in die Liste einzutragen.

Code: Alles auswählen

Satz = input("Geben Sie einen Satz ein: ")

Element = Satz.split()
Ausgabe = []
Zahlen = ["0", "1"]

for i in Element:
    if i in Zahlen:
        Ausgabe.append(i)

if len(Ausgabe) == 0:
    print("Der Satz enthält keine Zahlen")
else:
    print(Ausgabe)
Bei dem Code ist es Vorgabe, mit der Split Funktion und einer for Schleife zu arbeiten.

mfg
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

schau dir mal im folgenden Link 'isnumeric' an:
https://docs.python.org/3/library/stdtypes.html

Grüße
Dennis

Edit1:Sorry ich war zu schnell, das gibt nur True oder False zurück
Edit2: Das ist kein Problem mit True und False, versuch es mal. Wenn nur die Zahlen die irgendwo in einem Satz vorkommen ausgegeben werden sollen, auch wenn sie sich in Wörter befinden, musst du dir nochmals Gedanken über deine 'split'-Methode machen.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Was ist denn hier die Definition von ”Zahl”? "Dieser Satz enthält inklusive 42, 2,3 und IV, vier Zahlen.” enthält ja die Zahlen 42 und 2,3 und IV und vier. Die sollen alle erkannt werden? 🙂
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
LeSchakal
User
Beiträge: 23
Registriert: Dienstag 5. Februar 2019, 23:40

__blackjack__ hat geschrieben: Dienstag 23. Februar 2021, 23:26 Was ist denn hier die Definition von ”Zahl”? "Dieser Satz enthält inklusive 42, 2,3 und IV, vier Zahlen.” enthält ja die Zahlen 42 und 2,3 und IV und vier. Die sollen alle erkannt werden? 🙂
Du hast das D vergessen und IV kann man ja auch noch aufteilen.
Ich liebe diese 9live Spielchen.
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@LeSchakal: Na dann kann man aber auch noch 24 und 2,3 aufteilen. 😎

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    numbers = [
        text
        for text in input("Geben Sie einen Satz ein: ").split()
        if text.isnumeric()
    ]
    print(numbers if numbers else "Der Satz enthält keine Zahlen.")


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

@__blackjack__ wenn der Text so aussieht 'Hallo Nummer5 es ist 7 Uhr', dann wird bei dir nur die 7 ausgegeben? Habe erst wieder heute Abend wieder einen PC mit Python, sonst hätte ich es natürlich einfach durchlaufen lassen.

Da wäre es auch interessant wie die Zahlen vorkommen. Ob man die 'for'-Schleife über jedes Zeichen im Satz laufen lassen muss.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

@qhost: Variablenamen schreibt man nach Konvention komplett klein. Wenn man einen Satz in seine Teile splittet, dann erhält man nicht ein Element, sondern viele Elemente. Wenn man dann eine for-Schleife über diese Elemente hat, dann ist eines davon nicht i sondern ein Element. Variablennamen sollten nämlich aussagekräftig sein.
Und um zu prüfen, ob ein String nur aus Ziffern besteht, gibt es, wie schon erwähnt isnumeric.
Der Code sieht wäre also

Code: Alles auswählen

satz = input("Geben Sie einen Satz ein: ")

elemente = satz.split()
zahlen = []

for element in elemente:
    if element.isnumeric():
        zahlen.append(element)

if len(zahlen) == 0:
    print("Der Satz enthält keine Zahlen.")
else:
    print(f"Die Zahlen im Satz sind: {', '.join(zahlen)}")
qhost
User
Beiträge: 2
Registriert: Dienstag 23. Februar 2021, 20:34

Hallo,

@Sirius3
Wie gesagt, ich bin noch sehr neu, aber bin immer offen für Tipps.
Sowas habe ich gesucht!
Allen hier vielen Dank für die Hilfe

qhost
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Schaue dir einmal die Regular-Expressions an:

https://developers.google.com/edu/pytho ... xpressions
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89 & @tonikae: Das ist eine Schulaufgabe bei der ``for`` und `split()` als Vorgaben bestehen. Sehr wahrscheinlich reicht also `isnumeric()` aus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

Oh, 'split' als Vorgabe habe ich überlesen :oops:

Sorry und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

def has_number(text):
    for word in text.split():
        if word.isnumeric():
            return True
    return False



has_number("Ich brauche jetzt x Bier")
Erklärung: text.split() liefert eine Liste mit strings zurück. Leerzeichen zwischen den Wörtern werden entfernt. Dann wird jedes Wort überprüft, ob es eine Ganzzahl ist. Der string "5a" wäre z.B. keine Ganzzahl. Die Schleife läuft entweder komplett durch und liefert ein False zurück, wenn keine Ganzzahl gefunden worden ist. Sollte eine Ganzzahl vorkommen, wird die Funktion vorzeitig verlassen und liefert ein True zurück.

Der Idealfall wäre eine Ganzzahl im ersten "Wort". Der schlechteste Fall ist, wenn er die Schleife bis zum Ende durchlaufen muss, weil keine Ganzzhal vorkommt.

Das kann man noch etwas kompakter schreiben:

Code: Alles auswählen

def has_number_any(text):
    return any(word.isnumeric() for word in text.split())
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten