[Python] Las constante K.

Iniciado por Meta, 28 Octubre 2010, 15:18 PM

0 Miembros y 5 Visitantes están viendo este tema.

Meta

#10
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í.

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).
...
...
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

criskapunk

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 ;)


Novlucker

#12
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

#13
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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

criskapunk

Lo ejecutaste haciendole doble click?

Meta

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.



Gracias su tiempo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

criskapunk

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 ;)

Novlucker

Yo creo que tu problema es de interpretación, donde dice que imprima las palabras? :xD

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta



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
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein