首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python在列表中填写海龟方向?

如何使用Python在列表中填写海龟方向?
EN

Stack Overflow用户
提问于 2013-04-09 15:35:24
回答 2查看 310关注 0票数 0

我有一张海龟方向的清单:

代码语言:javascript
复制
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)']

我如何使用列表填写此表?

EN

回答 2

Stack Overflow用户

发布于 2016-12-05 15:09:30

尽管像这样一系列语法正确的Python语句看起来是使用eval()的好机会,但还是要抵制住这种诱惑。这里的语法非常简单,只有一个参数的函数,我们可以使用re模块来解析命令,并且只对有效参数执行看起来有效的函数:

代码语言:javascript
复制
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()

对于那些想要提前阅读的人来说,它会绘制一个实心的方块。我在上面提出的异常可能不是正确的,但重点是,当试图执行作为字符串传递给您的代码时,您需要对所有内容进行错误检查,并引发异常。

票数 0
EN

Stack Overflow用户

发布于 2013-10-12 06:02:50

在循环中使用pendown,然后使用fillcolor方法:

代码语言:javascript
复制
def draw_n_fill(self,redlist):
  self.pendown()
  [self.getAttr(entry)() for entry in redlist] 
  self.fillcolor("red")

参考

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15895996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档