问:列表分配索引超出范围

时间:2017-02-18 05:59:24

标签: python python-2.7 lcm

>>> def lcm(a,b):
    if a<<b:
        c=a
        a=b
        b=c
    c=0
    lit=[a,b,c]
    n=3
    while (not lit[n%3]%lit[(n%3)+1]==0):
        lit[(n%3)+2]=lit[n%3]%lit[(n%3)+1]
        if lit[(n%3)+2]==0:
            d=lit[(n%3)+2]
            print d
        else:
            n=n+1

这是代码,试图构建一个函数lcm,它找到a和b的最小公倍数。这不是最干净的代码,但遗憾的是这就是我所能做的。如果这块代码可以轻一点,真的很好。

所以,错误,回到这一点,我呼吁lcm,它只是脱口而出错误消息。

这就是它所说的:

>>> lcm(78696,19332)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    lcm(78696,19332)
  File "<pyshell#1>", line 10, in lcm
    lit[(n%3)+2]=lit[n%3]%lit[(n%3)+1]
IndexError: list assignment index out of range
Aaaaand我完全不知道我现在应该做什么 我现在能做什么?

2 个答案:

答案 0 :(得分:0)

lit可以大到2.所以lit[(n%3)+2]=lit[n%3]%lit[(n%3)+1] 可以多达3个。列表// This is just a stub interface used for tagging validation criteria public interface DriverChecks { } // The model public class Driver { @Min(value = 18, message = "You must be 18", groups = DriverChecks.class) private int age; // other stuffs } 只有3个项目,所以在这一行,

groups

如果n%3 == 2,则访问点亮的[(n%3)+1]将导致索引超出范围错误。

答案 1 :(得分:0)

Python列表是零索引的。

点亮[0] = a,点亮[1] = b,点亮[2] = c。

lit[(n%3)+2]=lit[n%3]%lit[(n%3)+1]

如果n = 1,则(n%3)+2等于3.如果n = 2,则(n%3)+2等于4.

如果你想保证你在一个有效的索引上访问你的列表,那么你想要按列表的长度% - 你正在做的,而不是在正确的位置。

如果不深入研究您的代码,我认为这只是操作顺序重要的另一个教训。尝试(n + 2)%3而不是(n%3)+2。

x%3将始终在[0,2]的范围内 - 所以这就是你想在最后修改的原因。 (x%3 + n最终在[n,2 + n]范围内。)

相关问题