>>> 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我完全不知道我现在应该做什么
我现在能做什么?
答案 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]范围内。)