elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Aprendiendo PYTHON desde cero, Lección 30.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Aprendiendo PYTHON desde cero, Lección 30.  (Leído 3,495 veces)
ViejoMajara

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Aprendiendo PYTHON desde cero, Lección 30.
« en: 21 Marzo 2015, 12:35 pm »

¡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:

Citar

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:

Citar
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 Desconectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #1 en: 21 Marzo 2015, 18:06 pm »

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 Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #2 en: 21 Marzo 2015, 18:20 pm »


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... :huh:


MISMO CODIGO:
Código
  1. lista={'Pepe':'I',' Jose':'E', 'Pirulo':'I',  'Jorge':'E', 'Salvador':'E'}
  2. class Empleados:
  3.    def __init__(self,nombre):
  4.        self.empleado = nombre
  5.  
  6.    def computarSueldo(self):
  7.        self.sueldo=2000
  8. class Ingenieros (Empleados):
  9.    def __init__(self,nombre):
  10.        self.empleado= nombre
  11.  
  12.    def computarSueldo(self):
  13.        self.sueldo = 3000
  14.  
  15.  
  16. for emp in lista:
  17.    print(emp)
  18.    if lista[emp]=='E':
  19.        a= Empleados(emp)
  20.        a.computarSueldo()
  21.        print (a.empleado, a.sueldo)
  22.    else:
  23.        a= Ingenieros(emp)
  24.        a.computarSueldo()
  25.        print(a.empleado, a.sueldo)
  26.  
  27.  

DISTINTOS RESULTADOS: :huh: :huh: :huh: :huh: :huh:
Código
  1. >>> ================== RESTART ===================
  2. >>>
  3. Pepe
  4. Pepe 3000
  5. Pirulo
  6. Pirulo 3000
  7. Jorge
  8. Jorge 2000
  9. Jose
  10. Jose 2000
  11. Salvador
  12. Salvador 2000
  13. >>> ========================= RESTART===========================
  14. >>>
  15. Jorge
  16. Jorge 2000
  17. Pirulo
  18. Pirulo 3000
  19. Jose
  20. Jose 2000
  21. Pepe
  22. Pepe 3000
  23. Salvador
  24. Salvador 2000
  25. >>> ===================== RESTART ======================
  26. >>>
  27. Pepe
  28. Pepe 3000
  29. Jorge
  30. Jorge 2000
  31. Salvador
  32. Salvador 2000
  33. Jose
  34. Jose 2000
  35. Pirulo
  36. Pirulo 3000
  37. >>> ================================ RESTART ================================
  38. >>>
  39. Pepe
  40. Pepe 3000
  41. Jose
  42. Jose 2000
  43. Jorge
  44. Jorge 2000
  45. Pirulo
  46. Pirulo 3000
  47. Salvador
  48. Salvador 2000
  49. >>> ================================ RESTART ================================
  50. >>>
  51. Jose
  52. Jose 2000
  53. Pepe
  54. Pepe 3000
  55. Jorge
  56. Jorge 2000
  57. Salvador
  58. Salvador 2000
  59. Pirulo
  60. Pirulo 3000
  61. >>> ================================ RESTART ================================
  62. >>>
  63. Jorge
  64. Jorge 2000
  65. Pepe
  66. Pepe 3000
  67. Salvador
  68. Salvador 2000
  69. Jose
  70. Jose 2000
  71. Pirulo
  72. Pirulo 3000
  73. >>> ==================== RESTART========================
  74. >>>
  75. Salvador
  76. Salvador 2000
  77. Jose
  78. Jose 2000
  79. Jorge
  80. Jorge 2000
  81. Pepe
  82. Pepe 3000
  83. Pirulo
  84. Pirulo 3000
  85. >>>
  86.  
En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #3 en: 21 Marzo 2015, 18:30 pm »

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 Desconectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #4 en: 22 Marzo 2015, 03:25 am »

Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash:
Código:
$ 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 Desconectado

Mensajes: 52


Ver Perfil
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #5 en: 24 Marzo 2015, 11:39 am »

¡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 Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: Aprendiendo PYTHON desde cero, Lección 30.
« Respuesta #6 en: 25 Marzo 2015, 04:36 am »

Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash:
Código:
$ 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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PYTHON DESDE CERO « 1 2 3 »
Scripting
TxShack 24 23,482 Último mensaje 18 Febrero 2008, 15:57 pm
por roxie
Video tutoriales de python desde cero
Scripting
picapiedra21 4 5,432 Último mensaje 23 Marzo 2012, 20:01 pm
por juanjo33
Aprendiendo PYTHON desde cero. L29.
Scripting
ViejoMajara 5 4,242 Último mensaje 21 Marzo 2015, 17:50 pm
por LaThortilla (Effort)
MOVIDO: Aprendiendo PYTHON desde cero. L29.
Programación General
Eleкtro 0 1,675 Último mensaje 16 Marzo 2015, 20:52 pm
por Eleкtro
Aprendiendo desde cero
Ingeniería Inversa
BGuerraI 8 3,599 Último mensaje 29 Noviembre 2018, 08:46 am
por BGuerraI
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines