Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SkaTrumpet en 1 Diciembre 2015, 00:10 am



Título: Ayuda Phyton bucle infinito
Publicado por: SkaTrumpet en 1 Diciembre 2015, 00:10 am
Hola tengo un problema con este programa de phyton lo que busca es la palabra mas larga y su posicion pero se buclea infinita mente en el while y no se como repararlo gracias por su atencion
Código:
def captura():
    x=raw_input("dame una frase:")
    return x

def proceso(x):
    n=len(x)
    longitud=0
    posicion=0
    mayor=0
    pmayor=0
    for i in range(0,n):
        while x[i]!= " ":
            longitud+=1
        posicion=i
        if longitud>mayor:
            mayor=longitud
            posmayor=posicion-mayor
        longitud=0
    return mayor,posmayor

def impresion(x,y):
    print "la frase mas larga tiene",x,"caracteres"
    print "su posicion es de",y,"-",(y+x)
def main():
    t=captura()
    x,y=proceso(t)
    impresion(x,y)
main()


Título: Re: Ayuda Phyton bucle infinito
Publicado por: daryo en 1 Diciembre 2015, 01:06 am
bueno porque el while  esta dentro del for asi asi que no acaba nunca el ciclo del for y la variable i se mantiene en cero(es decir se queda siempre en el primer caracter).

hay que quitar el while y poner un if

asi funciona bien:
Código
  1. def captura():
  2.    x=raw_input("dame una frase:")
  3.    return x+" " # es necesario un espacio al final para que tenga en cuenta la ultima palabra
  4.  
  5. def proceso(x):
  6.    n=len(x)
  7.    longitud=0
  8.    posicion=0
  9.    mayor=0
  10.    pmayor=0
  11.    for i in range(n):
  12.        if x[i]!= " ":
  13.            longitud+=1
  14.        else:
  15.         posicion=i
  16.         if longitud>mayor:
  17.             mayor=longitud
  18.             pmayor=posicion-mayor
  19.         longitud=0
  20.    return mayor,pmayor
  21.  
  22. def impresion(x,y):
  23.    print "la frase mas larga tiene",x,"caracteres"
  24.    print "su posicion es de",y,"-",(y+x)
  25. def main():
  26.    t=captura()
  27.    x,y=proceso(t)
  28.    impresion(x,y)
  29. main()