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:
def captura():
x=raw_input("dame una frase:")
return x+" " # es necesario un espacio al final para que tenga en cuenta la ultima palabra
def proceso(x):
n=len(x)
longitud=0
posicion=0
mayor=0
pmayor=0
for i in range(n):
if x[i]!= " ":
longitud+=1
else:
posicion=i
if longitud>mayor:
mayor=longitud
pmayor=posicion-mayor
longitud=0
return mayor,pmayor
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()