Python Q:列表分配索引超出范围 def lcm(a、b): 如果a>lcm(7869619332) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 lcm(7869619332) 文件“”,第10行,lcm格式 光照[(n%3)+2]=光照[n%3]%光照[(n%3)+1] 索引器:列表分配索引超出范围

Python Q:列表分配索引超出范围 def lcm(a、b): 如果a>lcm(7869619332) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 lcm(7869619332) 文件“”,第10行,lcm格式 光照[(n%3)+2]=光照[n%3]%光照[(n%3)+1] 索引器:列表分配索引超出范围,python,python-2.7,lcm,Python,Python 2.7,Lcm,aa我完全不知道我现在应该做什么。 我现在能做什么 n%3可以大到2。因此,n%3+1可能多达3。列表lit只有3项,因此在这一行 >>> 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

aa我完全不知道我现在应该做什么。

我现在能做什么

n%3
可以大到2。因此,
n%3+1
可能多达3。列表
lit
只有3项,因此在这一行

>>> 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

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

n%3
可以大到2。因此,
n%3+1
可能多达3。列表
lit
只有3项,因此在这一行

>>> 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

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

Python列表的索引为零

所以lit[0]=a,lit[1]=b,lit[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]范围内结束)。

Python列表的索引为零

所以lit[0]=a,lit[1]=b,lit[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]范围内结束)。

在except套件中,打印出
n
len(亮)
。我很确定错误是说你试图给一个不存在的
lit
索引赋值-比如
len(lit)
是2,你试图为我做
lit[4]='foo'
,如果对所有这些下标使用名为
n_mod3
的变量,我会觉得更容易——它可以计算两次,一次在循环之前,一次在
n
更改时。在except套件中,打印出
n
len(亮)
。我很确定错误是说你试图给一个不存在的
lit
索引赋值-比如
len(lit)
是2,你试图为我做
lit[4]='foo'
,如果对所有这些下标使用名为
n_mod3
的变量,我会觉得更容易——它可以计算两次,一次在循环之前,一次在
n
更改时。