我不能做那个循环功能
I can't do that loop function
这是我的项目,它是绘图机器人:
我设法完成了 F 和 R 功能。但是我的L功能总是出故障。
这是我的代码:
def func(list1):
numOfElements = int(len(list1))
for i in range(numOfElements):
if list1[i] == "L":
list2 = list1.copy()
for j in range(i):
list2.pop(j)
list2.pop(0)
while(list1[i]!="]"):
func(list2)
i=i+1
if list1[i] == "F":
value = list1[i + 1]
tim.forward(value)
if list1[i] == "R":
value = list1[i + 1]
tim.right(value)
else:
pass
我正在使用这张图片中的示例。我的代码将它们分成标记。然后我把他们放在名单上。
[![在此处输入图片描述][2]][2]
如果我有一个 L 函数,我可以做到这一点,但如果有嵌套的 L 函数,我就无法解决。
我怎样才能用我的 L 函数解决这个问题?
在这种情况下,您不希望for i in range(...)
循环在循环内递增,i=i+1
,赢了't 在下一次迭代中影响 i
的值。与 C 不同,Python for
循环会忽略下一次迭代对迭代变量的更改。
此外,不需要复制令牌。我们只需要正确地跟踪我们在令牌列表中的位置。这包括递归调用 return 它在到达 ']'
和 return 之前在标记列表中的位置。
让我们把所有这些放在一起并使用有意义的变量名:
from turtle import Screen, Turtle
example = ['L', 36, '[', 'L', 4, '[', 'F', 100, 'R', 90, ']', 'R', 10, ']']
def func(tokens, index=0):
while index < len(tokens):
command = tokens[index]
index += 1
if command == 'L':
repetitions = tokens[index]
index += 2 # also move past '['
for _ in range(repetitions):
new_index = func(tokens, index)
index = new_index
elif command == 'F':
distance = tokens[index]
index += 1
turtle.forward(distance)
elif command == 'R':
angle = tokens[index]
index += 1
turtle.right(angle)
elif command == ']':
break
return index
screen = Screen()
turtle = Turtle()
func(example)
screen.exitonclick()
这是我的项目,它是绘图机器人:
我设法完成了 F 和 R 功能。但是我的L功能总是出故障。 这是我的代码:
def func(list1):
numOfElements = int(len(list1))
for i in range(numOfElements):
if list1[i] == "L":
list2 = list1.copy()
for j in range(i):
list2.pop(j)
list2.pop(0)
while(list1[i]!="]"):
func(list2)
i=i+1
if list1[i] == "F":
value = list1[i + 1]
tim.forward(value)
if list1[i] == "R":
value = list1[i + 1]
tim.right(value)
else:
pass
我正在使用这张图片中的示例。我的代码将它们分成标记。然后我把他们放在名单上。 [![在此处输入图片描述][2]][2]
如果我有一个 L 函数,我可以做到这一点,但如果有嵌套的 L 函数,我就无法解决。 我怎样才能用我的 L 函数解决这个问题?
在这种情况下,您不希望for i in range(...)
循环在循环内递增,i=i+1
,赢了't 在下一次迭代中影响 i
的值。与 C 不同,Python for
循环会忽略下一次迭代对迭代变量的更改。
此外,不需要复制令牌。我们只需要正确地跟踪我们在令牌列表中的位置。这包括递归调用 return 它在到达 ']'
和 return 之前在标记列表中的位置。
让我们把所有这些放在一起并使用有意义的变量名:
from turtle import Screen, Turtle
example = ['L', 36, '[', 'L', 4, '[', 'F', 100, 'R', 90, ']', 'R', 10, ']']
def func(tokens, index=0):
while index < len(tokens):
command = tokens[index]
index += 1
if command == 'L':
repetitions = tokens[index]
index += 2 # also move past '['
for _ in range(repetitions):
new_index = func(tokens, index)
index = new_index
elif command == 'F':
distance = tokens[index]
index += 1
turtle.forward(distance)
elif command == 'R':
angle = tokens[index]
index += 1
turtle.right(angle)
elif command == ']':
break
return index
screen = Screen()
turtle = Turtle()
func(example)
screen.exitonclick()