2013-04-09 2 views
0

У меня есть список направлений черепахи:Как я могу заполнить маршруты черепах в списке с помощью Python?

redlist = ['seth(0)', 'forward(drawdist)', 'seth(0)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)'] 

Как я могу заполнить это с помощью списка?

ответ

-1

Используйте pendown, то fillcolor метод в цикле:

def draw_n_fill(self,redlist): 
    self.pendown() 
    [self.getAttr(entry)() for entry in redlist] 
    self.fillcolor("red") 

Список литературы

+0

Этот ответ не работает и не затрагивает вопрос OP. Ссылки находятся вне базы. (В вопросе OP нет колец, цветов или кругов.) Черепахи не имеют метода 'getAttr()', что вызывает исключение. – cdlane

0

Хотя список синтаксически правильных утверждений Python, подобных этому, похоже, дает возможность использовать eval(), сопротивляться этому соблазну. Синтаксис здесь достаточно прост, функция с одним аргументом, что мы можем использовать re модуль для разбора команд и выполнять только то, что, как представляется, действительные функции в отношении действительных аргументов:

import turtle 
import re 

redist = [ \ 
    'seth(0)', 'forward(drawdist)', 'seth(0)', 'forward(drawdist)', \ 
    'seth(90)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', \ 
    'seth(180)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', \ 
    'seth(270)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)' \ 
    ] 

valid_functions = { \ 
    'seth': turtle.setheading, \ 
    'forward': turtle.forward, \ 
    } 

valid_arguments = { \ 
    'drawdist': 50, \ 
    } 

turtle.begin_fill() 

for command in redist: 
    match = re.match(r"^(\w+)\((\w+)\)$", command) 

    if match is None: 
     raise SyntaxError("Invalid syntax") 

    function, argument = match.group(1), match.group(2) 

    if function not in valid_functions: 
     raise ValueError("Invalid function") 

    if argument in valid_arguments: 
     argument = valid_arguments[argument] 
    elif argument.isdigit(): 
     argument = int(argument) 
    else: 
     raise TypeError("Invalid argument") 

    valid_functions[function](argument) 

turtle.end_fill() 

turtle.hideturtle() 

turtle.mainloop() 

Для тех, кто хочет читать дальше , он рисует заполненный квадрат. Исключения, которые я поднимаю выше, могут быть не правильными, но дело в том, что вам нужно проверять все ошибки и вызывать исключения при попытке выполнить код, который был передан вам в виде строки.

 Смежные вопросы

  • Нет связанных вопросов^_^