如何编写一个字符串解释器来执行python中的一系列turtle移动命令?

2024-09-27 07:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我想在其中加入一个字符串,如“F100<;30S30”

F100将使海龟向前移动100,<;30将海龟旋转30度,S30将绘制半径为30的圆。你知道吗

我可以让程序解释一个命令,例如F100,但是我不能让它解释上面显示的长字符串。我可以用什么方法来解释这个。非常感谢。你知道吗


Tags: 项目方法字符串命令lt程序半径绘制
1条回答
网友
1楼 · 发布于 2024-09-27 07:18:08

我不知道你的海龟能接受什么样的命令,所以这个例子可能并不完全适合你的用例。但据我所见,你可以用正则表达式来解决这个问题。你知道吗

假设一个命令由两部分组成:一个字符表示操作(F<S,等等),一个数字表示大小(10030,等等)。您的字符串有几个这样的背靠背。我们可以做的是构建一个正则表达式,它将识别字符串中此操作数模式的所有实例。你知道吗

仅使用命令F<S,以下正则表达式将起作用:

regex = r'([FS<]\d+)'

我们把这个打开。你知道吗

  • 首先,r'...'将这个字符串指定为“原始字符串”,这是我们通常用于正则表达式的。这意味着字符串中通常是转义字符的字符,如\,将不会被视为转义字符。你知道吗
  • 接下来,括号()将其中的任何内容标记为regexmatch——这意味着,当我们通过字符串时,与括号内的模式匹配的任何内容都将被保存并输出。你知道吗
  • 在括号内,方括号[]表示一组字符-这将匹配括号内包含的任何字符。因此,在本例中,正则表达式将查找FS<。你知道吗
  • 在寻找那个角色之后,我们寻找一个数字。\d[0123456789]的简写——也就是说,它匹配任何数字。你知道吗
  • +是我们附加到\d的符号。这告诉正则表达式要“贪婪”,这意味着要包含尽可能多的数字,而不是只包含一个。你知道吗

现在可以使用python的re库来查找字符串中的所有匹配项。findall方法是我们在这里需要的:它接受一个regex字符串和一个搜索字符串,并按顺序返回搜索字符串中与regex字符串匹配的模式列表。你知道吗

>>> import re
>>> search = 'F100<30S30'
>>> regex = r'([FS<]\d+)'
>>> commands = re.findall(regex, search)
>>> print(commands)
['F100', '<30', 'S30']

现在,您已经将一个字符串转换为一个较小字符串的列表(commands),每个字符串表示一个命令。现在可以遍历commands并分别执行每个命令。你知道吗

有关python中正则表达式的更多信息,可以查看the ^{} module's documentation。你知道吗

相关问题 更多 >

    热门问题