Soy completamente nuevo en progtwigción …
L = [1, 2, 3, 4, 5] n = 1 S = sum(L[0:n]) while n < 5: n += 1 print(n) # output: 5 print(S) # output: 1
¿Por qué python no cambia el parámetro n
en la función de sum
mientras que sí cambia n
? ¿Puede alguien explicar la lógica detrás de eso y mostrarme una manera de cambiar n
en la función de sum
para que S
convierta en 15 en lugar de 1?
Python es un lenguaje de progtwigción imperativo . Esto significa que un progtwig de python es una serie de declaraciones que pueden cambiar el estado del progtwig (por ejemplo, asignando un valor a una variable). Una vez que se ha ejecutado una instrucción, ya no tiene efecto en el progtwig. En otras palabras: la statement puede cambiar el estado del progtwig, pero solo una vez.
Cuando ejecuta la instrucción S = sum(L[0:n])
, se evalúa la sum(L[0:n])
y el resultado se asigna a la variable S
L[0:n]
evalúa como [1]
, y la sum de [1]
es 1. Así que al final de esta statement, el valor de S
es el número 1.
Su idea errónea es que S
“recuerda” que es igual a la sum(L[0:n])
, pero ese no es el caso. S
es solo el número 1. No importa si cambia el valor de n
o L
; el número 1 sigue siendo el número 1. Si desea que S
cambie, debe actualizarlo explícitamente con otra instrucción de asignación:
L = [1, 2, 3, 4, 5] n = 1 S = sum(L[0:n]) while n < 5: n += 1 S = sum(L[0:n]) print(n) # output: 5 print(S) # output: 15
Nota al margen: los lenguajes en los que S
se actualizaría automáticamente cuando n
cambios se llamen lenguajes de progtwigción declarativos .
Evalúa S = sum(L[0:n])
solo al principio, no es una función que se actualiza. Una forma de cambiar esto es volver a evaluar S después de actualizar n:
L = [1, 2, 3, 4, 5] n = 1 while n < 5: n += 1 S = sum(L[0:n]) print(n, S)