kleine Problemhilfe

Fragen zu Tkinter.
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

kleine Problemhilfe

Beitragvon Boby666666 » Freitag 4. Mai 2007, 12:30

Wie sicher schon der eine oder andere bemerkt hat versuche ich gerade mit mehr oder weniger erfolgreichen Versuchen Python zu lernen. Dazu benutze ich ein Buch welches mir bislang auch gut geholfen hat! Am Ende eines jeden Kapitels kann man dann Aufgaben lösen, wobei die Lösungen gleich im Anschluss folgen. Ich habe es also selber versucht die Aufgabe zu lösen, nicht geschafft und danach die Lösung fleißig abgetippt.
Doch selbst diese Lösung läuft bei mir nicht:

Code: Alles auswählen

# Schiffeversenken.pyw
from Tkinter import *
from random import *
class Feld (object):

    def __init__(self,spiel,x,y):
        self.x = x
        self.y = y
        self.spiel = spiel
        self.button = button(self.spiel.fenster,
                           text='  ',command=self.press)
        self.button.grid(column=x, row=y)

    def press(self):
        check = self.spiel.spielfeld.checkTreffer
        if check(self.x, self.y):
            self.button.config(bg='blue')
        else: self.buttom.config(bg='white')

class Spielfeld (object):
    def __init__(self):
        self.d = {}
        for i in range(12):
          for j in range (12):
             self.d[(i,j)]=0
        for i in range(4): self.setzeBoot(1)
        for i in range(3): self.setzeBoot(2)
        for i in range(2): self.setzeBoot(3)
        self.setzeBoot(4)

    def setzeBoot(self, laenge):
        max = 11 - laenge
        ok=0
        while not ok:
            if choice[(0,1)]:
                y = randint(1,10)
                x = randint(1,max)
                if self.check(x, y, x+laenge-1, y):
                    for x in range(x, x+laenge):
                        self.d[(x, y)] = 1
                    ok=1
            else:
                x = randint(1,10)
                y = randint(1,max)
                if self.check(x, y, x, y+laenge-1):
                    for y in range(y, y+laenge):
                        self.d[(x, y)] = 1
                    ok = 1

    def check(self, x1, y1, x2, y2):
        ok = 1
        for x in range(x1-1,x2+2):
            for y in range(y1-1,y2+2):
                if self.d[x,y]: ok= 0
        return ok

    def checkTreffer(self, x, y):
        return self.d[x,y]
       
class Schiffeversenken (object):
    def __init__ (self):
        self.fenster = Tk()
        self.spielfeld = Spielfeld()
        for x in range(12):
            for y in range(12):
                button=Feld(self, x, y)
        self.fenster.mainloop()
spiel = Schiffeversenken()


Ich habe NATÜRLICH mindestens 10 mal alles auf genauste auf Schreibfehler überprüft aber konnte am Ende keine mehr finden.
Kann mir vieleicht BITTE einer sagen wo mein Fehler sein kann?

Danke schonmal an alle die sich die Mühe machen mir zu helfen.

Edit (birkenfeld): code-Tag auf python gestellt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 4. Mai 2007, 12:39

Was funktioniert denn nicht? Fehlermeldung?
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 12:43

Die Fehlermeldung hilft mir da jedoch auch nicht weiter...

Traceback (most recent call last):
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 68, in <module>
spiel = Schiffeversenken()
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 63, in __init__
self.spielfeld = Spielfeld()
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 26, in __init__
for i in range(4): self.setzeBoot(1)
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 35, in setzeBoot
if choice[(0,1)]:
TypeError: 'instancemethod' object is unsubscriptable
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 4. Mai 2007, 12:48

Boby666666 hat geschrieben:Die Fehlermeldung hilft mir da jedoch auch nicht weiter...

Uns aber schon!

Sie sagt schonmal, dass der Fehler in Zeile 35 liegt. "...is unsubscriptable" sagt aus, dass du eckige Klammern an unpassender Stelle benutzt. Eckige Klammern benutzt man, um auf die Eintraege einer Liste zuzugreifen. Du hast in Zeile 35 stehen: choice[...]. Choice ist aber keine Liste, sondern eine Funktion und wird somit mit runden Klammern aufgerufen.

PS: Und was ist das fuer ein Buch, das dort *-Imorte benutzt werden? Boese, boese!
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 12:56

Rebecca hat geschrieben:PS: Und was ist das fuer ein Buch, das dort *-Imorte benutzt werden? Boese, boese!


Das Buch heißt: Objektorientiert Programmierung mit Python

Es ist sehr hilfreich für Einsteiger, besonders wenn man bedenkt das ich gelernter Koch bin ;)
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Re: kleine Problemhilfe

Beitragvon EyDu » Freitag 4. Mai 2007, 13:23

