2017-02-09 10 views
-1

Я пытался запустить мою программу, но каждый раз, когда я делаю, я получаю это:Python KeyError, но без Словаря

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) 

Я не знаю, что это означает, что ключ ошибка в этом случае , потому что, в отличие от многих других людей, я не использовал dict. Моя программа должна заставить черепаху вернуться в центр после 50 ходов, но не считать 0,0 в наборе badpos. Моя программа такова:

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

Документация [set] (https://docs.python.org/3/library/stdtypes.html#set.remove) гласит, что 'remove()' вызывает 'KeyError', если вещь, которую вы пытаетесь удалить нет. – JETM

ответ

0

Я впечатлен тем, как вы можете взять рабочий код и полностью испортить его. Вот переделки моего исходного примера с 50 ходов ограничения добавило:

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() 

Я менее впечатлен вы мой примера включения оптовой продажи, но не принимаешь мой предварительный ответ. Этот новый вариант сложнее использовать как есть только так много раз вы можете перезапустить из дома, под углом 90 градусов, а не наступать на предыдущей строке, даже с началом исключенного:

enter image description here

Возможно поворотах 60 или 30 градусов могут дать вам большую мобильность для выхода из дома.

PS. вы не используете dict() в этой программе. Это set().

+0

спасибо, как мне сохранить изображение черепахи в формате pdf? – Gurneyguy

+0

@ Gurneyguy, есть хотя бы несколько способов. Простым способом было бы использовать отдельный инструмент для захвата экрана и сохранить его в желаемом формате - это то, что я обычно делаю. Более сложный способ, изнутри Python, состоит в том, чтобы захватить объект cank tkinter с экрана черепахи с помощью 'turtle.Screen(). Getcanvas()', а затем вызвать метод 'postscript()' на холсте для генерации PostScript файл. Затем вам нужно преобразовать файл PostScript в PDF (они оба являются форматами Adobe). Прочитайте документацию tkinter для подробных сведений о аргументах методу 'postscript()'. – cdlane

+0

не могли бы вы привести мне пример кода? Я только что начал питон, поэтому я понятия не имею, что я делаю, я пробовал это: из черепахи импортировать черепаху, Screen screen.onkey (k100, «o») #save picture def k100(): bob = Черепаха () ts = bob.getscreen() name = input («что бы вы хотели назвать своим шедевром?») ts.getcanvas(). Postscript (file = (name, '.png'), colormode = 'color «) – Gurneyguy