Autor Tema: Dudas con variables entera en python.  (Leído 1700 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Dudas con variables entera en python.
« en: 08 de Octubre de 2017, 12:07:08 »
Hola a todos, que tengan un muy buen día. -
Les hago una pequeña reseña de mi vida actual, tengo 65 años y mucho pero mucho tiempo
para dedicarle al estudio de la programación, como supondrán por mi edad ya no voy a
concurrir a la universidad y si pienso aprender de forma autodidacta. -
Ni me pregunten como me decidí por Python, bueno debe ser intuición, espero no haberme
equivocado. - 
Hace 3 días que estoy leyendo el libro "Aprenda a pensar como un programador" y quería
hacer el siguiente programita a partir del número 1234 mostrar por pantalla por separado
los 4 números, pero no me sale, es obvio que debería utilizar un bucle pero todavía no se
como es la sintaxis. -
Les dejo lo que llevo hecho para ver si me pueden orientar.-

Código: Python
  1. a = 1234
  2. b = 10
  3. c = a % b
  4. print(c)

Lo que ocurre es que cuando divido 1234/10 me sale con decimales y necesito que el resultado
sea 1234-123-12-1
Saludos y un abrazo.-
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:Dudas con variables entera en python.
« Respuesta #1 en: 08 de Octubre de 2017, 14:36:06 »
% es la función módulo, por lo tanto

c = a%b en la primera iteración va a ser 4, después eso se los restas a "a" y lo divides entre b, con lo cual obtendrías el segundo número 123. Repites y así obtendrás 12 y 1

Código: Python
  1. a = 1234
  2. b = 10
  3. d = [a]
  4. while(a):
  5.     c = a%b
  6.     a = (a - c)/10
  7.     d.append(a)
  8.  
  9. print(d[:-1])

Código: [Seleccionar]
[1234, 123, 12, 1]

Después ya lo formateas como lo quieras presentar en pantalla

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Dudas con variables entera en python.
« Respuesta #2 en: 08 de Octubre de 2017, 17:32:04 »
tsk, muchas gracias por ocuparte.-
Me sirve para adquirir conocimientos pero tiene cosas como d = [a] que todavía no llegué.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas con variables entera en python.
« Respuesta #3 en: 08 de Octubre de 2017, 18:04:37 »
Otra forma, asi no usas listas.

El int() lo pasa a entero, asi que quita o elimina los decimales, el str() pasa el numero a un string o cadena de caracteres.

Código: Python
  1. a = 1234
  2. b = 10
  3. c = ""
  4. while(a):
  5.     c = c + str(a) + "-"
  6.     a = int(a/b)
  7.  
  8. print(c)

Lo feo de esto es que el resultado queda:

1234-123-12-1-

Lo podrias recortar haciendo

Código: Python
  1. print(c[:-1])

Esto le dice a python que de todo el string de c, tome desde el comienzo hasta un caracter menos. Pero como no queres entrar en demasiado todavia, Buscamos otra alternativa
Sino la otra para evitar esto es complicarla un poco mas el loop

Código: Python
  1. a = 1234
  2. b = 10
  3. c = ""
  4. while(a):
  5.     c = c + str(a)
  6.     a = int(a/b)
  7.     if(a == 0):
  8.          break
  9.     c = c + "-"
  10.  
  11. print(c)

Es lo mas simple que se me ocurre. Una gran ventaja de python es usar listas, y la respuesta que da el prorgama de tsk es la mejor, ya que luego haces un join("-") y ya tenes armado tu salida.

Código: Python
  1. print(d[:-1].join("-"))
« Última modificación: 08 de Octubre de 2017, 18:12:18 por KILLERJC »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Dudas con variables entera en python.
« Respuesta #4 en: 08 de Octubre de 2017, 18:46:53 »
Hola Daniel,

Ante todo decirte que no te has equivocado. Tú mismo te darás cuenta a medida que aprendas Python, que es un lenguaje magnífico.

Lo segundo importante es saber qué versión de Python estás utilizando. La versión 3 es la más moderna, pero el libro que comentas utiliza la versión 2.
Cada una se comporta de diferente manera en unos cuantos detalles y precisamente la división entera es uno de esos detalles que las diferencia.

Python 2:
  División entera:   1234 / 10
  División decimal:  1234 / 10.0

Python 3: 
  División entera:   1234 // 10
  División decimal:  1234 / 10

Saludos.
« Última modificación: 08 de Octubre de 2017, 18:53:44 por Picuino »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:Dudas con variables entera en python.
« Respuesta #5 en: 08 de Octubre de 2017, 19:10:47 »
tsk, muchas gracias por ocuparte.-
Me sirve para adquirir conocimientos pero tiene cosas como d = [a] que todavía no llegué.-

Saludos.
Daniel

Con d=[]

Indicas que d es una lista

con

d=[a]

Le indicas que es una lista pero lo inicializas con el valor del contenido de a

Python es un lenguaje muy expresivo. Por ejemplo, sabemos que b = 10, por lo que podrías realizar lo mismo en una sola línea con una característica que se llama listas por comprensión

Código: Python
  1. a = "1234"
  2. d = [a] + [a[:-i] for i in range(1,len(a))]
  3. print("-".join(d))

En la línea 1 vemos que a esta declarado como string, puedes pasar cualquier entero a string con str

Código: Python
  1. a= 1234
  2. a = str(a)

En la línea dos vemos dos partes concatenación de listas [] + [] y listas por comprensión. Este último esta dado por

Código: Python
  1. [a[:-i] for i in range(1,len(a))]

Es el equivalente a

Código: Python
  1. for i in range(1,len(a)):
  2.     d.append(a[:-i])

Pero es más rápida.

Código: Python
  1. import random
  2. import time
  3. REP = 10
  4. ELEMENTS = 10000000
  5.  
  6. avg = 0.0
  7. for j in range(REP):
  8.     d = []
  9.     t = time.time()
  10.     for i in xrange(ELEMENTS):
  11.         d.append(random.random())
  12.     avg += time.time()-t
  13.  
  14. print("FOR %s"%(avg/REP))
  15.  
  16. avg = 0.0
  17. for j in range(REP):
  18.     t = time.time()
  19.     d = [random.random() for i in xrange(ELEMENTS)]
  20.     avg += time.time()-t
  21.  
  22. print("LC %s"%(avg/REP))

Código: [Seleccionar]
FOR 2.87350075245
LC 2.03487300873

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Dudas con variables entera en python.
« Respuesta #6 en: 09 de Octubre de 2017, 16:14:50 »
tsk, creo que estás abrumando a Daniel con demasiados conceptos de Python:
  programación funcional
  métodos de objeto string
  manejo de listas
  funciones especiales como range y xrange
  manejo de módulos
  formateado de cadenas con %

Sólo te ha faltado hacer el programa con orientación a objetos, funciones lambda y recursivas, introspección y con gestión de excepciones.

Daniel está empezando y todavía no controla todo eso que le cuentas. Ya llegará.


Un saludo.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Dudas con variables entera en python.
« Respuesta #7 en: 09 de Octubre de 2017, 17:32:08 »
KILLERJC, muchas gracias por tu participación y realmente me sorprendió leerte también en python, lo tuyo tiene cosas sencillas que ya puedo ir tomando nota.-
tsk, como lo siguiere Picuino tu código sobrepasa en mucho mis posible interpretaciones de python, no obstante no te das una idea como te comprendo, hace ya muchos años sabia programar en Foxpro y cuando alguien me hacía alguna consulta "escupía" código a lo loco, voy a guardar tu código para el futuro.-
Picuino, gracias también por participar y no le tires tanto la oreja, seguro que lo hizo de corazón.-

Un abrazo para todos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-


 

anything