Seite 1 von 1
Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 12:35
von Aneli98
Moin Ihr Lieben,
ich lerne grade für eine Infoklausur und habe schon bei der Aufgabenstellung ein Problem *peinlich*,
Gegeben:
wortliste = ['zischen', 'Zauberer', 'aber', 'aalen', 'Aalen', 'Zug', 'Zischen']
for i in range(len(wortliste)):
wortliste = wortliste.upper()
wortliste.sort()
i = 0
while i < len(wortliste):
if len(wortliste) < 6:
del wortliste
elif i > 0 and wortliste == wortliste[i-1]:
del wortliste
else:
i += 1
print(wortliste)
Die Ausgabe wäre hier ja ['ZAUBERER', 'ZISCHEN']. Soweit hab ich es begriffen.
Problem (Verständnis der Aufgabenstellung):
Überführen des Programms in eine Funktion mit dem Namen wortliste _bearbeiten, dem die zu bearbeitende Liste als Parameter übergeben wird. Anstelle einer Ausgabe erfolge eine Rückgabe. Teile der Gegebenen Programms können verwendet werden.
Meine Frage:
Wenn ich die Funktion schreibe, setzte ich dann die vorher definierte wortliste als Parameter (in die Parameterliste) ein?
def wortliste_bearbeiten (wortliste):
# Funktionsdefinition (Anweisungsblock)
return rueckgabewert
Ich hoffe ich jemand kann mir Helfen. Schönes WE
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 12:55
von kbr
@Aneli98: ja, das ist richtig. Du übergibst die Liste an eine Funktion:
Code: Alles auswählen
def wortliste_bearbeiten(wortliste):
# tue was
return neue_wortliste
Ich hoffe es ist keine UNI-Klausur, sonst wäre nämlich der vorgegebene Code peinlich.
(Und setze Deinen Code bitte in eine Codebox).
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 13:09
von Aneli98
@ kbr: Danke dir
Ist eine Hochschule. Ist das Programm falsch oder wie meinst du das? ich habe es noch nicht in Phyton eingegeben.
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 13:28
von kbr
@Aneli98: Der Dozent mag vielleicht programmieren können, aber nicht in Python. Was Du siehst ist Python-Syntax, aber kein vernünftiges Python-Programm.
Mir ist klar, dass ihr lernen sollt Funktionen zu schreiben, die Vorlage selbst ließe sich aber als Einzeiler formulieren:
Code: Alles auswählen
wortliste = ['zischen', 'Zauberer', 'aber', 'aalen', 'Aalen', 'Zug', 'Zischen']
wortliste = sorted(set(wort.upper() for wort in wortliste if len(wort) > 6))
print(wortliste)
Das kannst Du natürlich nicht als Lösung der Aufgabe verwenden. Der von der Hochschule vorgegebene Code enthält aber so viele Python Anti-Pattern, dass ihr damit nicht vernünftig Python lernen könnt.
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 13:31
von narpfel
Moin,
das Programm wird so schon funktionieren, aber es sieht
wirklich hässlich aus. In idiomatischem Python würde man das ungefähr so schreiben:
Code: Alles auswählen
def filter_words(words):
return sorted(set(
word.upper()
for word in words
if len(word) >= 6
))
Insbesondere ist es in Python sehr unüblich, Listen zu verändern. Normalerweise wird eine neue Liste erstellt, die dann nur die gewünschten Elemente enthält, weil das Verändern einer Liste, über die iteriert wird, umständlich und fehleranfällig ist.
Außerdem benutzt man `for i in range(len(sequence)):` so gut wie nie, weil man direkt über die Elemente einer Sequenz (beispielsweise eine Liste) iterieren kann. Außerdem sollten konkrete Datentypen in Variablennamen nicht genannt werden, weil Code oftmals mit verschiedenen Datentypen klarkommt. `filter_words` kann zum Beispiel auch mit `set`s oder anderen iterierbaren Objekten arbeiten, die Strings enthalten, deshalb wäre es irreführend, das Argument `wortliste` zu nennen. Üblicherweise wird für Listen einfach der Name der Elemente im Plural gewählt.
Eine weitere Lösungsmöglichkeit wäre das hier, wobei das eventuell für einen Anfänger besser zu verstehen ist:
Code: Alles auswählen
def filter_words(words):
uppercase_words = []
for word in words:
uppercase_words.append(word.upper())
long_uppercase_words = []
for word in uppercase_words:
if len(word) >= 6:
long_uppercase_words.append(word)
long_uppercase_unique_words = set(long_uppercase_words)
return sorted(long_uppercase_unique_words)
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 13:54
von Aneli98
@ kbr: Ahhso ja, dass ist einleuchtend. Ich bin mir aber auch fast sicher, dass unser Prof seine Studenten von der Informatik-Uni die Aufgaben für uns schreiben lässt. Da sind manchmal solch Spacige Aufgabenstellungen dabei, da braucht man erst ne Stunde um die Problemstellung zu verstehen. Viel zu überzogen für meinen Geschmack.
Um es in Python-Sprache zu sagen: Ich kann grade mal meinen Namen in Python programmieren
Ich Danke dir
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 14:57
von Aneli98
@narpfel: ok, eine neue Liste erzeugen und dann die GROSSBUCHSTABEN da einfügen und nur Zählerschleife? Kann man die Zählerschleife in die While Schleife substituieren?
Re: Überführen eines Programms in eine Funktionen
Verfasst: Samstag 6. Januar 2018, 15:45
von __deets__
Klar kann man, sollte man aber nicht. Normalerweise benutzt man in Python Iteration als Prinzip:
Klassische for-loops erzeugt man dann, indem die aufzaehlbaren Dinge ein range werden:
Ein Anti-Pattern das man vermeiden sollt ist
Code: Alles auswählen
for i in range(len(liste_von_dingen)):
ding = liste_von_dingen[i]
Es ist mehr Schreibarbeit, weniger flexibel (wir sind von aufzaehlbaren dingen, welche potentiell sogar endlos sind, ploetzlich zu einer endlichen, wahlfrei zugreifbaren Datenstruktur gewechselt), und sieht auch noch haesslicher aus.
Wenn man jetzt wie in deinem Beispiel auch noch mit
das alles maximal haesslich uebergeht, dann ist dadurch wirklich nix gewonnen.