Boby666666 hat geschrieben:Edit (birkenfeld): code-Tag auf python gestellt.

:D
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 13:31

Rebecca hat geschrieben:Sie sagt schonmal, dass der Fehler in Zeile 35 liegt. "...is unsubscriptable" sagt aus, dass du eckige Klammern an unpassender Stelle benutzt. Eckige Klammern benutzt man, um auf die Eintraege einer Liste zuzugreifen. Du hast in Zeile 35 stehen: choice[...]. Choice ist aber keine Liste, sondern eine Funktion und wird somit mit runden Klammern aufgerufen.


So ausgetauscht... nun kommt dann folgendes:

Traceback (most recent call last):
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 68, in <module>
spiel = Schiffeversenken()
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 66, in __init__
button=Feld(self, x, y)
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 10, in __init__
self.button = button(self.spiel.fenster,
NameError: global name 'button' is not defined
BlackJack

Beitragvon BlackJack » Freitag 4. Mai 2007, 13:36

Was wohl daran liegen könnte das der globale Name `button` nicht definiert ist. Die Vermutung liegt nahe das `Button` gemeint ist.
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 13:39

Ja OK! Das klingt einleuchtend, aber warum in Gottes Namen steht denn in dieser Lösung die def Button nicht mit drinn verdammt...
Ich bin doch noch garnicht so weit das ich mir das selber zusammen reimen kann ;(

Also doch keine empfehlenswertes Buch!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 4. Mai 2007, 13:47

Boby666666 hat geschrieben:aber warum in Gottes Namen steht denn in dieser Lösung die def Button nicht mit drinn verdammt...

Weil Button aus dem Tkinter-Modul kommt. Das ist eben ein Nachteil von *-importen: Man sieht nicht, was woher kommt. Da ist Tkinter.Button(...) doch viel klarer!
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 4. Mai 2007, 13:48

Boby666666 hat geschrieben:Ja OK! Das klingt einleuchtend, aber warum in Gottes Namen steht denn in dieser Lösung die def Button nicht mit drinn verdammt...


Weil der Name "Button" aus dem Modul "Tkinter" kommt. Da siehst du dann auch gleich mal, was passiert wenn man *-Importe nutzt.
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 13:58

EyDu hat geschrieben:Weil der Name "Button" aus dem Modul "Tkinter" kommt. Da siehst du dann auch gleich mal, was passiert wenn man *-Importe nutzt.


Auch das ist sehr einleuchtend, ABER ich habe doch wie gesagt die Lösung nur abgetippt.
Da kann ich also nicht direkt was dafür! Ich würde jetzt nur gerne mal ne Lösung haben damit ich dann an dem Teil weiter machen kann oder ein wenig rumprobieren... doch das geht nicht wenn mir keiner sagt was ich denn anders machen muss..

Also bitte nicht weiter kritisieren ohne gleich ne Lösung für das Problem mit zu liefern... Ich weiß doch das ich ein blutiger Anfänger bin.

Wenn ich jetzt in Tkinter den Button direkt anspreche kommt folgendes:

Traceback (most recent call last):
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 84, in <module>
spiel = Schiffeversenken()
File "C:/Dokumente und Einstellungen/Bob/Desktop/PythonScripts/schiffeversenken.pyw", line 78, in __init__
self.fenster = Tk()
NameError: global name 'Tk' is not defined



EDIT: Kann es sein das irgend etwas mit dem Modul nicht stimmt?
Kann es sein das ich das nicht habe, oder vieleicht nicht da habe wo es sein müsste?
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Beitragvon pyStyler » Freitag 4. Mai 2007, 14:19

Hallo Boby,
http://paste.pocoo.org/show/1476/

Gruss
pyStyler
Benutzeravatar
Boby666666
User
Beiträge: 57
Registriert: Montag 8. Januar 2007, 10:53
Kontaktdaten:

Beitragvon Boby666666 » Freitag 4. Mai 2007, 14:29

pyStyler hat geschrieben:Hallo Boby,
http://paste.pocoo.org/show/1476/

Gruss
pyStyler


Extrem geil!!!

Wo war mein fehler?

Code: Alles auswählen

if choice(auswahl):


Das wars???
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 4. Mai 2007, 14:32

Boby666666 hat geschrieben:Da kann ich also nicht direkt was dafür! Ich würde jetzt nur gerne mal ne Lösung haben damit ich dann an dem Teil weiter machen kann oder ein wenig rumprobieren... doch das geht nicht wenn mir keiner sagt was ich denn anders machen muss..

BlackJack hatte doch schon den Fehler bzw. die Loesung dazu gesagt. Ich wollte dich auch nicht kritisieren, ich weiss ja, dass das Programm nicht von dir ist. Ich wollte dir nur helfen, in Zukunft besser zu programmieren als der Autor des Buches. :wink:

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder