entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Python. ¿Relación entre bibliotecas de diferentes variables?

Hola, tengo dos dudas con las bibliotecas.

Tenemos este código:

Hemos creado dos variables; precios e inventario. Con dos bibliotecas con las mismas claves; banana, manzana...

precios = {'banana': 4, 'manzana': 2, 'naranja': 5, 'pera': 3}
inventario = {'banana': 6, 'manzana': 0, 'naranja': 8, 'pera': 7}

Creamos un for que recorre la biblioteca de la variable precios.

for x in precios:
    # imprimimos la clave
    print x
    # imprimimos su valor
    print "precios: ", precios[x]

Bien, en el ejercicio de Un Día en el Supermercado - Dueño de un negocio - 8/13 de Python
además incluía dentro de este for un print con la otra variable inventario.

for x in precios:
    print x
    print "precios: ", precios[x]
    # imprimir el valor de la otra variable intervalo 
    print "inventario: ", inventario[x]

Mi primera pregunta,
¿Cómo puede la variable inventario, que no es llamada por la declaración for x in precios, funcionar?

Después hice unas pruebas,
Creé una nueva variable a con unas claves diferentes respecto de precio e intervalo.
Creé un for pasando la variable a (for x in a), dentro de este for a la variable inventario. No funcionó.
Aunque, si escribo las mismas claves de la biblioteca precio e intervalo (banana, manzana...) en la variable a. Funciona.

precios = {'banana': 4, 'manzana': 2, 'naranja': 5, 'pera': 3}
inventario = {'banana': 6, 'manzana': 0, 'naranja': 8, 'pera': 7}
a = {'claveUno': 11, 'claveDos': 22}
# a = {'banana': 1, 'manzana': 1, 'naranja': 1, 'pera': 1}

for x in a:
    print x
    print "precios: ", a[x]
    print "inventario: ", inventario[x]

Mi segunda pregunta,
¿Porqué las bibliotecas actúan como si fuesen una variable sola siendo dos variables diferentes?

--

Este es todo el código junto:

El que entiendo

precios = {'banana': 4, 'manzana': 2, 'naranja': 5, 'pera': 3}

for x in precios:
    # imprimimos la clave
    print x
    # imprimimos su valor
    print "precios: ", precios[x]

El que no entiendo

precios = {'banana': 4, 'manzana': 2, 'naranja': 5, 'pera': 3}
inventario = {'banana': 6, 'manzana': 0, 'naranja': 8, 'pera': 7}
a = {'claveUno': 11, 'claveDos': 22}
# a = {'banana': 1, 'manzana': 1, 'naranja': 1, 'pera': 1}

for x in a:
    print x
    print "precios: ", a[x]
    print "inventario: ", inventario[x]

Gracias

1 Respuesta

4votos

Leonardo-Tadei Puntos227320

Hola @Pablo-Garcia,

las listas son independientes. Probá este código y fijate lo que pasa:

precios = {'manzana': 4, 'banana': 2, 'naranja': 5, 'pera': 3}
inventario = {'banana': 6, 'pera': 0, 'manzana': 8, 'naranja': 7}

for x in a:
    print x
    print "precios: ", precios[x]
    print "inventario: ", inventario[x]

Saludos cordiales!

0voto

Pablo-Garcia comentado

Hola @Leonardo-Tadei
Lo primero, gracias por su respuesta.

El caso es que si creo una nueva librería con diferentes claves y la imprimo dentro del for, me devuelve un KeyError: manzana

precios = {'manzana': 4, 'banana': 2, 'naranja': 5, 'pera': 3}
inventario = {'banana': 6, 'pera': 0, 'manzana': 8, 'naranja': 7}
a = {'a': 1, 'b': 1, 'c': 1, 'd': 1}

for x in precios:
    print x
    print "precios: ", precios[x]
    print "inventario: ", inventario[x]
    print "a: ", a[x]

No entiendo el porqué no actúan como si fuesen independientes

El código se puede correr aquí:
http://www.codeskulptor.org/#user40_Dc9GwXKAhA3OeTn.py
Gracias

0voto

Leonardo-Tadei comentado

Justamente, porque las listas son independientes!

Lo que te suena raro en tu ejemplo es que se pueda hacer referencia al ínice/clave de una lista para acceder a la otra, pero esto es porque intenernamiente el bucle "sabe" por qué índice va, y al acceder al valor por el índice coincidente, el código funciona (otra cosa es ver la utilidad de tener que mantener a las listas sincronizadas para que funcione el código).

Saludos cordiales!

0voto

Pablo-Garcia comentado

Ahora lo voy entendiendo mejor. El problema no está en las librerías sino en como las interpreta for.

Muchas gracias por la ayuda!

PD: Donde podría ver como está hecho el código interno del for?

1voto

Leonardo-Tadei comentado

El fuente de Python está disponible acá: https://www.python.org/downloads/ para revisar detalles de implementación.

La implementación debe ser similar a las de otros lenguajes que tienen estructuras de repetición para recorrer listas y colecciones, como Java y PHP entre otros:

  • se pone el puntero al principio de la estructura
  • se carga a la variable parámetro del bucle el índice
  • [ se hace algo usando el índice ]
  • se avanza 1 el puntero a la estructura
  • se repite mientras haya elementos
    ...
  • al final, se vuelve el puntero al inicio y se sale.

En PHP por ejemplo tenés 2 sintaxis:

foreach($lista as $valor){
  // hacer algo con el valor
}

y

foreach($lista as $clave as $valor){
  // hacer algo con la clave, con el valor o con ambos
}

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta