Python Grundkurs
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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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?
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?
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)
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)
Hallo Ellen,
die Aufgabe lautet ja:
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.
die Aufgabe lautet ja:
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.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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
- __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:
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.
Ä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
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