Anuncio

Colapsar
No hay ningún anuncio todavía.

Ejercicio de Python que se me atraganta

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Python Ejercicio de Python que se me atraganta

    Hola, buenas. Estoy aprendiendo python y haciendo ejercicios me ha entrado una duda. Como podria hacer este programa sin recurrir a arrays/colecciones. Es decir, he intentado hacerlo facilmente usando solo estructuras de control pero se me atraganta.
    He intentado también recurrir a los metodos del objeto 'string' pero no he conseguido llegar a una solucion clara.
    El ejercicio es el siguiente:

    7. Cree un programa que lea una secuencia de teclado terminada en punto y determine si es una secuencia de palabras ascendente, descendente, ambos o ninguno. Para ello se usa el numero de palabras de cada palabra. Supongamos que la secuencia esta compuesta exclusivamente por letras minusculas, sin acentos ni puntos y con el punto como final de secuencia.


    Otra opcion que he pensado es usar subprogramas. El hecho es que pretendo encontrar una solución sencilla, corta y eficiente. Quizas la respuesta a este ejercicio no sea tan facil y por eso no encuentro dicha solución 'tan fácil'.

    Por otra parte, aclaro una parte del ejercicio:
    - Una secuencia no es ascendiente si el numero de letras de una palabra es mayor que el numero de letras siguiente
    - Por otra parte, no es descendiente si el numero de letras de una palabra es menor que el numero de letras de la siguiente.

    Es decir, para dar algunos ejemplos:
    hola amigo --> ascendente porque las longitudes son 4 y 5
    cama rama pato. --> ascendente y descendente porque las longitudes son 4,4,4
    armario rama --> descente porque las longitudes son 7 y 4
    amigo --> ascendente y descendente porque las longitudes son 5
    llama a casa --> Ni ascendente ni descendente porque las longitudes son 5,1,4
    [FONT=monospace]

    [/FONT]
    Aqui dejo mi programa comenzado:

    sec = raw_input('Escribe una secuencia en letras minusculas y acabada en punto. Entonces, te dire si es ascendente o descendente:')
    c_prec =''
    #Lo he creado con vista a que cuando recorramos la secuencia, también evalue el elemento anterior. Creo que puede ir por ahi
    num_letras = 0

    # Esto lo hago para detectar que el usuario no me hace trampas.
    while sec.islower() == False or sec.endswith('.') == False:
    ___print ' No has introducido bien los datos. Comprueba si has escrito la secuencia acabada en punto y en minusculas'
    ___sec = raw_input('Escribe una secuencia en letras minusculas y acabada en punto. Entonces, te dire si es ascendente o descendente:')

    for i in sec:
    ___
    (a partir de aqui me entran muchas dudas. No se si estoy haciendo el programa mas dificil de lo que deberia)



    # Tengo diferentes ideas en mi cabeza pero no consigo materializarlas. A primera vista, he pensado en usar la estructura de control for-in para recorrer la secuencia. Luego, he pensado en hacer algo de contar los espacios (o almenos considerar los espacios en blanco para algo) i tambien muy importante, he pensado en crear un contador o algo parecido que vaya contando las letras entre espacio y espacio. Luego solo se trataria de comparar los diferentes contadores y asi dar una respuesta.

    # Recuerdo que me estoy iniciando en python. No se si mi idea es buena o me estoy complicando demasiado. En lo que llevo en python lo que si que me he dado cuenta es que existen metodos, librerias... que te facilitan mucho estas cosas.

    Gracias!
    Última edición por zhazzu; 13/11/2015, 22:10:53.
    We must know. We will know. - David Hilbert



  • #2
    Re: Ejercicio de Python que se me atraganta

    Hola, sin duda intentar resolver el ejercicio sin usar listas o tuplas es hacer mucho más difícil pero más interesante. Se me ocurre algo y voy a intentar probarlo. Ahora quieres la solución o que te guíen un poco?

    Edito: Tu idea es muy buena, puedes recorrer con un for la cadena con las palabras teniendo en cuenta que cada palabra individual termina donde hay un espacio o un punto. Hasta acá ya puedes conocer la longitud de cada palabra individual, el problema es cómo vas a almacenar esa longitud sin usar arrays. Se me ocurren dos formas:

    1) Conviertes la longitud de la palabra a string le agregas un separador y lo guardas como si fuera un acumulador y al final usas otro for para analizar de nuevo esta cadena.
    2) Vas analizando a medida que obtienes cada longitud comparándola con la anterior.

    Yo lo solucioné usando la segunda opción, eso si, hay que tomar un par de consideraciones que para alguien que apenas comienza podría no ver tan fácil. Así que publico el código y cualquier inquietud me comentas.

    Código:
    palabras = raw_input("Ingrese las palabras: ")
    
    contador = 0
    
    
    asc = 0
    des = 0
    
    
    inicio = 0
    
    
    anterior = 0
    
    
    for palabra in palabras:
        if palabra == " " or palabra == ".":
            
            if inicio == 0:
                anterior = contador
                inicio = 1
                contador = 0
                continue
    
    
            print anterior, contador
            if anterior > contador:
                des = 1
            elif anterior < contador:
                asc = 1
            anterior = contador
            contador = 0
            
        else:
            contador += 1
    else:
        if des and asc:
            print "Ninguno"
        elif des == 1:
            print "descendiente"
        elif asc == 1:
            print "Ascendente"
        else:
            print "Ninguno"
    Acá lo puedes ver un poco mejor http://pastebin.com/1zX4SVHX

    Saludos!
    Última edición por NikolaT; 05/12/2015, 18:59:40. Motivo: Eliminar basura en el código

    Comentario

    Contenido relacionado

    Colapsar

    Trabajando...
    X