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.
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Hi,
ich versuche mich gerade am Grundkurs "Programmieren lernen mit Python" des Hasso-Plattner-Instituts (https://open.hpi.de).
Obwohl der Kurs zwar im Internet noch online ist, aber nicht mehr läuft und es somit auch keinen Ansprechpartner gibt, habe ich es trotzdem bereits ohne fremde Hilfe bis zur Lektion 3 von 4 geschafft. :mrgreen:
Jetzt bin ich aber an einer Aufgabe, bei der ich ohne Hilfe nicht mehr weiter komme.
Vielleicht könnt Ihr mir helfen?

Die Aufgabe lautet wie folgt:

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 a
us.

Vorgegeben ist nur folgende Zeile:

from daten import liste, buchstabe, anzahl

Kann mir jemand einen "Schubs" geben, mit dem ich weiter kommen könnte? :?

Vielen Dank im Voraus.
Micha-DD
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist dir denn nicht klar? Wie du eine Funktion mit drei Parametern schreibst? Wie du fuer ein gegebenes Wort bestimmst, ob es der Bedingung entspricht? Oder was das mit den daten soll?
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Ja, zum einen, weil die Liste ja nicht vorgegeben ist, da sie universell eingesetzt werden soll.
Wie schreibe ich die Parameter der Funktion stadt_mit, damit die Vorgaben (gleiche Anfangsbuchstaben + max. Zeichenanzahl) erfüllt werden?
Der Anfangsbuchstabe und die max. Zeichenanzahl ist ja auch nicht vorgegeben.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Entsprechend der Aufgabenstellung importierst Du die Argumente für die Funktion: "from daten import liste, buchstabe, anzahl".
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Ja, ich kann jetzt natürlich heraus bekommen, welche Städte sich in der Liste befinden, wie der gewünschte Anfangsbuchstabe ist und wie groß die max. Anzahl an Buchstaben der Städte ist.
Ich kann ja abfragen, z.B.:

print(liste)
print(buchstabe)
print(anzahl)

Aber es soll doch sicher universell einsetzbar sein?
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Ich habe die Variablen gefunden, aber der Weg, um die Liste zu erstellen, der nur die Städte mit gleichem Anfangsbuchstaben und gleicher Wortlänge enthält, ist mir trotzdem unklar.

['London', 'Berlin', 'Bonn', 'Budapest', 'Hamburg', 'Rom', 'Paris', 'München', 'New York', 'Bremen', 'Beijing']
B
7

Nach meiner Einschätzung dürfte nur Beijing in der Liste übrig bleiben.
Es gibt zwar 4 Städte, die mit dem Buchstaben "B" beginnen (Berlin, Budapest, Bremen, Beijing), aber nur Beijing besteht auch aus 7 Buchstaben.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Micha-DD: Lies die Aufgabenstellung noch mal was die Zahl bedeutet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

"Nun sollen alle Wörter dieser Liste in einer Liste zurückgegeben werden...maximal so viele Zeichen haben, wie die mitgegebene Zahl angibt."

Habe ich doch.
Die mitgegebene Zahl ist die 7.
Das bedeutet, in der resultierenden Liste sollen nur noch Wörter enthalten sein, die aus 7 Zeichen (= Buchstaben) bestehen.
Und sie sollen mit "B" beginnen.
Wo ist denn mein Denkfehler?
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Wo genau steht denn in der Aufgabenstellung, dass der Name genau so viele Zeichen haben soll?
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Da steht es doch!: (fett gedruckt):

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.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Du kannst das noch so groß schreiben.
Da steht eben nicht, dass die Wörter exakt die Anzahl an Buchstaben haben sollen.
Da steht, dass sie _maximal_ so viele Buchstaben haben sollen.
Das ist ein großer Unterschied.
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Ach sorry, danke für den nochmaligen Tipp. :-)
Man sollte schon alles lesen, maximal heißt ja nicht gleich. ;-)
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Trotzdem fehlt mir noch der rote Faden für die Aufgabe
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Man kann leider gar nicht einschätzen, was du bereits für Wissen hat. Bisher benutzt du ja nur "print".

So bleibt die grundlegende Empfehlung das Python Tutorial in der offziellen Dokumentation durchzuarbeiten.

Ansonsten steht in der Aufgabe ja bereits der Startpunkt: Schreibe ein Funktion, die Parameter entgegenimmt und etwas zurück gibt. Bereits das sieht man aber nicht. Das Benutzen von Funktionen und Datenstrukturen (in diesem Fall der Liste) sind absolute Grundlagen.

Du musst für diese Aufgabe wissen, wie man Funktionen schreibt, wie man die foor-Schleife verwendet und man mit Strings (Zeichenketten) arbeitet. Bei denen speziell , wie man prüft, ob sie mit einem bestimmten Buchstaben beginnen und wie lang sie sind.
Micha-DD
User
Beiträge: 9
Registriert: Samstag 4. Dezember 2021, 22:17

Ich bin da noch blutiger Anfänger.

Nein, ich hatte so angefangen:

from daten import liste, buchstabe, anzahl

def stadt_mit(liste, buchstabe, anzahl):
ergebnis = liste[0] == buchstabe
return(ergebnis)

Ich wollte zunächst erst mal eine Liste zurück geben, die nur aus Wörtern besteht, die mit dem buchstaben (in dem Fall: B) beginnen. Danach wollte ich aus der resultierenden Liste eine Liste mit Namen zurückgeben, die die max. Anzahl an Zeichen (hier: 7) haben. Und schließlich wollte ich diese Liste dann wiedergeben (print).
Den letzten Satz der Aufgabe verstehe ich leider gar nicht.

Etwa so?:
stadt_mit(liste, buchstabe, anzahl)
__deets__
User
Beiträge: 14529
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
Antworten