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