所以下面是我的脚本,我正在尝试创建一个用于数字1-7的函数,如果i = 1,则a,如果i = 2,则b,如果i> 2,然后b + a ** 2
def generate_numbers(a,b):
f=[]
for i in range(1,8):
if i==1:
f.append(a)
elif i==2:
f.append(b)
else:
f.append(f[i-2]+f[i-1]**2)
return f
所以上面是我的功能,所以我期望的是
为generate_numbers(0,1)
我可以获得清单[0, 1, 1, 2, 5, 27, 734]
这是generate_numbers(0, 1) == [0, 1, 1, 2, 5, 27, 734]
但是,使用我的脚本,它会不断弹出“列表索引超出范围”的错误,有人可以帮忙吗?
答案 0 :(得分:1)
您可以简单地从初始化为[a, b]
的列表开始。
def generate_numbers(a, b, n=5):
xs = [a, b]
for _ in range(n):
xs.append(xs[-2] + xs[-1]**2)
return xs
答案 1 :(得分:0)
例外是 IndexError 是什么原因造成的?
在您的最后一个if条件中,f的索引为 i-1,假设i为3,因此索引应该为2,并且未定义f [2],因为您没有定义f [2]!
因此,为了更正您的代码,这是我的代码
inter_data = np.where((((j + 1) * 100) > inter_data) & (inter_data > (j * 100)), (j * 100) + 50, inter_data)
因为Python使用索引零作为第一个元素
答案 2 :(得分:0)
您的代码:
def generate_numbers(a,b):
f=[]
for i in range(1,8):
if i==1:
f.append(a) # now f[0] = a
elif i==2:
f.append(b) # now f[1] = b
else:
# when i = 3, you are accessing f[2] and f[1], but you didn't populate f[2], because the indexing starts at 0, so your append function is not populating from 1st index.
f.append(f[i-1]+f[i]**2) . # crashed here.
return f
更正的代码:
def generate_numbers(a,b):
f=[]
for i in range(1, 8):
if i==1:
f.append(a)
elif i==2:
f.append(b)
else:
# one possiblity is to extract the last and second last element using reverse slicing.
f.append(f[-2]+f[-1]**2)
return f
另一种可能性:
def generate_numbers(a,b):
f=[]
# put a dummy element at 0th index.
f.append(0) . # now f[0] = 0
for i in range(1,8):
if i==1:
f.append(a) # f[1] = a
elif i==2:
f.append(b) # f[2] = b
else:
f.append(f[i-1]+f[i]**2) # now you can access f[i-1] and f[i-2]
return f[1:] # return the list by slicing the first element as it was dummy element