【问题标题】:Fractal shell in Python turtlePython 乌龟中的分形壳
【发布时间】:2018-04-22 20:12:34
【问题描述】:

我一直在尝试在 Python 中绘制分形外壳,我必须在其中输入级别的大小和数量。每次我尝试实现代码时都会出现错误。我已经尝试研究如何在 Python 中绘制一个 shell,看看我可以修复什么,但我似乎找不到任何有用的东西。对此的任何帮助都会很棒。

这是我目前的代码:

  import math
  import turtle
  from turtle import* 

  turtle = turtle.Turtle()
  t= turtle
  t.speed(1000)
  print("MENU")
  def main():
      print ("1. Polygon Fractal")
      print("2. Fractal Shell")
      print("3. Snowflake")
      print("4. Fractal Tree")
      print("5. Exit")
      x=input("Please select a number")

      if x=="1":
          z=input("Please input the number of sides")
          a=input("Please input length")
          polygon(int(z),int(a))

      if x=="2":
          f=input("Please input a size")
          j=input("Please input a level")
          fractalshell(int(f),int(j))

      if x=="3":
          b=input("Please input a length")
          snowflake(int(b))

      if x=="4":
          fractaltree()

      if x=="5":
          t.hideturtle()
          done()

  def polygon(n,l):
      f = (n - 2) * 180/n
      for i in range(n):
          t.forward(l)
          t.right(180 - f)


  def fractalshell(size, level):
      def curve(size):
          t.right(45)
          for curve in range(0.1 *(size)):
              t.forward(0.1*(size))
              t.right(15)
          t.right(170)
          for curve in range(0.12*(size)):
              t.forward(0.1*(size))
              t.left(15)
      if (level > 0):        
          t.forward(size)
          curve(size)
          t.right(45)
          fractalshell = (0.93 * (size), level - 1)'

这是不断出现的错误:

  Traceback (most recent call last):
    File "/Users/isabelavaldes/Dropbox/Recursion.py", line 113, in <module>
      main()
    File "/Users/isabelavaldes/Dropbox/Recursion.py", line 27, in main
      fractalshell(int(f),int(j))
    File "/Users/isabelavaldes/Dropbox/Recursion.py", line 59, in 
  fractalshell
      curve(size)
    File "/Users/isabelavaldes/Dropbox/Recursion.py", line 50, in curve
      for curve in range(0.1 *(size)):
  TypeError: 'float' object cannot be interpreted as an integer   

【问题讨论】:

  • 错误信息很好理解:0.1*size 是浮点数(当然),而range 不喜欢浮点数。检查 size 是什么 - if 0.1*size 可以设为整数,然后这样做;否则你必须决定你想用非整数值发生什么。
  • “shell”标签不太合适。

标签: python turtle-graphics fractals


【解决方案1】:

您的问题似乎与 Python 语法有关,而不是 Fractal Shells。例如,不清楚您期望它如何工作:

fractalshell = (0.93 * (size), level - 1)'

fractalshell 是我们所在函数的名称,这似乎是对它的递归调用,但不是。我重新编写了您的代码,使其可以运行(以及更多 MVCE):

from turtle import Turtle, Screen

def fractalshell(size, level):

    def curve(size):
        turtle.right(45)

        for step in range(int(10 * size)):
            turtle.forward(0.1 * step)
            turtle.right(15)

        turtle.right(170)

        for step in range(int(12 * size)):
            turtle.forward(0.8333 * step)
            turtle.left(15)

    if level > 0:
        turtle.forward(size)
        curve(size)
        turtle.right(45)
        fractalshell(0.93 * size, level - 1)

screen = Screen()

turtle = Turtle()
turtle.speed('fastest')

f = input("Please input a size: ")
j = input("Please input a level: ")

fractalshell(int(f), int(j))

turtle.hideturtle()

screen.mainloop()

它目前产生有趣的形状,但我不是你想要的:

输入

Please input a size: 5
Please input a level: 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多