2017-02-09 3 views
-1

ich versucht habe, mein Programm zu laufen, aber jedes Mal, wenn ich tue, bekomme ich diese:Python KeyError, aber ohne dict

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Users\GURNHH\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__ 
    return self.func(*args) 
    File "C:\Users\GURNHH\AppData\Local\Programs\Python\Python35-32\lib\turtle.py", line 686, in eventfun 
    fun() 
    File "C:/Users/GURNHH/OneDrive - Rugby School/ICT/Python/bored.py", line 22, in k1 
    badpos.remove((int(turtle.xcor()), int(turtle.ycor()))) 
KeyError: (0, 0) 

Ich weiß nicht, was es bedeutet, durch Schlüsselfehler in diesem Fall weil ich im Gegensatz zu vielen anderen Leuten kein Diktat benutzt habe. Mein Programm soll die Schildkröte nach 50 Zügen zur Mitte zurückkehren lassen, aber nicht 0,0 in der eingestellten Badpos zählen. Mein Programm ist:

from turtle import Turtle, Screen 
    from math import * 
    from random import * 

    random = 0 

    """def add(): 
     random = random + 1 
    def check(): 
     if random > 4: 
      random = 0""" 

    def k1(): 
     global random 
     turtle.forward(10) 
     random = random + 1 

     if random > 5: 
      turtle.goto(0,0) 
      badpos.remove((int(turtle.xcor()), int(turtle.ycor()))) 


     position = (int(turtle.xcor()), int(turtle.ycor())) 

     if position in badpos: 
      turtle.color("red") 
      screen.bye() 


    def k2(): 
     turtle.left(90) 

    def k3(): 
     turtle.right(90) 

    turtle = Turtle(shape="turtle") 

    badpos = set() 

    screen = Screen() 
    screen.setup(1200, 700) 
    screen.title("Turtle-Snaky Thing") 

    screen.onkey(k1, "Up") 
    screen.onkey(k2, "Left") 
    screen.onkey(k3, "Right") 

    screen.listen() 

    screen.mainloop() 
+6

Die [set] (https://docs.python.org/3/library/stdtypes.html#set.remove) Dokumentation besagt, dass '() entfernen' wirft eine 'KeyError' wenn das Ding Sie versuchen, zu entfernen ist nicht da. – JETM

Antwort

0

Ich bin beeindruckt, wie Sie ein funktionierendes Stück Code nehmen und völlig durcheinander bringen können. Hier ist eine Nacharbeit meiner ursprünglichen Beispiel mit 50 bewegen Einschränkung hinzugefügt:

from turtle import Turtle, Screen 

def k1(): 
    global move_count 

    turtle.forward(10) 

    move_count += 1 

    if move_count % 50 == 0: 
     turtle.home() 

    position = (int(turtle.xcor()), int(turtle.ycor())) 

    if position != (0, 0) and position in badpos: 
     turtle.color("red") 
     screen.bye() 

    badpos.add(position) 

def k2(): 
    turtle.left(90) 

def k3(): 
    turtle.right(90) 

turtle = Turtle(shape="turtle") 

move_count = 0 
badpos = set() 

screen = Screen() 
screen.setup(1200, 700) 
screen.title("Turtle-Snakey Thing") 

screen.onkey(k1, "Up") 
screen.onkey(k2, "Left") 
screen.onkey(k3, "Right") 

screen.listen() 

screen.mainloop() 

Ich bin weniger beeindruckt von Ihnen mein Beispiel Großhandel enthalten, aber nicht meine vorherige Antwort zu akzeptieren. Diese neue Variante ist schwieriger zu verwenden, da es nur so viele Male ist man von zu Hause, bei 90-Grad-Winkel neu starten kann, und nicht auf einer vorherige Zeile Schritt, auch mit dem Ursprung ausgeschlossen:

enter image description here

Vielleicht machen Wendungen 60 oder 30 Grad können Ihnen mehr Mobilität geben, um von zu Hause wegzukommen.

PS. In diesem Programm verwenden Sie kein dict(). Es ist ein set().

+0

danke, wie speichere ich ein Turtle-Bild als PDF? – Gurneyguy

+0

@Gurneyguy, gibt es mindestens ein paar Möglichkeiten. Der einfache Weg wäre, ein separates Tool zu verwenden, um eine Bildschirmaufnahme zu machen und das in dem Format zu speichern, das Sie wünschen - das ist, was ich normalerweise tue. Der schwierigste Weg, innerhalb von Python, besteht darin, das tkinter-Canvas-Objekt vom Turtle-Bildschirm über 'turtle.Screen(). Getcanvas() 'zu erhalten und dann die' postscript() '-Methode auf der Leinwand aufzurufen, um ein PostScript zu erzeugen Datei. Dann müssen Sie die PostScript-Datei in PDF konvertieren (beide sind Adobe-Formate). Lesen Sie die Dokumentation zu tkinter für die Details der Argumente für die Methode 'postscript()'. – cdlane

+0

Könnten Sie mir ein Beispiel für den Code geben? Ich habe gerade Python gestartet, also habe ich keine Ahnung, was ich tue, ich habe es ausprobiert: von Schildkrötenimport Turtle, Screen screen.onkey (k100, "o") #save picture def k100(): bob = Schildkröte () ts = bob.getscreen() name = eingabe ("Wie würdest du dein Meisterwerk nennen?") ts.getcanvas(). Postscript (file = (name, '.png'), colormode = 'farbe ') – Gurneyguy