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?

0
Joyce Hong 30 sep. 2019 a las 05:38

3 respuestas

La mejor respuesta

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
1
Mateen Ulhaq 30 sep. 2019 a las 02:43

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
0
Bhawan 30 sep. 2019 a las 03:41

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

0
user12066865user12066865 30 sep. 2019 a las 02:45
58160881