python - 字典控制 turtle 的运动

标签 python string function dictionary turtle-graphics

我是编程新手,我正在尝试解决学校给我的一项任务。我必须构建一个函数,使用 turtle 从字符串类型的参数(例如“fdltfd” - 向前、向左和再次向前移动)中绘制某些内容。这些命令位于字典中,因此我必须将字符串中的元素与字典键进行比较。如果它们匹配,则命令 turtle 移动。我写的代码:

def execute(turtle, length, args, *cmd):

map = {'fd': turtle.fd(length), 'lt': turtle.lt(args), 'bk': turtle.bk(length), 'rt': turtle.rt(args), 'nop':None}

for command in cmd:
  if command in map.keys():
      map[command]()

execute(bob, 50, 45, 'fdltfd' )

问题是 turtle 只执行字典中的操作,向前、向后、向左、向右移动,它甚至懒得看我的 for 循环。

您能给我一些关于如何完成这项工作的想法吗?或者如果我想得对吗?当然,不是代码:)...非常感谢

最佳答案

代码的具体问题:cmd 参数前面的星号不正确:

def execute(turtle, length, args, *cmd):

考虑到您调用它的方式:

execute(bob, 50, 45, 'fdltfd')

所以去掉星号。参数 turtle 也是包的名称,因此请更改它,例如my_turtle。同样,map 是 Python 内置函数的名称,因此请更改它。

你的字典应该包含要调用的函数,而不是调用函数的结果。 IE。而不是:

map = {'fd': turtle.fd(length), 'lt': turtle.lt(args), 'bk': turtle.bk(length), 'rt': turtle.rt(args), 'nop':None}

我希望得到更多类似的东西:

commands = {'fd': turtle.fd, 'lt': turtle.lt, 'bk': turtle.bk, 'rt': turtle.rt, 'nop': None}

或者:

LENGTH = 50
ANGLE = 45

commands = { \
    'fd': lambda t: t.fd(LENGTH), \
    'lt': lambda t: t.lt(ANGLE), \
    'bk': lambda t: t.bk(LENGTH), \
    'rt': lambda t: t.rt(ANGLE), \
    }

鉴于 cmd'fdltfd' 的值,我不明白您期望它如何工作:

for command in cmd:

因为它会在字典中查找“f”、“d”、“l”、“t”等,而不是“fd”、“lt”等。您可能想要更多类似的内容:

# 'fdltfd' -> ['fd', 'lt', 'fd']
for command in [a + b for a, b in zip(cmd[0::2], cmd[1::2])]:

将以上所有内容放在一起,我们得到了一个基本有效的粗略实现:

import turtle

LENGTH = 50
ANGLE = 45

commands = { \
    'fd': lambda t: t.fd(LENGTH), \
    'lt': lambda t: t.lt(ANGLE), \
    'bk': lambda t: t.bk(LENGTH), \
    'rt': lambda t: t.rt(ANGLE), \
    }

def execute(my_turtle, cmd):
    for command in [a + b for a, b in zip(cmd[0::2], cmd[1::2])]:
        if command in commands:
            commands[command](my_turtle)

execute(turtle.Turtle(), 'fdltfdltfdltfdltfdltfdltfdltfd')

turtle.mainloop()

关于python - 字典控制 turtle 的运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837646/

相关文章:

python - 在元素和属性中搜索字符串

c - 使用 strcmp 搜索相等的字符串

c# - 如何使用C#从下面的字符串中提取键

c++ "no matching function error"返回二维数组

python - 使用 sqlalchemy 创建一个 db.Sequence

python - 在编译这样的代码时出现错误 'NoneType' 对象没有属性 'find_all'

c++ - 将字符 vector 和字符串 vector 传递给函数

python - 多重递归函数

python - 从列表中删除带有自定义停用词的短语

r - 按组填写字符列中的缺失值(nacof/nocb)