1

我有点卡住了。

我正在尝试计算移动不同尺寸齿轮的距离,以便它们彼此对齐。我认为它是某种递归调用,但我不知道如何编写它。我有一个按齿轮顺序排列的半径列表

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'
print newmovelist

创建移动序列()

我唯一的另一个想法是类似于带有很多 if 语句的 for 循环......

4

3 回答 3

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
于 2013-04-02T20:00:52.410 回答
0
def dist(n, radiusList):
  if n <= 1:
    return 0
  return dist(n-1, radiusList) + radiusList[n-1] + radiusList[n-2]
于 2013-04-02T19:46:53.377 回答
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 的表示法更短,学习它也会对你有所帮助。

于 2013-04-02T22:30:02.527 回答