Autor
|
Tema: Aprendiendo PYTHON desde cero, Lección 30. (Leído 3,813 veces)
|
ViejoMajara
Desconectado
Mensajes: 52
|
¡Hola! En la lección 30 del manual de R.Narvaja, en la penúltima página, aparece un ejemplo en el que, para crear una salida con el nombre y salario de cada empleado, hace lo siguiente: lista={'Pepe':'I','Jose':'E','Pirulo':'I','Jorge':'E','Salvador':'E'}
for emp in lista: if lista[emp]=='E': a= Empleados(emp) a.computarSueldo() print a.empleado, a.sueldo else: a= Ingenieros(emp) a.computarSueldo() print a.empleado, a.sueldo
Se entiende perfectamente, pero al imprimir el orden en el que salen es: Jose 2000 Pirulo 3000 Pepe 3000 Jorge 2000 Salvador 2000
Por más vueltas que le doy al tema no consigo averiguar el por qué de esta ordenación. ¿Podría alguien aclararlo? Saludos
|
|
|
En línea
|
|
|
|
explorer
Desconectado
Mensajes: 102
Analista/Programador Perl
|
La ordenación de las entradas clave/valor en un diccionario o hash, es "aleatorio" (depende del cómputo del valor hash interno).
|
|
|
En línea
|
|
|
|
LaThortilla (Effort)
Desconectado
Mensajes: 234
¿En que vida harás lo que en esta no?
|
Por más vueltas que le doy al tema no consigo averiguar el por qué de esta ordenación. ¿Podría alguien aclararlo?
Saludos
sinceramente me he quedado con la duda... sera algun tipo de error de python... MISMO CODIGO: lista={'Pepe':'I',' Jose':'E', 'Pirulo':'I', 'Jorge':'E', 'Salvador':'E'} class Empleados: def __init__(self,nombre): self.empleado = nombre def computarSueldo(self): self.sueldo=2000 class Ingenieros (Empleados): def __init__(self,nombre): self.empleado= nombre def computarSueldo(self): self.sueldo = 3000 for emp in lista: print(emp) if lista[emp]=='E': a= Empleados(emp) a.computarSueldo() print (a.empleado, a.sueldo) else: a= Ingenieros(emp) a.computarSueldo() print(a.empleado, a.sueldo)
DISTINTOS RESULTADOS: >>> ================== RESTART =================== >>> Pepe Pepe 3000 Pirulo Pirulo 3000 Jorge Jorge 2000 Jose Jose 2000 Salvador Salvador 2000 >>> ========================= RESTART=========================== >>> Jorge Jorge 2000 Pirulo Pirulo 3000 Jose Jose 2000 Pepe Pepe 3000 Salvador Salvador 2000 >>> ===================== RESTART ====================== >>> Pepe Pepe 3000 Jorge Jorge 2000 Salvador Salvador 2000 Jose Jose 2000 Pirulo Pirulo 3000 >>> ================================ RESTART ================================ >>> Pepe Pepe 3000 Jose Jose 2000 Jorge Jorge 2000 Pirulo Pirulo 3000 Salvador Salvador 2000 >>> ================================ RESTART ================================ >>> Jose Jose 2000 Pepe Pepe 3000 Jorge Jorge 2000 Salvador Salvador 2000 Pirulo Pirulo 3000 >>> ================================ RESTART ================================ >>> Jorge Jorge 2000 Pepe Pepe 3000 Salvador Salvador 2000 Jose Jose 2000 Pirulo Pirulo 3000 >>> ==================== RESTART======================== >>> Salvador Salvador 2000 Jose Jose 2000 Jorge Jorge 2000 Pepe Pepe 3000 Pirulo Pirulo 3000 >>>
|
|
|
En línea
|
|
|
|
LaThortilla (Effort)
Desconectado
Mensajes: 234
¿En que vida harás lo que en esta no?
|
La ordenación de las entradas clave/valor en un diccionario o hash, es "aleatorio" (depende del cómputo del valor hash interno).
Pensé que con el lista.update se solucionaría... pero es igual
|
|
|
En línea
|
|
|
|
explorer
Desconectado
Mensajes: 102
Analista/Programador Perl
|
Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash: $ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x' b => 2 a => 1 c => 3 $ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x' c => 3 b => 2 a => 1 Se trata de una medida de seguridad (los diccionarios o hashes se usan con temas de contraseñas, control de sesiones, etc.). Si fuera predecible el orden en que salen los pares clave/valor, se podría suplantar o robar información. Existen bibliotecas que permiten recuperar la información en el mismo orden en que fue grabada. En Perl, por ejemplo, está Tie::IxHash.
|
|
|
En línea
|
|
|
|
ViejoMajara
Desconectado
Mensajes: 52
|
¡Hola!
Soy novato en Python y jamás hubiese imaginado que se pudiesen producir salidas aleatorias sin proponerlas explícitamente.
Asunto solventado.
Saludos.
|
|
|
En línea
|
|
|
|
LaThortilla (Effort)
Desconectado
Mensajes: 234
¿En que vida harás lo que en esta no?
|
Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash: $ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x' b => 2 a => 1 c => 3 $ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x' c => 3 b => 2 a => 1 Se trata de una medida de seguridad (los diccionarios o hashes se usan con temas de contraseñas, control de sesiones, etc.). Si fuera predecible el orden en que salen los pares clave/valor, se podría suplantar o robar información. Existen bibliotecas que permiten recuperar la información en el mismo orden en que fue grabada. En Perl, por ejemplo, está Tie::IxHash. Grade Gracias por la explicación...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
PYTHON DESDE CERO
« 1 2 3 »
Scripting
|
TxShack
|
24
|
24,577
|
18 Febrero 2008, 15:57 pm
por roxie
|
|
|
Video tutoriales de python desde cero
Scripting
|
picapiedra21
|
4
|
5,663
|
23 Marzo 2012, 20:01 pm
por juanjo33
|
|
|
Aprendiendo PYTHON desde cero. L29.
Scripting
|
ViejoMajara
|
5
|
4,575
|
21 Marzo 2015, 17:50 pm
por LaThortilla (Effort)
|
|
|
MOVIDO: Aprendiendo PYTHON desde cero. L29.
Programación General
|
Eleкtro
|
0
|
2,084
|
16 Marzo 2015, 20:52 pm
por Eleкtro
|
|
|
Aprendiendo desde cero
Ingeniería Inversa
|
BGuerraI
|
8
|
4,243
|
29 Noviembre 2018, 08:46 am
por BGuerraI
|
|