Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Python fehlerhaftes Programm Iteration » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Python fehlerhaftes Programm Iteration
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Python fehlerhaftes Programm Iteration Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi.
Ich habe diesmal folgendes fehlerhaftes Programm das ich korrigieren soll,es gibt drei Fehler ,einen hab ich glaub ich schon,außerdem soll ich das Protokoll angeben das die Klasse initalsiert

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
class Marmelade:
    step=5

    def __init__(self,start,limit):  
        self.run=start
        self.limit=limit

    def __iter_(self):
       return self

    def __next__(self):
        self.run +=step
        if self.run > self.limit:
            raise StopIteration
        return run

jam=Marmelade(32,45)
for i in jam:
    print(i, end=',')
    for i in jam:
        print(2*i, end='')

print("Empty!")


Die korrigierte Version würde im Moment so aussehen:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
class Marmelade:
    step=5

    def __init__(self,start,limit):  #variable ergänzt und korrigiert
        self.start=start
        self.limit=limit

    def __iter_(self):
       return self

    def __next__(self):
        self.run +=step
        if self.run > self.limit:
            raise StopIteration
        return run

jam=Marmelade(32,45)
for i in jam:
    print(i, end=',')
    for i in jam:
        print(2*i, end='')

print("Empty!")

Und wenn ich es jetzt eingebe sagt er 

TypeError: 'Marmelade' object is not iterable


Ich hab schon geguck,bin aber immer noch ratlos wie ich weitergehen vorgehen kann.

Danke vielmals und lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dr.Java: 21.07.2016 19:08.

21.07.2016 19:05 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Deine Korrektur ist falsch.
Wenn Marmelade nicht iterierbar ist, stimmt wohl was mit dem Iterator nicht. Schau mal scharf hin.

Wenn du das korrigiert hast, geht es weiter mit Fehlermeldungen:
File "board.py", line 12, in __next__
self.run +=step
NameError: name 'step' is not defined

File "board.py", line 15, in __next__
return run
NameError: name 'run' is not defined

__________________
Syntax Highlighting fürs Board (Link)
22.07.2016 06:23 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Merci, erstmal für die Rückmeldung.Das Problem ist ja das ich noch nicht darauf gekommen bin wie ich den Marmeladeniterator ,aber ich schaue nochmal.
Wegen den restlichen Meldungen, okay,dann schaut das bei mir jetzt so aus.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
class Marmelade:
    step=5

    def __init__(self,start,limit):  #variable ergänzen,korrigieren
        self.start=start
        self.limit=limit

    def __iter_(self):
       return self

    def __next__(self,step,run,limit): #variable ergänzen,korrigieren
        self.run +=step
        if self.run > self.limit:
            raise StopIteration
        return run

jam=Marmelade(32,45)
for i in jam:
    print(i, ',', end=',')
    for i in jam:
        print(2*i,',', end='')

print("Empty!")

Habe das dann mit ' ' und " " probiert,mit oder ohne Komma,arbeite aber noch weiter dran es zu lösen .
lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

22.07.2016 22:56 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
def __iter_(self)

Zähl' die Unterstriche vor und nach iter.

__________________
Syntax Highlighting fürs Board (Link)
23.07.2016 06:25 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Oh ,ah so,ich war jetzt nur auf die Marmelade fixiert. Danke,ich hab es korrigiert,das war wohl auch tatsächlich ein Fehler meinerseits.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
class Marmelade:
    step=5

    def __init__(self,start,limit):  #variable ergänzen,korrigieren
        self.start=start
        self.limit=limit

    def __iter__(self):
       return self

    def __next__(self):
        self.run +=step
        if self.run > self.limit:
            raise StopIteration
        return run

jam=Marmelade(32,45)
for i in jam:
    print(i,',',end=',')
    for i in jam:
        print(2*i,',',end=',')

print("Empty!")

AttributeError: 'Marmelade' object has no attribute 'run'

Hm das ganze funktioniert immer noch nicht fehlerfrei,das hat wenn ich richtig sehe aber weniger mit jam,Marmelade zu tun ,sondern bezieht sich jetzt erstmal nur auf next.Das zusätzliche definieren von run,neben self bringt leider nichts,aber ich schaue nochmal.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

23.07.2016 20:36 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
self.run +=step

Wo ist step definiert? Wie müsste der Zugriff korrekt lauten?

__________________
Syntax Highlighting fürs Board (Link)
23.07.2016 20:38 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich ging davon aus das das Wert zuweisen am Anfang, da steht step=5 ausreichen würde.
Zitat:
code:
1:
self.run +=step
Wie müsste der Zugriff korrekt lauten?

Das ist also auch falsch,hab ich schon befürchtet.Konkret springt mir jetzt kein Fehler ins Auge.Ich werde bei Gelegenheit,morgen, noch mal schauen.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

23.07.2016 23:18 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Leider Doppelpost,aber ich muss gestehen das ich nicht dahinter komme. Ich habe geschaut,recherchiert und ausprobiert,keine Ahnung,sieht für mich korrekt aus.Ich schaue aber noch weiter.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

25.07.2016 09:18 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

self.run += self.step
3 Zeilen später hast du das nochmal mit self.run.

__________________
Syntax Highlighting fürs Board (Link)
25.07.2016 09:22 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ach so , ich war jetzt nur unsicher ,weil ich ein Beispiel gesehen habe in der das mit += problemlos geklappt hat,war natürlich ein anderer Zusammenhang,hat mich aber trotzdem stutzig gemacht, dennoch danke,dann sieht das jetzt so aus.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
class Marmelade:
    step=5

    def __init__(self,start,limit):  #variable ergänzen,korrigieren
        self.start=start
        self.limit=limit

    def __iter__(self):
       return self

    def __next__(self,step):
        self.run +=self.step  #self. ergänzen
        if self.run > self.limit:
            raise StopIteration
        return self.run

jam=Marmelade(32,45)
for i in jam:
    print(i,',',end=',')
    for i in jam:
        print(2*i,',',end=',')

print("Empty!")

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

25.07.2016 23:56 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das __init__ hättest du aber einfach lassen sollen. Du hast self.run zu self.start gemacht, obwohl später im Code self.run verwendet wird.
Und bei next hast du die Methodensignatur geändert. Wenn sich ein anderer Programmierer darauf verlässt, funktioniert sein Code dann nicht mehr.

__________________
Syntax Highlighting fürs Board (Link)
26.07.2016 06:30 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ohh, ach so ,jetzt gibt das Programm auch was aus.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
class Marmelade:
    step=5

    def __init__(self,run,limit):  
        self.run=run
        self.limit=limit

    def __iter__(self):
       return self

    def __next__(self):
        self.run +=self.step
        if self.run > self.limit:
            raise StopIteration
        return self.run

jam=Marmelade(32,45)
for i in jam:
    print(i,',',end=',')
    for i in jam:
        print(2*i,',',end=',')

print("Empty!")

>>>import marmelade
37 ,,84 ,,Empty!

Das wär dann die richtige Ausgabe oder? So oder so, vielen lieben Dank.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

27.07.2016 22:57 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
print(i,',',end=',')

Du hast ein Komma ergänzt, das da nicht stand. Ansonsten hatte ich die selbe Ausgabe.

__________________
Syntax Highlighting fürs Board (Link)
28.07.2016 07:22 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Oh,das muss mir runtergefallen sein,danke dir ,ich habe es entfernt. Nur noch eine letzte Frage. Als Fragestellung wird noch angegeben das die Klasse ein bestimmtes Protokoll implementiert,und wie das dann heißt ,ich werde da aber nicht schlau drauß und kann mir auch nichts darunter vorstellen. Vielen lieben Dank nochmal.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

28.07.2016 23:35 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Python fehlerhaftes Programm Iteration