Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 28 Octubre 2010, 15:18 pm



Título: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 15:18 pm
Hola:

Viendo este ejercicio.
Ver ejercicio (http://www.subeimagenes.com/img/wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww-5582.jpg)

No se si he interpretado bien lo que me pide y siguiendo los ejemplos del PDF he modificado este código.

Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    cambios = 0
  4.    for i in range(1, len(cadena)):
  5.        if cadena[i] == ' ' and cadena[i-1] != ' ':
  6.            cambios = cambios + 1
  7.  
  8.    if cadena[-1] == ' ':
  9.        cambios = cambios - 1
  10.  
  11.    palabras = cambios + 1
  12.    print 'Palabras:', palabras, 'palabras y', i, 'carácteres.'
  13.  
  14.    cadena = raw_input('Escribe una frase: ')

Su resultado es este.
Citar
Escribe una frase: Vale más una imagen, que mil palabras.
Palabras: 7 palabras y 38 carácteres.
Escribe una frase:

¿Qué opinas?

;)


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 28 Octubre 2010, 16:00 pm
El codigo no lo mire, pero viendo el resultado que devuelve, no hace exactamente lo que te pide el ejercicio.

Lo que tenes que hacer es, dada una cadena y un numero entero, por ejemplo:

Código:
cadena = "Una imagen vale mas que mil palabras"
k = 3

Te diga si alguna de las palabras de la cadena tiene una cantidad de letras k. En este caso te deberia devolver verdadero ya que las palabras "Una" - "mas" - "que" - "mil" tienen k (3) letras.

Un saludo ;)


Título: Re: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 16:39 pm
Ya te endiendo. Deja ver com me expreso lo que me cuentas.

Si en este cadena:
Citar
cadena = "Una imagen vale mas que mil palabras"
Debo detectar de alguna manera que una palabra que contenga (k) 3 letras y algún espacio por medio para que las detecte. ¿Te refieres a eso? Parece que si.

Parece que hay que hacer algo, por ejemplo que detecte las tres primeras letras y cuando detecte un espacio o una coma o un punto te lo guarda y lo presenta con print.

Ejemplo:
cadena = "Una imagen vale mas que mil palabras"
- Si recorre una cadena "cadena" y detecta tres letras (k) y un espacio.
- Muestra k
-En caso contrario lo ignora su es mayor o menor.

¿Es algo así?

Sigo investigando...


Título: Re: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 18:22 pm
Con este código sacado del libro.

Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    cambios = 0
  4.    anterior = ' '
  5.    for i in cadena:
  6.        if caracter == ' ' and caracter != ' ':
  7.            cambios + 1
  8.        anterior = caracter
  9.  
  10.    if cadena[-1] == ' ':
  11.        cambios = cambios - 1
  12.  
  13.    palabras = cambios + 1
  14.    print 'Palabras:', palabras, 'palabras y', i, 'carácteres.'
  15.    print 'cambios', cambios
  16.  
  17.  
  18.    cadena = raw_input('Escribe una frase: ')

Me da este error.
Citar
Traceback (most recent call last):
  File "/home/simi/NetBeansProjects/simi/src/simi.py", line 25, in <module>
    if caracter == ' ' and caracter != ' ':
NameError: name 'caracter' is not defined

Edito:
Ya encontré el error.
Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    cambios = 0
  4.    anterior = ' '
  5.    for caracter in cadena:
  6.        if caracter == ' ' and anterior != ' ':
  7.            cambios += 1
  8.        anterior = caracter
  9.  
  10.    if cadena[-1] == ' ':
  11.        cambios = cambios - 1
  12.  
  13.    palabras = cambios + 1
  14.    print 'Palabras:', palabras

Estoy traquiniando de como detectar los 3 primeros (k) caracter y espacio para que se quede con él.


Título: Re: [Python] Las constante K.
Publicado por: Shell Root en 28 Octubre 2010, 20:05 pm
Pues, la variable CARACTER que valor contiene? Solo la veo en esa parte de código nada más. :p


