Num='0325198450874160'
def Nummerker(Num):
l=[]
i=0
y=0
x=0
k=0
while x<len(Num):
if Num[0]==0:
y=x+4
for i in range(0,4):
if y== 0:
y=y-1
else:
if x==0:
l.pop(k[y])
y=x+4
for i in range(0,4):
if y== 0:
y=y-1
k=k+1
Nummerker(Num)
Traceback (most recent call last):
File "/home/pi/Documents/Bwinf/Nummernmerker.py", line 22, in <module>
Nummerker(Num)
File "/home/pi/Documents/Bwinf/Nummernmerker.py", line 16, in Nummerker
l.pop(k[y])
TypeError:int' object is not subscriptable
Ich habe das Problem, dass ich nicht weiß wie man den Fehler beheben kann.
Ich hoffe ihr könnt mir helfen. Vielen Dank im Voraus.
TypeError: 'int' object is not subscriptable
"k" ist bei dir halt einfach ein Integer (wie die Fehlermeldung schon sagt). Da kannst du nur den Wert direkt von "k" nehmen. Ein Indexzugriff, wie du ihn hier offenbar versuchst, ist für Integer bzw Zahlen naturgemäß nicht möglich. Das geht nur für Listen, Strings und andere Container-Typen, weil die sich halt aus mehreren Einzelwerten zusammensetzen. Zahlen dagegen haben genau *einen* Wert. Falls du an die einzelnen Ziffern willst, dann müsstest du die Zahl vorher in einen String umwandeln.
Zuletzt geändert von snafu am Sonntag 24. November 2019, 12:01, insgesamt 1-mal geändert.
Einfach str(k) schreiben, wenn die Zahl als String genutzt werden soll. Bedenke dabei, dass der Originalwert von k (und somit auch der Typ) erhalten bleibt. Du musst mit der Rückgabe des Aufrufs arbeiten...
Ich weiß gar nicht, was Du machen willst. Der Funktionsname trägt nicht gerade dazu bei, zu verstehen, was die Funktion machen soll, welche Nummer soll sich Num-Merker merken?
Einbuchstabige Variablennamen sind schlecht, weil sie auch nicht zum Verständnis beitragen.
Weder `Num` noch `x` ändern sich innerhalb der while-Schleife, so dass das eine Endlosschleife ist.
`Num[0]==0` kann nie wahr sein, da `Num` ja offensichtlich ein String ist und deshalb nicht gleich einer Zahl sein kann.
Die for-Schleife bei
ist ziemlich nutzlos. `i` wird gar nicht benutzt und sollte `y` beim Eintritt 0 sein, so ist sie beim nächsten Schritt -1 und die restlichen drei Durchläufe machen nichts mehr.
Was soll die Funktion machen? Welche Gedanken hast Du Dir dann beim Lösen dieses Problems gemacht?
Einbuchstabige Variablennamen sind schlecht, weil sie auch nicht zum Verständnis beitragen.
Weder `Num` noch `x` ändern sich innerhalb der while-Schleife, so dass das eine Endlosschleife ist.
`Num[0]==0` kann nie wahr sein, da `Num` ja offensichtlich ein String ist und deshalb nicht gleich einer Zahl sein kann.
Die for-Schleife bei
Code: Alles auswählen
for i in range(0,4):
if y==0:
y=y-1
Was soll die Funktion machen? Welche Gedanken hast Du Dir dann beim Lösen dieses Problems gemacht?
Das Programm soll der Lösung von der BWINF Aufgabe Nummernmerker ausgeben.(Ich habe dies als Schulprojekt)Eragon hat geschrieben: ↑Sonntag 24. November 2019, 11:31 Num='0325198450874160'
def Nummerker(Num):
l=[]
i=0
y=0
x=0
k=0
while x<len(Num):
if Num[0]==0:
y=x+4
for i in range(0,4):
if y== 0:
y=y-1
else:
if x==0:
l.pop(k[y])
y=x+4
for i in range(0,4):
if y== 0:
y=y-1
k=k+1
Nummerker(Num)
Traceback (most recent call last):
File "/home/pi/Documents/Bwinf/Nummernmerker.py", line 22, in <module>
Nummerker(Num)
File "/home/pi/Documents/Bwinf/Nummernmerker.py", line 16, in Nummerker
l.pop(k[y])
TypeError:int' object is not subscriptable
Ich habe das Problem, dass ich nicht weiß wie man den Fehler beheben kann.
Ich hoffe ihr könnt mir helfen. Vielen Dank im Voraus.
- __blackjack__
- User
- Beiträge: 13116
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Hier mal die Aufgabe:
Hier sind die Nummern:Aufgabe 2
Schreibe ein Programm, das Sarahs Mutter helfen kann, sich lange Nummern zu merken. Dein Programm soll eine Nummer, also eine Folge von Ziffern, einlesen und sie so in Blöcke aufteilen, dass gilt:Du kannst davon ausgehen, dass eine einzulesende Nummer aus 2 bis 30 Ziffern besteht. Wende dein Programm auf alle Beispielnummern an, die sich auf der BWINF-Website befinden.
- Jeder Block hat höchstens vier, aber mindestens zwei Ziffern.
- Die Anzahl der Blöcke, die mit einer Null beginnen, ist minimal.
005480000005179734
03495929533790154412660
5319974879022725607620179
9088761051699482789038331267
011000000011000100111111101011
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13116
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
IMHO muss die Lösung übrigens entweder rekursiv sein (oder eine rekursive Lösung die iterativ ausgedrückt wurde) oder man muss nachvollziehbar erklären können, warum die nicht-rekursive Lösung auch garantiert eine Lösung mit minimaler Anzahl von mit Null beginnenden Blöcken findet.
Hier mal Infos zu den Nummern aus der Aufgabe:
Es gibt 33 Möglichkeiten 005480000005179734 nach den Regeln aufzuteilen.
Jeweils 2 Blöcke fangen mit 0 an.
Es gibt 1507 Möglichkeiten 03495929533790154412660 nach den Regeln aufzuteilen.
Jeweils ein Block fängt mit 0 an.
Es gibt 1198 Möglichkeiten 5319974879022725607620179 nach den Regeln aufzuteilen.
Kein Block fängt mit 0 an.
Es gibt 6886 Möglichkeiten 9088761051699482789038331267 nach den Regeln aufzuteilen.
Kein Block fängt mit 0 an.
Es gibt 404 Möglichkeiten 011000000011000100111111101011 nach den Regeln aufzuteilen.
Jeweils 3 Blöcke fangen mit 0 an.
Hier mal Infos zu den Nummern aus der Aufgabe:
Es gibt 33 Möglichkeiten 005480000005179734 nach den Regeln aufzuteilen.
Jeweils 2 Blöcke fangen mit 0 an.
Es gibt 1507 Möglichkeiten 03495929533790154412660 nach den Regeln aufzuteilen.
Jeweils ein Block fängt mit 0 an.
Es gibt 1198 Möglichkeiten 5319974879022725607620179 nach den Regeln aufzuteilen.
Kein Block fängt mit 0 an.
Es gibt 6886 Möglichkeiten 9088761051699482789038331267 nach den Regeln aufzuteilen.
Kein Block fängt mit 0 an.
Es gibt 404 Möglichkeiten 011000000011000100111111101011 nach den Regeln aufzuteilen.
Jeweils 3 Blöcke fangen mit 0 an.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman