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 <dario...@gmail.com>: > 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 > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/