[Python-es] Consulta por sentencia while

Darío darioslc en gmail.com
Jue Ene 19 00:24:37 CET 2012


Hola lista, estoy empezando a aprender a programar en este lenguaje, y
estoy teniendo un problema con la sentencia while.

Es un ejercicio muy simple, pero para mí se me complicó un poco. La idea
es dado un número natural (tiempo en segundos), convertirlo en días,
horas, minutos y segundos. El problema me surge cuando quiero hacer un
bucle con while de forma tal que se le pregunta si desea realizar otro
cálculo, mientras lo ingresado sea distinto de n se sigue con otro
valor, y si es n se sale del programa.

El código es el siguiente:
  1 # coding: utf-8
  2 
  3 # Conversor de segundos en días, horas, minutos y segundos
  4 # Pedimos datos
  5 dato=raw_input(u'Ingresar segundos: ')
  6 
  7 # Hacemos un cast, convirtiéndo la cadena en un número largo
  8 dato= long(dato)
  9 # comprabación del valor introducido:
 10 if  dato>=2**32:
 11         print "Ingrese un valor menor que 2³²"
 12 else:
 13         # Días
 14         ndias, aux = divmod(dato,86400)
 15         # Horas
 16         nhoras, aux = divmod(aux,3600)
 17         # Minutos y segundos
 18         nmin, nseg= divmod(aux,60)
 19         # Muestra del resultado
 20 
 21         print '%d dias, %d horas, %d minutos, %d segundos' % \
 22         (ndias,nhoras,nmin,nseg)
 23 
 24 preg=raw_input(u'¿Desea ingresar otro valor (s/n)? ')
 25 
 26 preg=str(preg)
 27 while preg!='n':
 28 
 29 # Pedimos datos nuevamente
 30 ndato=raw_input('Ingresar segundos: ')
 31 # Hacemos un cast, convirtiendo la cadena en un número largo
 32 ndato= long(ndato)
 33 # comprabación del valor introducido:
 34 
 35         if  ndato>=2**32:
 36                 print "Ingrese un valor menor que 2³²"
 37         else:
 38                 # Días
 39                 ndias, aux = divmod(ndato,86400)
 40                 # Horas
 41                 nhoras, aux = divmod(aux,3600)
 42                 # Minutos y segundos
 43                 nmin, nseg= divmod(aux,60)
 44                 # Muestra del resultado
 45                 print '%d dias, %d horas, %d minutos, %d segundos' %
\
 46                (ndias,nhoras,nmin,nseg)
 47         print 'Gracias!'

El error al querer ejecutarlo es:
  File "diario.py", line 30
    ndato=raw_input('Ingresar segundos: ')
        ^
IndentationError: expected an indented block

Si elimino el while el código funciona bien (porque fue hecho por
alguien que sabe, no yo), le quise agregar el while para aprender su uso
en python.

Me surge la duda si está bien definido el valor preg como string.

Alguna sugerencia?

Gracias


-- 
Darío   


        |-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|  
        Por favor, no utilice formatos de archivo propietarios para el in-
        tercambio de documentos, como DOC, XLS, BMP, PPT, RAR, MP3,
        DWG, MOV,  FLV,  WMV, etc.  sino  HTML, ODT,  ODT,  DJVU,  PDF,
        TXT, CSV, PNG, FLAC, OGV, GZIP o cualquier otro que no obligue
        a utilizar un programa de un fabricante concreto. 
        Vea http://www.gnu.org/philosophy/no-word-attachments.es.html
        también
        http://www.vaslibre.org.ve/publicaciones/odfvsooxml-es.pdf
        |-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|





Más información sobre la lista de distribución Python-es