Título: Re: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 20:34 pm
Haciéndola de esta menera:

Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    cambios = 0
  4.    anterior = ' '
  5.    for caracter in cadena:
  6.        if caracter == ' ' and anterior != ' ':
  7.            cambios += 1
  8.        anterior = caracter
  9.  
  10.    if cadena[-1] == ' ':
  11.        cambios = cambios - 1
  12.  
  13.    palabras = cambios + 1
  14.    print 'Palabras:', palabras
  15.    print 'Cambios',cambios
  16.    print 'Caracter',caracter
  17.    print 'Cadena',cadena
  18.  
  19.  
  20.    cadena = raw_input('Escribe una frase: ')

Su resultado es este:
Citar
Escribe una frase: Una imagen vale mas que mil palabras
Palabras: 7
Cambios 6
Caracter s
Cadena Una imagen vale mas que mil palabras


Título: Re: [Python] Las constante K.
Publicado por: Shell Root en 28 Octubre 2010, 21:10 pm
No entendí está parte del código,
Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    cambios = 0
  4.    anterior = ' '
  5.    for caracter in cadena:
  6.        if caracter == ' ' and anterior != ' ':
  7.            cambios += 1
  8.        anterior = caracter
  9.  
  10.    if cadena[-1] == ' ':
  11.        cambios = cambios - 1
  12.  
  13.    palabras = cambios + 1
  14.    print 'Palabras:', palabras
  15.    print 'Cambios',cambios
  16.    print 'Caracter',caracter
  17.    print 'Cadena',cadena
  18.  
  19.  
  20.    cadena = raw_input('Escribe una frase: ')


