【发布时间】:2013-10-08 03:17:43
【问题描述】:
我为一个类编写了一个程序,它使用递归来模拟某些类型的简单分支结构,例如树。在我向教授展示之前,我认为我的代码很棒。他告诉我的代码太复杂了,并说我需要简化它。除了将它们分开之外,我不确定我还能做什么。有小费吗? (我是一个初学者,所以放轻松。)这个程序创建了多个具有不同厚度、分支数量和不同坐标的树。
import random
import turtle
##I'm using a python module called turtle to visualize results
p1 = turtle.Pen()
##Creates a pen
p1.tracer(True)
## Shows pen drawing
p1.up()
p1.left(90)
d=random.randint(0,2)
## Varying thickness of branch
length=150
##Length of branches
contract=random.uniform(.5,1)
## Varying degree of contraction
branch=random.randint(5,8)
## Varying amount of branches
first=random.randint(30,70)
## Varying first degree of branch
next=random.randint(1,30)
## Varying degree between each branches
number1=random.randint(10,20)
number2=random.randint(-100,100)
number3=random.randint(-100,100)
# Range of numbers used for coordinates
def drawFern1(pen, depth, length, contractBy, branches, firstBranchAngle, nextBranchAngle):
if depth > 0:
#Pen's Position and heading
heading = pen.heading()
position = pen.position()
pen.width(depth)
pen.forward(length)
pen.left(firstBranchAngle)
for i in range(branches):
drawFern1(pen, depth-1, contractBy*length, contractBy,branches,firstBranchAngle,nextBranchAngle)
pen.right(nextBranchAngle)
pen.setheading(heading)
pen.setposition(position)
# Ensures that multiple trees are created each at different coordinates.
for i in range(number1):
p1.sety(number2)
p1.setx(number3)
p1.down()
drawFern1(p1,d,length,contract,branch,first,next)
number2 = random.randint(-100,100)
number3 = random.randint(-100,100)
p1.up()
【问题讨论】:
-
您应该做的第一件事是添加cmets来解释代码的作用。
-
这段代码一点也不“复杂”。我什至不知道如何使用该语言正确编码,尽管我仍然可以立即完美地阅读您的代码。我的看法是你的教授在问你一个“诡计”的问题。
-
嗯,我教授的英语不是很好。我想他的意思是说这太令人费解了?
-
老实说,这段代码没有太多不必要的地方。你应该让你的教授澄清他们的意思。
标签: python recursion turtle-graphics simplify