Python Quiz 8 – Asignación múltiple y actualización de índices en Python

Python Quiz 8 – Asignación múltiple y actualización de índices en Python

Pregunta principal del PyQuiz:

>>> acc, i = 0, 0
>>> values = [1, 2, 3, 4]
>>> for _ in range(3):
...     val_i, i = values[i], i + 1
...     acc += val_i
>>> print(acc)
- ?? -
# A - RuntimeError
# B - 6
# C - 9

Concepto y explicación

En esta pregunta se quiere hacer hincapié en la asignación múltiple de variables y el orden de ejecución de esa sentencia.

Como se puede ver en el código, la lógica principal de esta pregunta es la siguiente:

  • Inicializamos una variable acumulador y una variable indice (acc e i respectivamente).
  • Se crea una lista con unos valores.
  • Se itera por 3 elementos accediendo al valor de values[i] y actualizando el valor de i en la misma sentencia.
  • Se suman los valores accedidos en acc.
  • Se imprimen los valores acumulados.

Realmente la ejecución es imperativa y no presenta mayor problema, salvo en saber, simplemente leyendo el código, qué valores se van a sumar y cuales no.

Todas las sentencias son válidas por lo que la ejecución no termina devolviendo un error como se expresa en la solución B, sino que termina con la suma de 3 valores consecutivo de la lista de valores.

Lo importante es determinar cuál es el valor inicial de i cuando se itera, dado que podría ser 0 o 1, y sabiendo ese dato, se puede sumar los siguiente 3 valores.

Vamos a ver las 3 iteraciones con sus valores iniciales y a salir de dudas:

# acc = 0, i = 0 , values = [1, 2, 3, 4]
for _ in range(3):
    val_i, i = values[i], i + 1
    # val_i = 1, i = 1
    acc += val_i
    # acc = 1

Habiendo ejecutado la primera iteración se puede ver que primero ocurre el acceso a values[i] y después se actualiza el valor de i, por lo tanto el valor final será la suma de los elementos desde el 1 hasta el 3. Pero vamos a comprobarlo:

# acc = 1, i = 1 , values = [1, 2, 3, 4]
for _ in range(3):
    val_i, i = values[i], i + 1
    # val_i = 2, i = 2
    acc += val_i
    # acc = 3
# acc = 3, i = 2, values = [1, 2, 3, 4]
for _ in range(3):
    val_i, i = values[i], i + 1
    # val_i = 3, i = 3
    acc += val_i
    # acc = 6

Tras la tercera iteración, el bucle for termina e imprime la variable acc.

>>> acc
6

Por lo tanto, es muy importante tener en cuenta que aunque haya una asignación múltiple, el orden sigue siendo de izquierda a derecha, por lo que las siguientes sentencias son equivalentes:

val_i, i = values[i], i + 1
# es igual que:
val_i = values[i]
i = i + 1

Solución

Por tanto la solución correcta es la B:

B) 6


Practica Python con PyQuizzes

En la sección de PyQuizzes puedes encontrar ejercicios prácticos explicados pormenorizado para mejorar tus habilidades como pythonista. ¡No te los pierdas!


Tutorial Python online

Aprender Python de forma gratuita siguiendo las secciones del tutorial de Python.


Libros recomendados para aprender Python

Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.

Disponible en:

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario