Como te dice david, debes trabajar con la reutilización de código, lo que
te aconsejo es que coloques la rutina en una función y la llames dentro del
while, de esta manera te será más sencillo modificarlo y es más legible.

El 18/01/2012 19:03, "Daπid" <[email protected]> escribió:
>
> Todo lo que vaya dentro de un while tiene que ir indentado, es la
> forma que tiene Python de indicar el bloque a repetir. (Lo que en C
> iría entre llaves).
>
> Fíjate además que has repetido exactamente el mismo código dos veces.
> Eso, aparte de ser feo y difícil de modificar (lo que hagas lo tienes
> que hacer dos veces), te sugiere que tiene que haber una forma de
> hacerlo escribiéndolo una sóla vez.
>
> Si quieres pensarlo por ti mismo, sáltate el siguiente párrafo:
>
> preg='s'
> while preg!=n:
>  blablalba
>
>
>
> ¡Suerte!
>
> 2012/1/19 Darío <[email protected]>:
> > 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
> >
 |-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
> >
> >
> >
> > _______________________________________________
> > Python-es mailing list
> > [email protected]
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> _______________________________________________
> Python-es mailing list
> [email protected]
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a