Título: Re: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 22:02 pm
(http://www.subeimagenes.com/img/zoom-5589.jpg)

Por lo que entiendo if caracter es igual a espacio y anterior es distinto a espacio, si se cumple, cambios += 1, en caso de no cumplirse salta a anterior = caracter.

PD: ¿Cómo marcas ese color en las líneas de código?


Título: Re: [Python] Las constante K.
Publicado por: xassiz~ en 28 Octubre 2010, 22:26 pm
PD: ¿Cómo marcas ese color en las líneas de código?
Dale a Citar y ya ves su BBCode ;D


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 28 Octubre 2010, 22:26 pm
En las etiquetas de Python pones una , y el numero de linea a resaltar.

[*code=python,2][*/code]

Muestra:

Código
  1. print "Prueba"
  2. print "Prueba"
  3. print "Prueba"
  4. print "Prueba"
  5.  

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
 :¬¬


Título: Re: [Python] Las constante K.
Publicado por: Meta en 28 Octubre 2010, 22:58 pm
En las etiquetas de Python pones una , y el numero de linea a resaltar.

[*code=python,2][*/code]

Muestra:

Código
  1. print "Prueba"
  2. print "Prueba"
  3. print "Prueba"
  4. print "Prueba"
  5.  

Ya entiendo, muchas gracias. Puse el ,4.

Con este ejercicio sigo en con la curiosidad de como detectar cuando tiene 3 letras.

Sigo intentando como detectar la k si vale 3 al introducirla y que te muestre sólo palabras de 3 letras.

Código
  1. cadena = raw_input('Escribe una frase: ')
  2. k = int(raw_input('Introduces un número para la constante K: '))
  3.  
  4. while cadena != '':
  5.    cambios = 0
  6.    anterior = ' '
  7.    for caracter in cadena:
  8.        if caracter == ' ' and anterior != ' ':
  9.            cambios += 1
  10.        anterior = caracter
  11.  
  12.    if cambios == k:
  13.        print cambios [cadena]
  14.  
  15.    if cadena[-1] == ' ':
  16.        cambios = cambios - 1
  17.  
  18.    palabras = cambios + 1
  19.    print 'Palabras:', palabras
  20.    print 'Cambios', cambios
  21.    print 'Caracter', caracter
  22.    print 'Cadena', cadena
  23.  
  24.    cadena = raw_input('Escribe una frase: ')

Otro intento raro.
Código
  1. cadena = raw_input('Escribe una frase: ')
  2. k = int(raw_input('Introduces un número para la constante K: '))
  3.  
  4. while cadena != '':
  5.    cambios = 0
  6.    anterior = ' '
  7.    for caracter in cadena:
  8.        if caracter == ' ' and anterior != ' ':
  9.            cambios += 1
  10.        anterior = caracter
  11.  
  12.    if cadena[-k] >= 0:
  13.        cambios = cambios - k
  14.  
  15. #    if cadena[-1] == ' ':
  16. #        cambios = cambios - 1
  17.  
  18.    palabras = cambios + 1
  19.    print 'Palabras:', palabras
  20.    print 'Cambios', cambios
  21.    print 'Caracter', caracter
  22.    print 'Cadena', cadena
  23.  
  24.    cadena = raw_input('Escribe una frase: ')








Edito:

Este ejercicio se me resiste.

Voy a ponerlo más fácil.
Código
  1. cadena = raw_input('Escribe una frase: ')
  2. while cadena != '':
  3.    blancos = 0
  4.    for caracter in cadena:
  5.        if blancos == ' ':
  6.            blancos += 1
  7.    palabras =blancos + 1 # Hay una palabra mas que blancos.
  8.    print 'Palabra:', palabras
  9.  
  10.    cadena = raw_input('Escribe una frase: ')

Aquí claramente detecta los espacios en blanco. pero quiero que detecte la K = 3 como pide el enunciado que puedes ver aquí (http://www.subeimagenes.com/img/wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww-5582.jpg).

Debe haber una manera de detectar tres palabas en una cadena.

Lo que supuestamente hay que hacer.
- Introduce una cadena. Ejemplo: Vale mas una iamgen que mil palabras.
- Intoduce una constante k. Ejemplo. 3.
- Con un bucle for lee cadena "Vale mas una iamgen que mil palabras".
- Comprueba si por cada palabra tiene el valor de la constante k que en este caso es 3. (Aquí ya no se como hacerlo).
...
...


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 29 Octubre 2010, 13:48 pm
Al fin se me ocurrio una manera de resolverlo :P Te lo dejo por si te sirve:

Código
  1. s = raw_input("Ingrese una cadena: ")
  2. k = int(raw_input("Ingrese el valor de k: "))
  3. j = 0
  4.  
  5. for c in s:
  6.    if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
  7.        j += 1
  8.    else:
  9.        if k == j:
  10.            print "La cadena tiene por lo menos una palabra de ", k, " letras"
  11.            break

Un saludo ;)



Título: Re: [Python] Las constante K.
Publicado por: Novlucker en 29 Octubre 2010, 13:57 pm
Código
  1. p = raw_input('Ingresa frase: ')
  2. n = input('Ingresa numero de caracteres: ')
  3. counter = 0
  4. for i in p.split(' '):
  5.    if len(i)==n:
  6.        counter+=1
  7.  
  8. print'Hay %i palabras con %i letras' % (counter,n)
Se podría reemplazar los caractéres que no son letras, pero vaaaaa, es el método más corto :xD ... :P

Saludos


Título: Re: [Python] Las constante K.
Publicado por: Meta en 29 Octubre 2010, 15:47 pm
Muy buenas:

http://docs.python.org/library/stdtypes.html#str.split

Lo había hecho con C# buscando info por ahí y es así, pero se me adelantaron.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace letras
  7. {
  8.    class Program
  9.    {
  10.        static void Main(string[] args)
  11.        {
  12.            while (true)
  13.            {
  14.            Console.Title = "Hola";
  15.            Console.WriteLine("Introduce una frase:");
  16.            string cadena = Convert.ToString(Console.ReadLine());
  17.            Console.WriteLine("Introduce una constante k:");
  18.            int k = Convert.ToInt32(Console.ReadLine());
  19.  
  20.            foreach (string palabra in cadena.Split(" ".ToCharArray()))
  21.            {
  22.                if (palabra.Length == k)
  23.                {
  24.                    Console.WriteLine(palabra);
  25.                }
  26.            }
  27.  
  28.            Console.ReadKey(); // Retener la pantalla.
  29.            }
  30.        }
  31.    }
  32. }

Tu código no me da resultado.
Código
  1. s = raw_input("Ingrese una cadena: ")
  2. k = int(raw_input("Ingrese el valor de k: "))
  3. j = 0
  4.  
  5. for c in s:
  6.    if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
  7.        j += 1
  8.    else:
  9.        if k == j:
  10.            print "La cadena tiene por lo menos una palabra de ", k, " letras"
  11.            break
No me muestra nada en pantalla.

De
Edito:
No hay que poner Break o si no no funciona. Vi tu código y no es lo que pide. Pide algo como esto.


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 29 Octubre 2010, 16:06 pm
Lo ejecutaste haciendole doble click?


Título: Re: [Python] Las constante K.
Publicado por: Meta en 29 Octubre 2010, 16:11 pm
Este código:
Código
  1. p = raw_input('Ingresa frase: ')
  2. n = input('Ingresa numero de caracteres: ')
  3. counter = 0
  4. for i in p.split(' '):
  5.    if len(i)==n:
  6.        counter+=1
  7.  
  8. print'Hay %i palabras con %i letras' % (counter,n)
Citar
Ingresa frase: Una imagen vale mas que mil palabras
Ingresa numero de caracteres: 3
Hay 4 palabras con 3 letras
No es el que pide en el ejercicio. Funciona bien pero no es el que pide.

Para que se hagan una idea, hay que introducir una cadena y después k = 3 por poner un ejemplo.

Lo que hace es que si k = 3, sólo muestra en pantalla palabras que tienen 3 letras.

(http://www.subeimagenes.com/img/eeeeeeeeeeeeeeeee-5622.jpg)

Gracias su tiempo.


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 29 Octubre 2010, 16:15 pm
Segun lo que entendi del enunciado, lo unico que hay que haces es informar si alguna de las palabras de la cadena tienen k cantidad de caracteres.

Un saludo ;)


Título: Re: [Python] Las constante K.
Publicado por: Novlucker en 29 Octubre 2010, 16:17 pm
Yo creo que tu problema es de interpretación, donde dice que imprima las palabras? :xD

Saludos


Título: Re: [Python] Las constante K.
Publicado por: Meta en 29 Octubre 2010, 16:36 pm
(http://www.subeimagenes.com/img/wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww-5582.jpg)

Es verdad, y complicándome las neuronas por mi fallo. Disculpe ustedes.

Viendo el código otra vez.
Código
  1. s = raw_input("Ingrese una cadena: ")
  2. k = int(raw_input("Ingrese el valor de k: "))
  3. j = 0
  4.  
  5. for c in s:
  6.    if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
  7.        j += 1
  8.    else:
  9.        if k == j:
  10.            print "La cadena tiene por lo menos una palabra de ", k, " letras"
  11.            break

Citar
Ingrese una cadena: Una imagen vale mas que mil palabras.
Ingrese el valor de k: 3
La cadena tiene por lo menos una palabra de  3  letras

Hay 4 palabras de 3 letras y son: Una, mas, que y mil.

Este otro código está bien.
Citar
Ingresa frase: Una imagen vale mas que mil palabras
Ingresa numero de caracteres: 3
Hay 4 palabras con 3 letras


Título: Re: [Python] Las constante K.
Publicado por: Novlucker en 29 Octubre 2010, 16:43 pm
Sip, igual dije además lo de los caracteres que no son letras porque si por ejemplo terminas la frase con punto, te lo cuenta como parte de la última palabra :P

Saludos


Título: Re: [Python] Las constante K.
Publicado por: Meta en 29 Octubre 2010, 16:49 pm
Ammmm, al final hay una razón.
Gracias por decirlo para entenderlo. Gracias de nuevo por su tiempo a tod@s.


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 29 Octubre 2010, 16:59 pm
Devuelve que por lo menos hay una palabra de k letras, porque cuando encuentra una sale del bucle y no continua buscando :P

Un saludo


Título: Re: [Python] Las constante K.
Publicado por: Meta en 29 Octubre 2010, 17:51 pm
Por cierto. El ejercicio 169) no entiendo mucho. ¿Hay que hacer lo contrario?

(http://www.subeimagenes.com/img/jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj-5624.jpg)

Código
  1. p = raw_input('Ingresa frase: ')
  2. n = input('Ingresa numero de caracteres: ')
  3. counter = 0
  4. for i in p.split(' '):
  5.    if len(i)!=n:
  6.        counter+=1
  7.  
  8. print'Hay %i palabras con %i letras' % (counter,n)
Sólo cambié !=.


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 29 Octubre 2010, 18:39 pm
Lo que tenes que hacer es (tomando como ejemplo el codigo de Novlucker) una vez que tengas separada a la cadena, comparar que la longitud de todos los elementos de la lista sea igual a k.

Te dejo una idea de como lo podrias hacer :P

- Dividir la cadena (Dentro de una lista en este caso).
- Recorrer la lista comparando la longitud de los elementos con k.
- Si son iguales, aumentar en 1 el valor de un contador (Si fueran diferentes, salir del bucle).
- Fuera del bucle, comparar si el valor de contador es igual a la longitud de la lista.
- Si es verdadero, devolver un mensaje.

Creo que lo complique demasiado :xD

Un saludo


Título: Re: [Python] Las constante K.
Publicado por: Meta en 30 Octubre 2010, 00:12 am
¿Algo así?

Código
  1. p = raw_input('Ingresa frase: ')
  2. n = int(raw_input('Ingresa numero de caracteres: '))
  3.  
  4. flag = False
  5. for i in p.split(' '):
  6.    if len(i) == n:
  7.        flag = True
  8.        break
  9.  
  10. if flag:
  11.    print "Hay al menos una palabra de longitud", n
  12. else:
  13.    print "NO hay ninguna palabra de longitud", n


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 30 Octubre 2010, 00:32 am
Con ese codigo compruebas que en la cadena hay por lo menos una palabra de longitud k. Tenes que comprobar que todas tengan esa longitud.

Colocando un else y cambiando los mensajes de salida, funciona :P

Código
  1. p = raw_input('Ingresa frase: ')
  2. n = int(raw_input('Ingresa numero de caracteres: '))
  3.  
  4. flag = False
  5. for i in p.split(' '):
  6.    if len(i) == n:
  7.        flag = True
  8.    else:
  9.        flag = False
  10.        break
  11.  
  12. if flag:
  13.    print "Todas las palabras tienen ", n, " longitud"
  14. else:
  15.    print "No todas las palabras tienen ", n, " longitud"

Un saludo ;)


Título: Re: [Python] Las constante K.
Publicado por: Meta en 30 Octubre 2010, 11:09 am
El resultado me da esto:
Citar
Ingresa frase: Una imagen vale mas que mil palabas
Ingresa numero de caracteres: 3
No todas las palabras tienen  3  longitud

¿No debería dar algo así como resultado?
Citar
Palabra    -> Longitud
Una        -> 3
imagen     -> 6
vale       -> 4
mas        -> 3
que        -> 3
mil        -> 3
palabras   -> 8


Título: Re: [Python] Las constante K.
Publicado por: criskapunk en 30 Octubre 2010, 14:18 pm
Segun el enunciado, lo unico que hay que hacer es informar si todas las palabras tienen longitud k. En ningun lado dice sobre mostrar la cantidad de letras de cada palabra.

Un saludo ;)


Título: Re: [Python] Las constante K.
Publicado por: Meta en 30 Octubre 2010, 16:44 pm
Entonce tu código modificado está muy bien, es lo que pide.


Título: Re: [Python] Las constante K.
Publicado por: dj_murci en 3 Noviembre 2010, 12:01 pm
hola chicos.
soy nuevo en este foro.
Estoy en un curso de programacion con python y estamos realizando muchos ejercicos de los planteados aqui.

A partir de ahora intentare ayudar a los demas e ir publicando tambien mis dudas y soluciones.

nada mas, voy a darle caña al ejercicio 129 a vre que pasa jajaja
hasta pronto amigod