字典控制着海龟的移动

时间:2017-10-19 19:39:24

标签: python string function dictionary turtle-graphics

我是编程的新手,我正试图解决我从学校得到的任务。我必须构建一个使用乌龟从类型字符串的参数中绘制内容的函数(例如' fdltfd' - 再次向前,向左和向前)。这些命令在字典中,所以我必须将字符串中的元素与字典键进行比较。如果它们匹配,命令乌龟移动。我写的代码:

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

问题在于乌龟会在字典中做什么,向前,向后,向左和向右移动,它甚至不会看着我的for循环。

你能否告诉我一些如何使这项工作成功的想法?或者如果我正在思考它?当然,不是代码:)...非常感谢

1 个答案:

答案 0 :(得分:2)

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

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

根据你调用它的方式:

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

所以摆脱星号。参数turtle也是包的名称,因此更改它,例如my_turtle。类似地,map是内置Python的名称,因此请更改它。

您的词典应包含要调用的函数,而不是调用函数的结果。即而不是:

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