Seite 1 von 1
simpel def Funktion - bsp
Verfasst: Donnerstag 21. April 2022, 10:52
von goodbyeworld
hi zusammen
kann mir jmd bitte kurz helfen beim thema "funktionen" (def) in python?
ich möchte eine einfache funktion in python erstellen, bei der der user einen beliebigen text eingeben kann, die funktion dann
überprüft, ob der text wirklich aus charakters besteht, und wenn True, schliesslich die anzahl letters von dem text ausgibt.
danke für eure hilfe!
Re: simpel def Funktion - bsp
Verfasst: Donnerstag 21. April 2022, 11:00
von Sirius3
Und wo hast Du konkret ein Problem mit Deiner Hausaufgabe?
Ich hätte da einige Probleme: was ist ein Charakter? Und was sind Letters? Und was soll passieren wenn der Text nicht wirklich aus Charakters besteht?
Re: simpel def Funktion - bsp
Verfasst: Donnerstag 21. April 2022, 12:16
von goodbyeworld
hi, danke für deine antwort
ich habe hier was, aber es funktoniert leider nicht; ich verstehe auch nciht, weshalb wir hier noch den ascii code beziehen, die aufgabe heisst im ganzen so:
Write a function count_all_letters that counts all letters in string. It should
return a list with 26 numbers from A-Z. Each number shows how many times
the text contained the corresponding letter:
def count_letters(text):
#res = [0] * 26
res = []
for i in range(26):
res.append(0)
for c in text:
c = c.upper()
if c.isalpha() == True:
ascii_value = ord(c) # A:65, B:66 .., Z
index = ascii_value - 65
res[index] += 1
count_letters(hallo)
Re: simpel def Funktion - bsp
Verfasst: Donnerstag 21. April 2022, 12:37
von Sirius3
Einrückungen sind in Python wichtig, bei Deinem Code
Code: Alles auswählen
def count_letters(text):
#res = [0] * 26
res = []
for i in range(26):
res.append(0)
for c in text:
c = c.upper()
if c.isalpha() == True:
ascii_value = ord(c) # A:65, B:66 .., Z
index = ascii_value - 65
res[index] += 1
count_letters(hallo)
ist die vierte und fünfte Zeile falsch eingerückt.
Ein "funktioniert nicht" hilft nicht sehr weit bei der Fehlersuche. Was genau funktioniert nicht? Gibt es eine Fehlermeldung? Wenn ja, welche?
Man benutzt keine Abkürzungen, wenn Du result meinst, nennst Du Deine Variable auch so.
`c` für einen character ist auch zu kurz.
Warum hast Du die erste Methode zum Initialisieren auskommentiert?
`isalpha` liefert True für alle Buchstaben nicht nur für A-Z. Das führt dann im weiteren Verlauf zu Fehlern. Explizit mit True braucht man nicht zu vergleichen.
Re: simpel def Funktion - bsp
Verfasst: Donnerstag 21. April 2022, 12:43
von __blackjack__
@goodbyeworld: Die Aufgabe klingt jetzt aber deutlich anders als im erste Beitrag. Und der Code läuft so nicht. Da bekommt man einen `NameError` weil `res` nicht definiert ist. Einrückung ist wichtig in Python. Und wenn die korrigiert ist, so das `res` nicht mehr undefiniert ist, dann bekommst Du ganz offensichtlich bei `hello` einen `NameError` weil das auch nirgends definiert wurde.
Warum verstehst Du nicht warum der ASCII-Code da verwendet wird? Was hast Du Dir denn dabei gedacht? Oder ist das gar nicht *Dein* Code? Dann wäre das ja auch nicht *Deine* Lösung der Aufgabe.
Der Code würde so mit beliebigen Texten auch gar nicht funktionieren, weil auch Grossbuchstaben ausserhalb von A-Z „Alpha“-Zeichen sind:
Code: Alles auswählen
In [1]: "A".isalpha()
Out[1]: True
In [2]: "Ä".isalpha()
Out[2]: True
In [3]: "Ø".isalpha()
Out[3]: True
Die wären in „beliebigem Text“ auch enthalten, würden aber bei dem Code zu einem Fehler führen weil die Liste dafür nicht gross genug ist.
Die einfachste Lösung dürfte es sein einfach mit `collections.Counter` alles zu zählen und aus dem Ergebnis mit einer Schleife über `string.ascii_uppercase` die gewünschten Zahlen aus dem `Counter`-Objekt abzufragen. Das geht mit einer „list comprehension“ sogar noch etwas kompakter als mit einer Schleife.