En el ejemplo anterior, escribimos una función que calcula el cuadrado de un número. El algoritmo que usamos En la función era simple: multiplique el número por sí mismo. En esta sección volveremos a implementar la función cuadrada y usaremos un algoritmo diferente, uno que se basa en la adición. de multiplicación.
Si desea multiplicar dos números juntos, el enfoque más básico es pensar que se repite el proceso de agregando un número a sí mismo. El número de repeticiones es donde entra en juego el segundo número. Por ejemplo, si Quería multiplicar tres y cinco, podríamos pensar en ello como agregar tres a sí mismo cinco veces. Tres más tres son seis, más tres son nueve, más tres son 12, y finalmente más tres es 15. Generalizando esto, si queremos implementar La idea de cuadrar un número, llamarlo n , se agregaríamos a sí mismo n veces.
Haga esto a mano primero e intente aislar exactamente qué pasos tomas. Tu Encuentra que necesitas mantener un "total en funcionamiento" de la suma hasta ahora, ya sea en una pieza de papel, o en tu cabeza. Recordar cosas de un paso a otro es Precisamente por qué tenemos variables en un programa. Esto significa que necesitaremos alguna variable Para recordar el "total de ejecución". Debe inicializarse con un valor de cero. Luego, necesitamos actualizar el "total en ejecución" el número correcto de veces. Para cada repetición, queremos Para actualizar el total de ejecución agregando el número.
En palabras podríamos decirlo de esta manera. Para cuadrar el valor de n , repetiremos el proceso de actualización de un total de ejecución n veces. Para actualizar el total de ejecución, tomamos el valor anterior del "total en ejecución" y agregamos n . Esa suma se convierte en la nueva valor del "total de ejecución".
Aquí está el programa en Activecode. Tenga en cuenta que el encabezado de la definición de función es el mismo que antes. Todo lo que ha cambiado son los detalles de cómo se realiza el cuadrado. Este es un gran ejemplo de diseño de "caja negra". Podemos cambiar los detalles dentro de la caja y aún usar la función exactamente como lo hicimos antes.
>>def square(x):
>> runningtotal = 0
>> for counter in range(x):
>> runningtotal = runningtotal + x
>> return runningtotal
>>toSquare = 10
>>squareResult = square(toSquare)
>>print("The result of", toSquare, "squared is", squareResult)
>>>
The result of 10 squared is 100
En el programa anterior, observe que la variable runningtotal
comienza con un valor de 0. A continuación, la iteración se realiza x
veces. Dentro del bucle for, se produce la actualización. runningtotal
se reasigna un nuevo valor que es el valor anterior más el valor de x
.
Este patrón de iterar la actualización de una variable es comúnmente referido como el patrón del acumulador . Nos referimos a la variable como acumulador . Este patrón aparecerá una y otra vez. Recuerda que la clave Hacer que funcione con éxito es asegurarse de inicializar la variable antes de comenzar la iteración. Una vez dentro de la iteración, se requiere que actualice el acumulador.
Nota
¿Qué pasaría si pusiéramos la tarea? runningTotal = 0
adentro
el para la declaración? ¿No está seguro? Pruébelo y averigüe.
6.5.1. El patrón de acumulador general
initialize the accumulator variable
repeat:
modify the accumulator variable
# when the loop terminates the accumulator has the correct value
Nota
Este espacio de trabajo se proporciona para su conveniencia. Puede usar esta ventana ActiveCode para probar cualquier cosa que desee.
Comprueba tu comprensión
Considere el siguiente código:
def square(x):
for counter in range(x):
runningtotal = 0
runningtotal = runningtotal + x
return runningtotal
¿Qué sucede si pone la inicialización de RunningTotal (el línea runningtotal = 0) dentro del bucle for el primero instrucción en el bucle?
6.5.2. Una variación en el patrón del acumulador
def square(x):
'''raise x to the second power'''
runningtotal = 0
for counter in range(x):
runningtotal = runningtotal + x
return runningtotal
toSquare = 10
squareResult = square(toSquare)
print("The result of", toSquare, "squared is", squareResult)