Así que a continuación está mi script, estoy tratando de crear una función que para los números 1-7, si i = 1, entonces a, si i = 2, entonces b, si i> 2, entonces 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
Así que arriba es mi función, entonces lo que esperaba es para generate_numbers(0,1)
Puedo obtener una lista [0, 1, 1, 2, 5, 27, 734]
que es generate_numbers(0, 1) == [0, 1, 1, 2, 5, 27, 734]
Sin embargo, con mi script, aparece un error emergente de "índice de lista fuera de rango", ¿alguien puede ayudarlo?
3 respuestas
Simplemente puede comenzar con la lista inicializada en [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
Su código:
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
Código corregido:
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
Otra posibilidad:
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
La excepción será IndexError ¿Qué lo causó?
En su última condición if, el índice de f es i-1, suponga que i es 3, por lo tanto, el índice debería ser dos y f [2] no está definido porque no definió f [2].
Entonces, para corregir su código, este es mi código
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-1]+f[i]**2)
return f
Porque Python usa el índice cero como primer elemento
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.