Python Turtle for loop无限运行

2024-04-25 00:44:16 发布

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

我有一些海龟代码,我已经成功地运行之前,提请在西格宾斯基垫圈复制的Python和Turtle IDE,但是最近当我再次尝试运行它时,它成功地完成了所有的事情,除了一旦碰到for循环,Turtle就开始旋转,直到很久以后才执行for循环中的行。你知道吗

我已经在forloop中添加了一个print(I),它正在重复打印0,就像它是一个无限循环一样

import turtle
from turtle import *

t = Turtle()
t.speed(0)
t.shape('turtle')
t.color('dark green')

def SGRules(char):
  if char == 'F':
    return 'F+F-F-F+F'
  else:
    return char

def processStr(oldstr, Fractal_Rules):
  newstr = ""
  for char in oldstr:
    newstr = newstr + Fractal_Rules(char)
  return newstr

def createLSystem(iteration, axiom, Fractal_Rules):
  startstr = axiom
  endstr = ""
  for i in range(iteration):
    endstr = processStr(startstr, Fractal_Rules)
    startstr = endstr
  return endstr

def drawLSystem(aturtle, lsys, angle, length):
  for cmd in lsys:
    if cmd == 'F':
      aturtle.forward(length)
    elif cmd == '+':
      aturtle.left(angle)
    elif cmd == '-':
      aturtle.right(angle)

sgstr = createLSystem(4, 'F', SGRules)
print(sgstr)
drawLSystem(t, sgstr, 120, 20)
for i in range(2):
  print(i)
  t.left(120)
  t.forward(20 * 2**4)

当它到达右下角时,它应该只画剩下的外三角形的两条边。你知道吗


Tags: incmdforreturndefrulesprintturtle
1条回答
网友
1楼 · 发布于 2024-04-25 00:44:16

你的代码清理在我的电脑上运行得很好复制在Python控制台中:

from turtle import Screen, Turtle

ANGLE = 120
LENGTH = 20
ITERATIONS = 4

def SGRules(character):
    if character == 'F':
        return 'F+F-F-F+F'

    return character

def processStr(string, rules):
    new_string = ""

    for character in string:
        new_string += rules(character)

    return new_string

def createLSystem(iterations, axiom, rules):
    string = ""

    for _ in range(iterations):
        string = processStr(axiom, rules)
        axiom = string

    return string

def drawLSystem(turtle, lsys, angle, length):
    for command in lsys:
        if command == 'F':
            turtle.forward(length)
        elif command == '+':
            turtle.left(angle)
        elif command == '-':
            turtle.right(angle)

yertle = Turtle('turtle')
yertle.speed('fastest')
yertle.shape('turtle')
yertle.color('dark green', 'light green')

sg_string = createLSystem(ITERATIONS, 'F', SGRules)
print(sg_string)
drawLSystem(yertle, sg_string, ANGLE, LENGTH)

for _ in range(2):
    yertle.left(ANGLE)
    yertle.forward(LENGTH * 2 ** ITERATIONS)

screen = Screen()
screen.mainloop()

尽管我在最后向tkinter的事件循环添加了一个传输,以防止窗口关闭,但您的原始代码在Python控制台中运行良好。你知道吗

相关问题 更多 >