Seite 1 von 1

Elemente nach Zahlen filtern und ausgeben

Verfasst: Dienstag 23. Februar 2021, 21:21
von qhost
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

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Dienstag 23. Februar 2021, 22:23
von Dennis89
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.

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Dienstag 23. Februar 2021, 23:26
von __blackjack__
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? 🙂

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Dienstag 23. Februar 2021, 23:56
von LeSchakal
__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.

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 01:59
von __blackjack__
@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()

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 07:21
von Dennis89
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

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 08:36
von Sirius3
@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)}")

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 09:06
von qhost
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

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 09:55
von tonikae
Schaue dir einmal die Regular-Expressions an:

https://developers.google.com/edu/pytho ... xpressions

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 14:42
von __blackjack__
@Dennis89 & @tonikae: Das ist eine Schulaufgabe bei der ``for`` und `split()` als Vorgaben bestehen. Sehr wahrscheinlich reicht also `isnumeric()` aus.

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Mittwoch 24. Februar 2021, 16:10
von Dennis89
Oh, 'split' als Vorgabe habe ich überlesen :oops:

Sorry und Grüße
Dennis

Re: Elemente nach Zahlen filtern und ausgeben

Verfasst: Freitag 26. Februar 2021, 13:27
von DeaD_EyE

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())