Error den ich nicht verstehe

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.
Antworten
Uludug
User
Beiträge: 8
Registriert: Dienstag 6. Juli 2021, 11:15

Hi, ich programmiere gerade ein programm für die cäesar Entschlüsselung via Häufigkeitsanalyse, doch mein Skript geht nicht. Ich erhale immer function object is not subscriptable. Weiß jemand warum? Danke im Vorraus!

Code: Alles auswählen

                def most_frequent(text):
                        counter = 0
                        num = text[0]
                        for i in text:
                                curr_frequency = text.count(i)
                                if(curr_frequency > counter):
                                        counter = curr_frequency
                                        num = i
                        return num
                print(most_frequent(text)) 
                haeufigstes = (most_frequent)
                haeufigstes1 = haeufigstes[0]
                for c in text:
                        count = 0
                        haeufigstebuchstaben = ["e", "n", "i", "s", "r", "a", "t", "d", "h", "u", "l", "c", "g", "m" "o", "b", "w", "f", "k", "z", "p", "v", "j", "y", "x", "q"]
                        haeufigsterbuchstabegerade = haeufigstebuchstaben[count]
                        print(haeufigsterbuchstabegerade)
                        testloesungsbuchstabe = ord(haeufigstes1[0]) - ord(haeufigsterbuchstabegerade[0])
                        print(testloesungsbuchstabe)
              
(Das skript ist noch nicht fertig aber ich würde gerne erstmal das Problem beheben)
Benutzeravatar
Dennis89
User
Beiträge: 1556
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

eine vollständige Fehlermeldung wäre nicht schlecht, damit man sieht wo der Fehler auftritt.
Du willst irgendwo über eine Funktion iterieren oder du hast zum Beispiel eine Funktion die auch 'text' heißt?

Mit mehr Infos von dir, bekommst du hier auch mehr Infos :)

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Uludug: Was der Code letztlich macht ist folgendes:

Code: Alles auswählen

In [127]: def f(): pass                                                         

In [128]: f[0]                                                                  
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-128-d8711d29ed7d> in <module>
----> 1 f[0]

TypeError: 'function' object is not subscriptable
Der ist auch komisch eingerückt. Also erstmal ist das alles zu weit eingerückt. Die Funktion wird ja wohl hoffentlich auf Modulebene definiert und nicht irgendwo tief in einer anderen Funktion. Und dann wird in Python per Konvention vier Leerzeichen pro Ebene eingerückt und nicht 8.

Um die Bedingung bei ``if`` gehören keine Klammern. Zusätzlich ist das auch noch so geschrieben das ``if`` wie ein Funktionsaufruf aussieht — wenn man da Klammern braucht um den Operatorvorrang bei der Bedingung zu beeinflussen, dann sollte da ein Leerzeichen nach dem ``if`` stehen, damit das leichter von einem Funktionsaufruf unterscheidbar ist.

`i` und `num` sind ganz schlechte Namen für *Zeichen*, denn kein Mensch erwartet das bei diesen Namen. `i` ist eine ganze Zahl die in der Regel als Index verwendet werden und `num` eine Zahl allgemein. Wahrscheinlich. Denn Abkürzungen haben auch so ihre Tücken.

Die Funktion würde man aber auch komplett anders schreiben. Die Standardbibliothek kennt `collections.Counter`:

Code: Alles auswählen

from collections import Counter

def most_frequent(text):
    return Counter(text).most_common(1)[0][0]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eingerückt wird mit 4 Leerzeichen. Nicht mit ganz vielen und ganz unterschiedlichen.

Und dein Problem ist diese Zeile:

haeufigstes = (most_frequent)
Antworten