我的问题很难解释。
我想创建一个包含嵌套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)的变量实际上并没有在嵌套代码中使用。
您的第一个想法可能是创建ONE for循环,其范围是number参数的幂...
这不能工作,因为产品将是巨大的。我有示例需要有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)
我很感激你能给予我任何帮助,
尽管如果你建议一个不同的方法(比如递归),
请不要只是粘贴代码;相反,建议了一些可以让我走上正确方向的想法。
(The算法用于Maven数学作业)
规格:
Python 2.7.1语言
海龟
空转
windows 7
8条答案
按热度按时间cgfeq70w1#
我不明白为什么你不能用边界和do的乘积
其中n是循环的数量....你说y exp n会很大,但我相信python可以处理它。
然而,话虽如此,某种递归算法又如何呢?
wecizke32#
这个问题可以通过递归来解决,我只是在这里写一个算法,因为我相信这是一个普遍的问题。
9avjhtql3#
递归将是你最好的选择。考虑一下它在基本情况和递归情况下应该做什么。
根据要求,省略了代码。
bogh5gae4#
给你。让范围成为你的范围,当你需要的时候对结果进行操作。
以下测试将给予相同的结果:
svmlkihl5#
变化的For循环数问题的一个很好的实现:
递归的定义(循环数,范围列表,执行函数,当前索引=0,iter列表= []):
如何使用它的示例:
该代码返回与以下代码相同的结果:
iih3973s6#
你考虑过xrange吗?
如果超出了xrange的限制,可以使用itertool
(之前的itertool答案错误地使用了n作为范围,而不是y)
wmomyfyw7#
这里是迭代求解的另一个选择,对我来说似乎更简单。这个想法是使用一个10或基于X的编号系统的类比。基本上你每次增加你的数字/计数1,但表示法根据基数而改变。即,如果基数是10,那么这个数字就会改变1..91011..1920...假设我们想循环i,j,k从0到9。我们在范围内运行计数器的循环(101010),并将数字作为数值。例如,731表示i=7,j=3,k=1。为了使情况更一般化,其中每个i/j/...的范围是不同的-我们取该范围的模:
'
输出将为:
'
dbf7pr2w8#
我的回答晚了,但是假设你想做多个循环,例如,多次打印某个范围,那么这个递归的正确版本是:
这将创建三个范围为(4)的for循环
如果您想调整动态范围,这里有一些变体:
它将打印出:
或
其将输出:
下面是一个更好的变体,它只使用一个for循环(类型更少):
将输出: