Python Grundkurs

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.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du etwas mit den Elementen einer Liste machen willst, musst du mit for arbeiten. Und dein Ergebnis ist ja auch wieder eine Liste. Denn es können ja nun beliebig viele Stätte das Kriterium erfüllen. Das Ergebnis ist also immer eine Liste, mit keinem oder eben auch mehreren Einträgen.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Code: Alles auswählen

def stadt_mit(names, letter, count):
    ergebnis = leere liste
    eine schleife über die namen in der liste names:
        falls der erste Buchstabe des Namens gleich dem Buchstaben letter und
            falls die Länge des Namens kleiner gleich dem Wert count:
                hänge Namen an die Liste ergebnis an
    gebe ergebnis liste zurück

drucke stadt_mit(liste, buchstabe, anzahl)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Da sieht man mal wieder, wie ähnlich Python und Pseudocode manchmal sein können.

Wenn der Fragesteller das umgesetzt hat zeigen wir sicher noch die Variante mit der List Comprehension und die mit filter. Fällt jemandem noch eine andere sinnvolle Lösung ein?
Ellen
User
Beiträge: 2
Registriert: Montag 23. Mai 2022, 12:20

Hallo,

wer kann mir weiterhelfen? Wie gebe ich nur Wörter mit maximal 7 Zeichen wieder?

Bis hierher habe ich die Aufgabe 3.2.2 geschafft. LG Ellen

from daten import liste, buchstabe, anzahl

def startet_mit_buchstabe(stadt):
ergebnis = stadt[0] == buchstabe
return ergebnis

def stadt_mit(liste):
ergebnis = []
for stadt in liste:
if startet_mit_buchstabe(stadt):
ergebnis.append(stadt)
return ergebnis

print(stadt_mit(liste))


print(liste)
print(buchstabe)
print(anzahl)
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Hallo Ellen,

die Aufgabe lautet ja:
Auf der Rückfahrt im Bus spielen die Campteilnehmenden Stadt-Land-Fluss. Daher soll eine Funktion stadt_mit() geschrieben werden, die eine Liste mit Städtenamen übergeben bekommt, einen Buchstaben und eine Zahl (in genau dieser Reihenfolge!). Nun sollen alle Wörter dieser Liste in einer Liste zurückgegeben werden, die mit dem mitgegebenen Buchstaben beginnen und maximal so viele Zeichen haben, wie die mitgegebene Zahl angibt.

Rufe die Funktion anschließend mit den Variablen liste, buchstabe, anzahl aus der Bibliothek daten auf und gib die resultierende Liste aus.
Deine Funktion startet_mit_buchstabe() ist also nicht gefordert und sie ist auch schlecht gecodet da du da eine globale Variable abfragst, ganz übel, nicht machen.

Die Funktion stadt_mit() soll drei Parameter haben, "die eine Liste mit Städtenamen übergeben bekommt, einen Buchstaben und eine Zahl (in genau dieser Reihenfolge!)."

Und du prüfst bisher nur auf den ersten Buchstaben, da fehlt also einfach noch die Kondition "maximal so viele Zeichen "

Die beiden Konditionen kannst du mit einem logischen "und" verknüpfen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ellen: Die Funktion `stadt_mit()` erfüllt nicht die Anforderung *drei* Argumente zu bekommen. Anzahl und Reihenfolge sind in der Aufgabe vorgegeben.

Ähnliches Problem bei `startet_mit_buchstabe()`. Die Funktion ist zwar nicht zwingend vorgegeben gewesen, aber sie müsste schon alles als Argument(e) bekommen um ihre Aufgabe zu erfüllen. Man darf nicht einfach Namen von ausserhalb verwenden, nur weil die zufällig dort definiert sind. Ausser Konstanten, die man daran erkennnt, dass sie KOMPLETT_GROSS geschrieben werden.

Man muss nicht jedes Zwischenergebnis an einen Namen binden. Insbesondere nicht direkt vor einem ``return`` an einen so nichtsagenden Namen wie `ergebnis`. Das dort ein Ergebnis zurückgegeben wird, sieht man schon daran, dass da ein ``return`` mit einem Wert steht.

Die Funktion hat auch ein kleines Problem mit leeren Zeichenketten:

Code: Alles auswählen

In [38]: def startet_mit_buchstabe(stadt, buchstabe): 
    ...:     return stadt[0] == buchstabe 
    ...:                                                                        

In [39]: startet_mit_buchstabe("Berlin", "B")                                   
Out[39]: True

In [40]: startet_mit_buchstabe("Berlin", "X")                                   
Out[40]: False

In [41]: startet_mit_buchstabe("", "X")                                         
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-41-f3f83a9a3c94> in <module>
----> 1 startet_mit_buchstabe("", "X")

<ipython-input-38-98fbddde96a1> in startet_mit_buchstabe(stadt, buchstabe)
      1 def startet_mit_buchstabe(stadt, buchstabe):
----> 2     return stadt[0] == buchstabe
      3 

IndexError: string index out of range
Beim letzten Fall hätten die meisten wohl ein `False` erwartet und keine Ausnahme. Den Test würde man anders machen. Schau Dir mal an was Zeichenketten so an Methoden bieten. Da gibt es was passende(re)s.

Zur Frage: Wie stellst Du denn fest wie viele Zeichen eine Zeichenkette enthält, also wie lang sie ist? Wie würde man denn mathematisch die Bedingung maximal n Zeichen ausdrücken? Diesen Vergleich kann man in Python auch so ausdrücken. Und dann mit der ersten Bedingung logisch ”und”-Verknüpfen. Städte werden in die Ergebnisliste übernommen wenn sie die erste *und* die zweite Bedingung erfüllen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten