Hi, Fans,
ich habe folgenden Code programmiert. Dabei ist TilgPlan eine Liste (Array) mit 116 Zeilen u 4 Spalten (=Monatswerte)
liste=[]
# hilfe=TilgPlan[20] # hier grht es! [98427.46, 976.34, 123.78, 98301.89]
# hilf=hilfe[3] # hier geht es! 98301.89
for k in range(0,Periode):
hilfe=TilgPlan[k]
hilf=hilfe[3] # Fehlermeldung 'int' object is not subscriptable
liste.append(hilf)
Ich verstehe nicht, warum das ausserhalb der Schleife geht, innerhalb nicht, obwohl es derselbe Code ist.
Wer kann mir helfen?
Liste erzeugt Fehlermeldung
Bitte verwende die Code Tags. Die erscheinen automatisch, wenn du im vollständigen Editor den </> Button drückst. Dazwischen gehört der Code, damit die Einrückung erhalten bleibt.
Bitten verwende vernünftige Namen. Das hilft jedem der deinen Code liest - und dir. Denn ich glaube das ist ein Zeil des Problems.
Oder wie die Fehlermeldung sagt: "hilfe" ist ein Integer. Da funktioniert das mit den eckigen Klammern nicht.
Ob Hilfe eine Zahl sein soll, kann man bei dem Namen eher nicht herleiten. Bei hilf auch nicht.
Bitten verwende vernünftige Namen. Das hilft jedem der deinen Code liest - und dir. Denn ich glaube das ist ein Zeil des Problems.
Oder wie die Fehlermeldung sagt: "hilfe" ist ein Integer. Da funktioniert das mit den eckigen Klammern nicht.
Ob Hilfe eine Zahl sein soll, kann man bei dem Namen eher nicht herleiten. Bei hilf auch nicht.
- __blackjack__
- User
- Beiträge: 13163
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@diemaka: `TilgPlan` ist offenbar eine Liste mit Zahlen und nicht eine Liste mit Listen mit jeweils vier Elementen. Oder zumindest ein Element ist eine ganze Zahl.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
TilgPlan ist eine Liste mit (116) Elementen, wobei jedes Element eine Liste mit 4 float-Zahlen ist. So wurde es vorher berechnet und ausgegeben. Die erste Aussage ergibt sich aus der Tatsache, dass es ein Listenelement [20] ist, die zweite Aussage ergibt sich aus dem Kommentar mit den 4 Zahlen für diese Element. Das funktioniert als Zuweisung vor (!) der Schleife (jetzt auskommentiert). In der Schleife wird hilf (eine Hilfsvariable, weil man das kürzer schreiben kann) plötzlich zum int-Objekt. Und genau das verstehe ich nicht und macht Ärger.
Den (sauber geschriebenen) Code habe ich aus Python in das Eingabefenster hier kopiert, die Einrückungen sind erst nach dem Abschicken verloren gegangen!!
Aber ich denke, hier habt Ihr so viel Erfahrung, dass Ihr das auf die Reihe kriegt.
Wer hilft mir weiter?
Den (sauber geschriebenen) Code habe ich aus Python in das Eingabefenster hier kopiert, die Einrückungen sind erst nach dem Abschicken verloren gegangen!!
Aber ich denke, hier habt Ihr so viel Erfahrung, dass Ihr das auf die Reihe kriegt.
Wer hilft mir weiter?
- __blackjack__
- User
- Beiträge: 13163
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@diemaka: Wenn das so wäre wie Du behauptest würde es diese Fehlermeldung nicht geben. Vielleicht trifft das ja tatsächlich auf das Element an Index 20 zu. Auf mindestens 1 Element trifft es nicht zu. Objekte ändern nicht plötzlich ihren Typ.
Man wählt Namen nach ihrer Aussagekraft, nicht nach ihrer Länge beziehungsweise Kürze. Klar macht es Sinn bei mehreren aussagekräftigen Namen den kürzesten zu wählen, aber das kommt *nach* der Aussagekraft. Weder `hilfe` noch `hilf` sagen hier etwas sinnvolles über den Wert aus, sind also beides schlechte Namen.
`TilgPlan` und `liste` sind ebenfalls schlechte Namen. `liste` ist viel zu generisch und bei `TilgPlan` haben wir wieder eine kryptische Abkürzung. Gute Namen sind wichtig und Quelltext wird deutlich öfter gelesen als geschrieben, also ist optimieren auf wenig Tippen am falschen Ende gespart. Die Optimierung sollte beim einfachen lesen/verstehen liegen. Wobei man sich hier sowohl `hilfe` als auch `hilf` sparen kann und sollte. Man muss nicht jedes kleine Zwischenergebnis an einen Namen binden.
Dann sollte man `k` weglassen (warum überhaupt `k` und nicht `i`?) denn man kann in Python direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Laufindex. Was dagegen einen Namen bekommen sollte, statt eines magischen nichtssagenden Index ist das letzte Element der inneren Listen.
Das ganze wäre dann dieser Einzeiler:
Mit `foobar` was auch immer der vierte Wert bedeutet und `foobars` der Mehrzahl davon. `tilgungs_plan` ist geraten und hält sich, wie auch `periode` an die konventionelle Namensschreibweise: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Man wählt Namen nach ihrer Aussagekraft, nicht nach ihrer Länge beziehungsweise Kürze. Klar macht es Sinn bei mehreren aussagekräftigen Namen den kürzesten zu wählen, aber das kommt *nach* der Aussagekraft. Weder `hilfe` noch `hilf` sagen hier etwas sinnvolles über den Wert aus, sind also beides schlechte Namen.
`TilgPlan` und `liste` sind ebenfalls schlechte Namen. `liste` ist viel zu generisch und bei `TilgPlan` haben wir wieder eine kryptische Abkürzung. Gute Namen sind wichtig und Quelltext wird deutlich öfter gelesen als geschrieben, also ist optimieren auf wenig Tippen am falschen Ende gespart. Die Optimierung sollte beim einfachen lesen/verstehen liegen. Wobei man sich hier sowohl `hilfe` als auch `hilf` sparen kann und sollte. Man muss nicht jedes kleine Zwischenergebnis an einen Namen binden.
Dann sollte man `k` weglassen (warum überhaupt `k` und nicht `i`?) denn man kann in Python direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Laufindex. Was dagegen einen Namen bekommen sollte, statt eines magischen nichtssagenden Index ist das letzte Element der inneren Listen.
Das ganze wäre dann dieser Einzeiler:
Code: Alles auswählen
foobars = [foobar for _, _, _, foobar in tilgungs_plan[:periode]]
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis