具有可变数量For循环的函数(python)
我的问题有点难以解释。
我想创建一个函数,这个函数里面有嵌套的for循环,
循环的数量是根据传给函数的一个参数来决定的。
这里有个假设的例子:
Function(2)
...会涉及到...
for x in range (y):
for x in range (y):
do_whatever()
另一个例子...
Function(6)
...会涉及到...
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
whatever()
for循环中的变量(y)实际上在嵌套的代码中并没有被使用。
你可能会想,能不能只创建一个for循环,范围设为这个数字的幂...
但这样是行不通的,因为结果会非常大。我需要的情况是有8个嵌套的for循环。
这个结果对于for循环的范围来说太大了。
还有其他参数需要传给函数,但这些我自己可以处理。
这是代码
(它创建了雪花分形)
from turtle import *
length = 800
speed(0)
def Mini(length):
for x in range (3):
forward(length)
right(60)
penup()
setpos(-500, 0)
pendown()
choice = input("Enter Complexity:")
if choice == 1:
for x in range (3):
forward(length)
left(120)
elif choice == 2:
for x in range (3):
Mini(length/3)
left(120)
if choice == 3:
for x in range (6):
Mini(length/9)
right(60)
Mini(length/9)
left(120)
if choice == 4:
for y in range (6):
for x in range (2):
Mini(length/27)
right(60)
Mini(length/27)
left(120)
right(180)
for x in range (2):
Mini(length/27)
right(60)
Mini(length/27)
left(120)
if choice == 5:
for a in range (6):
for z in range (2):
for y in range (2):
for x in range (2):
Mini(length/81)
right(60)
Mini(length/81)
left(120)
right(180)
for x in range (2):
Mini(length/81)
right(60)
Mini(length/81)
left(120)
right(180)
right(180)
if choice == 6:
for c in range (6):
for b in range (2):
for a in range (2):
for z in range (2):
for y in range (2):
for x in range (2):
Mini(length/243)
right(60)
Mini(length/243)
left(120)
right(180)
for x in range (2):
Mini(length/243)
right(60)
Mini(length/243)
left(120)
right(180)
right(180)
right(180)
right(180)
if choice == 7:
for a in range (6):
for b in range(2):
for c in range (2):
for d in range (2):
for e in range (2):
for f in range (2):
for y in range (2):
for x in range (2):
Mini(length/729)
right(60)
Mini(length/729)
left(120)
right(180)
for x in range (2):
Mini(length/729)
right(60)
Mini(length/729)
left(120)
right(180)
right(180)
right(180)
right(180)
right(180)
right(180)
我会很感激你能给我任何帮助,
不过如果你建议其他方法(比如递归),
请不要只是直接贴代码;而是给我一些思路,让我能朝着正确的方向前进。
(这个算法是为了一个专业数学作业)
规格:
Python 2.7.1
Turtle
IDLE
Windows7
8 个回答
8
递归是解决这个问题的最佳方法。想想在基本情况下应该做什么,以及在递归情况下应该做什么。
根据要求,代码部分没有提供。
51
我不太明白为什么不能用边界的乘积来做
for x in range(y exp n)
这里的n是循环的次数……你说y的指数n会很大,但我相信Python是可以处理的。
不过,既然这样,那有没有什么递归算法可以用呢?
def loop_rec(y, n):
if n >= 1:
for x in range(y):
loop_rec(y, n - 1)
else:
whatever()
30
这个问题可以通过递归来解决。我在这里写一个算法,因为我认为这可能是一个普遍的问题。
function Recurse (y, number)
if (number > 1)
Recurse ( y, number - 1 )
else
for x in range (y)
whatever()