La practica hace al maestro ejercicio 5.factorial (Problema al enviar codigo)


#1

En el ejercicio de factorial ya he puesto el codigo para solucionar el problema, pero resulta que al presionar "Guardar y enviar" me sale el mensaje "Something went wrong :frowning: click close to try again or refresh the page"
He intentado recargar la pagina, cerrarla y volverla a abrir como dice el mensaje y nada.
Aquí les dejo el codigo que puse por si sirve para solucionar el problema:

def factorial(x):
factorial=1
numero=x
while numero!=0:
factorial=factorial*numero
numero=numero-1
print factorial


#2

It is never a good practice to use the name of the function as a variable inside the function. Use a generic variable name, even just a letter since this is a simple program.

Another good practice is to leave white space around operators for readability.

Rewriting your code in simplified form:

def factorial(x):
    f = 1
    while x > 0:
        f *= x
        x -= 1
    return f

print factorial(7)    # 5040

#3

Thank you so much¡¡ Your advices will help me a lot, it has worked¡¡ (Forgive for my bad english)


#4

Excelente, funciona, pero me falta un poquito para entenderlo.

Mi duda es,

Cuando el bucle while se ejecuta, primero comprueba si “x” > 0, no es cierto?
Luego multiplica “f” * “x”, por úlitmo le resta uno a “x” y vuelve a comprobar si es mayor a 0

No termino de entender bien el vucle y como comprueba que es igual a 0 dando un resultado exacto.

    while x > 0:
        f *= x
        x -= 1
    return f

¿este razonamiento es correcto?

(f) (x)
1 * 3 = 3
3 * 2 = 6
6 * 1 = 6
com x = 0 se queda con el último resultado que es dós,


#5

Si x se permite alcanzar cero, entonces f terminará como cero. Es por eso que nos aseguramos de que x sea distinto de cero antes de permitir la multiplicación. Una vez que llegue a cero, el bucle se teme.

If x is allowed to reach zero, then f will end up as zero. That is why we make sure that x is non-zero before allowing multiplication. Once it reaches zero the loop temininates.