我有点卡住了。
我正在尝试计算移动不同尺寸齿轮的距离,以便它们彼此相邻。我认为它是某种递归调用,但我无法弄清楚如何编写它。 我有一个按齿轮顺序列出的半径
radiusList = [6,16,14,20,24,28]
所以1档=运动距离= 0
2档移动距离= 0 + 6 + 16
3档= 0 +6 + 16 +16 + 14
4档= 0 + 6 + 16 + 16 + 14 + 14 + 20
5档= 0 + 6 + 16 + 16 + 14 + 14 + 20,+ 20,+ 24
6档= 0 + 6 + 16 + 16 + 14 + 14 + 20,+ 20,+ 24 + 24 +28等...
另一件事是我需要更新 - 现在关于半径大小和齿轮数量。但无法理解如何接近它。
任何帮助将不胜感激。谢谢。
更新:谢谢大家,我最后写了这样的东西。虽然看起来有点啰嗦。
def createmovesequence():
if numberofcogs == 0 :
void
if numberofcogs == 1:
newmovelist.append(0)
if numberofcogs == 2:
newmovelist.append(0)
newmovelist.append(radiusList[0])
newmovelist.append(radiusList[1])
if numberofcogs >= 3:
newmovelist.append(0)
newmovelist.append(radiusList[0])
#newmovelist.append(radiusList[1])
for i in range(2, len(radiusList)):
newmovelist.append(radiusList[i-1])
newmovelist.append(radiusList[i-1])
newmovelist.append(radiusList[-1])
#elif numberofcogs!= len(radiusList):
#print'error'
打印newmovelist
我唯一的另一个想法是带有很多if语句的for循环......
答案 0 :(得分:0)
def dist(n, radiusList):
if n <= 1:
return 0
return dist(n-1, radiusList) + radiusList[n-1] + radiusList[n-2]
答案 1 :(得分:0)
这是一个有趣的问题。这是一个没有递归的解决方案:
>>> gears = [6,16,14,20,24,28]
>>> def distance(n, radius):
... return sum(gears[:n] + gears[1:n-1])
>>> distance(1, gears) == 6
True
>>> distance(2, gears) == 6 + 16
True
>>> distance(3, gears) == 6 + 16 + 16 + 14
True
>>> distance(4, gears) == 6 + 16 + 16 + 14 + 14 + 20
True
答案 2 :(得分:0)
您可能希望看到的循环是:
gear = 4 # which gear
total = 0 # distance. we start from zero
# for each idx such that 0 <= idx < gear…
for idx in xrange(gear):
total += radiusList[idx]
total += radiusList[idx+1]
注意在gear = 0
的情况下循环不执行任何操作(因为没有这样的数字小于零且至少等于零)。这可能是最明确的符号,但是hcalves的一个更短,学习它对你也有帮助。