n=int(input())
m=int(input())
a=[n+1]
for i in range(n+1):
a[i]=0
a[0]=a[1]=1
for i in range(n+1):
a[i]=a[i-1]+a[i-2]
for i in range(n+1):
sum+=a[i]*a[i]
print((sum+1)%m)
a[i]=0
IndexError: list assignment index out of range
答案 0 :(得分:1)
Java等语言要求您创建特定长度的数组。 Python允许您初始化列表,无论是空的还是填充的,然后您只需将项目附加到列表中即可。如果要创建长度为a
的列表n+1
,每个元素中包含0,则可以使用列表解析来执行此操作:a = [0 for item in range(n+1)]
。
您不应该使用sum
作为变量,因为sum
是Python内置函数。但是,如果您确实选择覆盖内置函数,则必须先为其指定一些内容。使用sum
向sum+=a[i]*a[i]
添加一个数字会尝试将a[i]
的平方添加到一个无法正常工作的函数中。
请记住,当a[i-2]
小于2时,Python列表中的负编号索引与i
一样,从列表末尾开始:mylist[-1]
是列表中的最后一项,mylist[-2]
是倒数第二项,依此类推。因此,列表中的第一项,即1,设置为最后一项和倒数第二项的总和,即0。第二项,也是1,设置为第一项的总和(现在a 0)和最后一项(仍为0),也是0.现在你的列表全为零。
我对代码产生错误的部分做了一些更改,并添加了注释,以便您可以看到每个部分的作用,给出合理的输入,例如n = 3和m = 5:
n=int(input())
m=int(input())
a=[0 for item in range(n+1)] # initialize all to 0
mysum = 0 # initialize a sum that doesn't override the builtin
a[0]=a[1]=1 # set first 2 elements to 1
for i in range(n+1): # for every item in a,
a[i]=a[i-1]+a[i-2] # this ends up setting everything to 0
for i in range(n+1): # for every item in a,
mysum+=a[i]*a[i] # add 0*0 to the sum
print((mysum+1)%m) # 1 modulo anything greater than 1 is 1, so this prints 1
所以这个程序不仅仅是打印1
。
答案 1 :(得分:0)
# Get input values
n = 10
m = 100
# Initialize list
fib = [1,1]
# Fibonacci sequence of length n
for i in range(2,n): # Adjust the number of iterations to your problem
fib.append(fib[-1]+fib[-2])
# List comprehension for creating the "squares" list and getting its sum
result = sum([fib[i]**2 for i in range(len(fib))]) % m
print fib
print result