Test Foro de elhacker.net SMF 2.1

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 (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
    cambios = 0
    for i in range(1, len(cadena)):
        if cadena[i] == ' ' and cadena[i-1] != ' ':
            cambios = cambios + 1

    if cadena[-1] == ' ':
        cambios = cambios - 1

    palabras = cambios + 1
    print 'Palabras:', palabras, 'palabras y', i, 'carácteres.'

    cadena = raw_input('Escribe una frase: ')


Su resultado es este.
CitarEscribe 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:

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:
Citarcadena = "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 (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
   cambios = 0
   anterior = ' '
   for i in cadena:
       if caracter == ' ' and caracter != ' ':
           cambios + 1
       anterior = caracter

   if cadena[-1] == ' ':
       cambios = cambios - 1

   palabras = cambios + 1
   print 'Palabras:', palabras, 'palabras y', i, 'carácteres.'
   print 'cambios', cambios


   cadena = raw_input('Escribe una frase: ')


Me da este error.
CitarTraceback (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 (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
    cambios = 0
    anterior = ' '
    for caracter in cadena:
        if caracter == ' ' and anterior != ' ':
            cambios += 1
        anterior = caracter

    if cadena[-1] == ' ':
        cambios = cambios - 1

    palabras = cambios + 1
    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 (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
    cambios = 0
    anterior = ' '
    for caracter in cadena:
        if caracter == ' ' and anterior != ' ':
            cambios += 1
        anterior = caracter

    if cadena[-1] == ' ':
        cambios = cambios - 1

    palabras = cambios + 1
    print 'Palabras:', palabras
    print 'Cambios',cambios
    print 'Caracter',caracter
    print 'Cadena',cadena


    cadena = raw_input('Escribe una frase: ')


Su resultado es este:
CitarEscribe 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 (python,6) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
   cambios = 0
   anterior = ' '
   for caracter in cadena:
       if caracter == ' ' and anterior != ' ':
           cambios += 1
       anterior = caracter

   if cadena[-1] == ' ':
       cambios = cambios - 1

   palabras = cambios + 1
   print 'Palabras:', palabras
   print 'Cambios',cambios
   print 'Caracter',caracter
   print 'Cadena',cadena


   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
Cita de: Meta en 28 Octubre 2010, 22:02 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 (python,2) [Seleccionar]

print "Prueba"
print "Prueba"
print "Prueba"
print "Prueba"


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
Cita de: criska 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 (python,4) [Seleccionar]

print "Prueba"
print "Prueba"
print "Prueba"
print "Prueba"


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 (python,2,12,13) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
k = int(raw_input('Introduces un número para la constante K: '))

while cadena != '':
   cambios = 0
   anterior = ' '
   for caracter in cadena:
       if caracter == ' ' and anterior != ' ':
           cambios += 1
       anterior = caracter

   if cambios == k:
       print cambios [cadena]
       
   if cadena[-1] == ' ':
       cambios = cambios - 1

   palabras = cambios + 1
   print 'Palabras:', palabras
   print 'Cambios', cambios
   print 'Caracter', caracter
   print 'Cadena', cadena

   cadena = raw_input('Escribe una frase: ')


Otro intento raro.
Código (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
k = int(raw_input('Introduces un número para la constante K: '))

while cadena != '':
   cambios = 0
   anterior = ' '
   for caracter in cadena:
       if caracter == ' ' and anterior != ' ':
           cambios += 1
       anterior = caracter

   if cadena[-k] >= 0:
       cambios = cambios - k
       
#    if cadena[-1] == ' ':
#        cambios = cambios - 1

   palabras = cambios + 1
   print 'Palabras:', palabras
   print 'Cambios', cambios
   print 'Caracter', caracter
   print 'Cadena', cadena

   cadena = raw_input('Escribe una frase: ')









Edito:

Este ejercicio se me resiste.

Voy a ponerlo más fácil.
Código (python) [Seleccionar]
cadena = raw_input('Escribe una frase: ')
while cadena != '':
   blancos = 0
   for caracter in cadena:
       if blancos == ' ':
           blancos += 1
   palabras =blancos + 1 # Hay una palabra mas que blancos.
   print 'Palabra:', palabras

   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 (python) [Seleccionar]
s = raw_input("Ingrese una cadena: ")
k = int(raw_input("Ingrese el valor de k: "))
j = 0

for c in s:
    if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
        j += 1
    else:
        if k == j:
            print "La cadena tiene por lo menos una palabra de ", k, " letras"
            break


Un saludo ;)

Título: Re: [Python] Las constante K.
Publicado por: Novlucker en 29 Octubre 2010, 13:57 PM
Código (python) [Seleccionar]
p = raw_input('Ingresa frase: ')
n = input('Ingresa numero de caracteres: ')
counter = 0
for i in p.split(' '):
    if len(i)==n:
        counter+=1

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 (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace letras
{
   class Program
   {
       static void Main(string[] args)
       {
           while (true)
           {
           Console.Title = "Hola";
           Console.WriteLine("Introduce una frase:");
           string cadena = Convert.ToString(Console.ReadLine());
           Console.WriteLine("Introduce una constante k:");
           int k = Convert.ToInt32(Console.ReadLine());

           foreach (string palabra in cadena.Split(" ".ToCharArray()))
           {
               if (palabra.Length == k)
               {
                   Console.WriteLine(palabra);
               }
           }

           Console.ReadKey(); // Retener la pantalla.
           }
       }
   }
}


Tu código no me da resultado.
Código (python,11) [Seleccionar]
s = raw_input("Ingrese una cadena: ")
k = int(raw_input("Ingrese el valor de k: "))
j = 0

for c in s:
   if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
       j += 1
   else:
       if k == j:
           print "La cadena tiene por lo menos una palabra de ", k, " letras"
           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 (python) [Seleccionar]
p = raw_input('Ingresa frase: ')
n = input('Ingresa numero de caracteres: ')
counter = 0
for i in p.split(' '):
   if len(i)==n:
       counter+=1

print'Hay %i palabras con %i letras' % (counter,n)

CitarIngresa 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 (python) [Seleccionar]
s = raw_input("Ingrese una cadena: ")
k = int(raw_input("Ingrese el valor de k: "))
j = 0

for c in s:
    if (ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122):
        j += 1
    else:
        if k == j:
            print "La cadena tiene por lo menos una palabra de ", k, " letras"
            break


CitarIngrese 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.
CitarIngresa 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 (python,5) [Seleccionar]
p = raw_input('Ingresa frase: ')
n = input('Ingresa numero de caracteres: ')
counter = 0
for i in p.split(' '):
    if len(i)!=n:
        counter+=1

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 (python) [Seleccionar]
p = raw_input('Ingresa frase: ')
n = int(raw_input('Ingresa numero de caracteres: '))

flag = False
for i in p.split(' '):
    if len(i) == n:
        flag = True
        break

if flag:
    print "Hay al menos una palabra de longitud", n
else:
    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 (python,8,9,10,13,15) [Seleccionar]
p = raw_input('Ingresa frase: ')
n = int(raw_input('Ingresa numero de caracteres: '))

flag = False
for i in p.split(' '):
    if len(i) == n:
        flag = True
    else:
        flag = False
        break
   
if flag:
    print "Todas las palabras tienen ", n, " longitud"
else:
    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:
CitarIngresa 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?
CitarPalabra    -> 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