Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 6 Octubre 2010, 19:19 pm



Título: [Python] Ordenar palabras
Publicado por: Meta en 6 Octubre 2010, 19:19 pm
Hola:

Quiero entender exactamente que es lo que hay que hacer. El problema hay que hacerlo en Python 2.x (no el 3.x).

Citar
Calcule la < de cinco palabras, es decir, la primera palabra
de las cinco en orden del abecedario. No se acepta que las mayúsculas sean ((alfabéticamente))
menores que las minúsculas. O sea, ’juanita’ es menor que ’Juanito’.

En la parte que dice:
Citar
Diseña un programa que calcule la menor de cinco palabras

Por ejemplo, no se si es lo que creo. Debo hacer un programa que deba escribir 5 palabras, no letras, que puede ser:

mesa, Silla, nevera, Cuadro, alfombra.

(Fijarse que Silla y Cuadro tiene la primera letra mayúscula).

A veces creo que se refiere a una palabra con 5 letras y que hay que resolver las letras de la palabra en orden alfabeto.

Creyendo más en lo primero. Introduzco las 5 palabras como indiqué arriba. Guardo en a = raw_input("Introduce la primera palabra: ") así hasta llegar e = raw_input("Introduce la quinta palabra: ").

¿Supuestamente el resultado debe quedar así en orden alfabético de "a" hasta la "z"?

alfombra
Cuadro
mesa
nevera
Silla

Sin contar lo otro que te cuenta el problema.
Citar
No aceptaremos que las mayúsculas sean ((alfabéticamente))
menores que las minúsculas. O sea, ’pepita’ es menor que ’Pepito’.

Aquí tendré que hacer más cosas. Lo qu eme interesa es lo primero entender que es lo que hay que hacer exactamente. Ya me encargaré si me sale ese problema. Estoy aprendiendo a programar con Python.

http://3.bp.blogspot.com/_p10GWKDC_aw/TCLE4jzQMMI/AAAAAAAABq8/v7MhUMTcGcA/s1600/ASCII1.GIF
http://2.bp.blogspot.com/_p10GWKDC_aw/TCLE7eUw4HI/AAAAAAAABrE/UaKf7iMsczQ/s1600/ascii2.gif

Saludo.


Título: Re: Ordenar palabras
Publicado por: Novlucker en 6 Octubre 2010, 19:36 pm
Yo digo que es

alfombra
mesa
nevera
Cuadro
Silla

La verdad que no esta muy bien planteado :-\

Saludos


Título: Re: Ordenar palabras
Publicado por: Meta en 6 Octubre 2010, 19:50 pm
¿No será?

alfombra
mesa
nevera
Cuadro
Silla

Ya que la C de Cuadro va antes que la S de Silla. Digo, no lo se.

¿No está bien planteado el anuncio del problema o yo?

JEjeje.


Título: Re: Ordenar palabras
Publicado por: Novlucker en 6 Octubre 2010, 19:53 pm
Si!, justo ahora lo miré y venía a cambiarlo :xD
Así como dices tu, pero coincido en que esta mal planteado el enunciado :-X

Saludos


Título: Re: Ordenar palabras
Publicado por: Meta en 6 Octubre 2010, 20:11 pm
Hola:

Parece ser que hay que ordenar las palabras. Se que en Excell lo hace tan fácil como complejo en Python.

Me imagino que mirará la tabla ASCII en cada palabra.

1) ¿Sumará los decimales en total de cada palabra?

2) Me imagino que debe comparar algo de una palabra a otra palabra y será letra por letra de cada palabra, si es así. ¿Cómo se hace? ¿Alguna idea?

3) Parece que hay que usar muchos <>= or and not, etc. Hay que jugar como eso. ¿Lo primero es cómo hacerlo?

No tengo las ideas claras para empezar a programar.

Saludo.


Título: Re: Ordenar palabras
Publicado por: Meta en 6 Octubre 2010, 20:42 pm
He buscado por ahí y se hace así:

Código
  1. lista = ["mesa", "Silla", "nevera", "Cuadro", "alfombra"]
  2. print max(*lista, key=lambda x: x.lower())

Debo aprender hacerlo sólo con If, else, elif, <, <=, >, or, and, etc...

¿A qué ya no es tan fácil así?

Es para tener soltura con ella, ya que estoy aprendiendo.


Título: Re: Ordenar palabras
Publicado por: Novlucker en 6 Octubre 2010, 20:53 pm
A si, puedes hacerlo con expresiones lambda, con sort (lista.sort()), con un for, etc.
Digamos que la del if vuelve a ser la peor de todas :-\

Saludos


Título: Re: Ordenar palabras
Publicado por: Meta en 7 Octubre 2010, 00:58 am
Perdón, el ejercico es este:

Citar
Diseña un programa que calcule la menor de cinco palabras dadas; es decir, la primera palabra de las cinco en orden alfabético. Aceptaremos que las mayúsculas son "alfabéticamente" menores que las minúsculas, de acuerdo con la tabla ASCII.

Por ahora hay que hacer la entrada de datos.

Código
  1. # Introducir datos a la variable.
  2. palabra_1 = raw_input('Introduce primera palabra: ')
  3. palabra_2 = raw_input('Introduce segunda palabra: ')
  4. palabra_3 = raw_input('Introduce tercera palabra: ')
  5. palabra_4 = raw_input('Introduce cuarta palabra: ')
  6. palabra_5 = raw_input('Introduce quinta palabra: ')

Me imagino que habrá que usar algo de eso todo el rato, algo así:

Código
  1. if palabra_1 < palabra_2 < palabra_3 < palabra_4 < palabra_5:

o este otro pero hay que mejorarlo de alguna manera, hay que mostrar todos las palabras, no las que salgan.

Código
  1. if palabra_1 < palabra_2:
  2.    print palabra_1
  3. if palabra_2 < palabra_3:
  4.    print palabra_2
  5. if palabra_3 < palabra_4:
  6.    print palabra_3
  7. if palabra_4 < palabra_5:
  8.    print palabra_4

Edito:

Código
  1. # Introducir datos a la variable.
  2. palabra_1 = raw_input('Introduce primera palabra: ')
  3. palabra_2 = raw_input('Introduce segunda palabra: ')
  4. palabra_3 = raw_input('Introduce tercera palabra: ')
  5. palabra_4 = raw_input('Introduce cuarta palabra: ')
  6. palabra_5 = raw_input('Introduce quinta palabra: ')
  7.  
  8. if palabra_1 < palabra_2:
  9.    var1 = palabra_1
  10. if palabra_2 < palabra_3:
  11.    var2 = palabra_2
  12. if palabra_3 < palabra_4:
  13.    var3 = palabra_3
  14. if palabra_4 < palabra_5:
  15.    var4 = palabra_4
  16. if var1 < var3:
  17.    h1 = var1
  18. if var2 < var4:
  19.    h2 = var2
  20. else:
  21.    h3 = var5

No funciona porque sale este error.
Código:
Traceback (most recent call last):
  File "/home/acaymo/NetBeansProjects/tema4e2a4/src/tema4e2a4.py", line 37, in <module>
    if var1 < var3:
NameError: name 'var1' is not defined

Cosa que es normal porque aún no he definido las variables.


Edito 2:
Código
  1. # Introducir datos a la variable.
  2. palabra_1 = raw_input('Introduce primera palabra: ')
  3. palabra_2 = raw_input('Introduce segunda palabra: ')
  4. palabra_3 = raw_input('Introduce tercera palabra: ')
  5. palabra_4 = raw_input('Introduce cuarta palabra: ')
  6. palabra_5 = raw_input('Introduce quinta palabra: ')
  7.  
  8. var1 = palabra_1
  9. var2 = palabra_2
  10. var3 = palabra_3
  11. var4 = palabra_4
  12. var5 = palabra_5
  13.  
  14. if palabra_1 < palabra_2:
  15.    var1 = palabra_1
  16. if palabra_2 < palabra_3:
  17.    var2 = palabra_2
  18. if palabra_3 < palabra_4:
  19.    var3 = palabra_3
  20. if palabra_4 < palabra_5:
  21.    var4 = palabra_4
  22. if var1 < var3:
  23.    h1 = var1
  24. if var2 < var4:
  25.    h2 = var2
  26. else:
  27.    h3 = var5
  28.  
  29.    print var1, var2, var3, var4, var5

Me da este resultado sin ordenar las palabras, se qeudan como está.Voy a seguir chasmusquearme las neuronas.

Citar
Introduce primera palabra: mesa
Introduce segunda palabra: Silla
Introduce tercera palabra: nevera
Introduce cuarta palabra: Cuadro
Introduce quinta palabra: alfombra
mesa Silla nevera Cuadro alfombra


Título: Re: [Python] Ordenar palabras
Publicado por: Meta en 11 Octubre 2010, 05:16 am
He intentado hacer algo como esto:

Parece que no tengo lógica.

Código
  1. palabra_1 = raw_input('Introduce primera palabra: ')
  2. palabra_2 = raw_input('Introduce segunda palabra: ')
  3. palabra_3 = raw_input('Introduce tercera palabra: ')
  4. palabra_4 = raw_input('Introduce cuarta palabra: ')
  5. palabra_5 = raw_input('Introduce quinta palabra: ')
  6.  
  7. # Variable que guarda en la primera palabra.
  8. minimo =palabra_1
  9.  
  10. # Condiciones.
  11. if palabra_2.lower() < minimo:
  12.    minimo = palabra_2
  13. if palabra_3.lower() < minimo:
  14.    minimo = palabra_3
  15. if palabra_4.lower() < minimo:
  16.    minimo = palabra_4
  17. if palabra_5.lower() < minimo:
  18.    minimo = palabra_5
  19.  
  20. # Visualiza en pantalla la menor de la palabras.
  21.    print "\n" + minimo

Llevo un tiempito y nada.


Título: Re: [Python] Ordenar palabras
Publicado por: ace332 en 11 Octubre 2010, 20:16 pm
Creo que Python hace las comparaciones de cadenas tal como lo pide el ejercicio:
Citar
... las mayúsculas son "alfabeticamente" menores que las minúsculas, de acuerdo con la tabla ASCII.

por consiguiente no es necesario usar lower para convertir las cadenas a minúsculas al efectuar las comparaciones..


Título: Re: [Python] Ordenar palabras
Publicado por: Canariolp21 en 15 Noviembre 2010, 01:42 am
Buenas noches Meta, yo lo he hecho de esta manera, espero te sirva.
Código:
# -*- coding: ISO-8859-1 -*-
#         Codificacion de caracteres. Al tener el programa caracteres no ASCII
#         hace falta indicarle el tipo de codificacion empleado.
#Programa:   Ejercicio_10.py
#Proposito.- Programa que lee 5 palabras y dice cual es la menor de ellas.
#            No se aceptan que las Mayúsculas sean menores que las Minúsculas.
#Autor:      Luis Alberto Rouco Ramirez
#Fecha:      15 de Ocubre de 2010

# Importar librerias del sistema
import os

# Declarar variables
sistema = (os.name)
       
if sistema=="nt":
    os.system("cls")
else:
    os.system("clear")
           
#Introduccion del numero y extraccion del primer caracter
letra1=raw_input("Escribe la primera palabra: ")
letra1_1=letra1.lower()
letra2=raw_input("Escribe la segunda palabra: ")
letra2_1=letra2.lower()
letra3=raw_input("Escribe la tercera palabra: ")
letra3_1=letra3.lower()
letra4=raw_input("Escribe la cuarta palabra: ")
letra4_1=letra4.lower()
letra5=raw_input("Escribe la quinta palabra: ")
letra5_1=letra5.lower()
       
#CONDICION PARA QUE NO SE PONGA OTRA COSA QUE NO SEA UNA PALABRA Y RESOLUCIÓN

if letra1_1<letra2_1:
    palabra_final=letra1
else:
    palabra_final=letra2
if palabra_final<letra3_1:
    palabra_final=palabra_final
else:
    palabra_final=letra3
if palabra_final<letra4_1:
    palabra_final=palabra_final
else:
    palabra_final=letra4
if palabra_final<letra5_1:
    palabra_final=palabra_final
else:
    palabra_final=letra5
   
print 'La palabra mas chica es: ' + palabra_final
print 'Gracias por usar este programa. Pulse una tecla para salir.'
raw_input()
quit()

Un Saludo
 


Título: Re: [Python] Ordenar palabras
Publicado por: Meta en 15 Noviembre 2010, 04:08 am
Menudo trabajo. Gracias, lo voy a probar bajo Linux, porque el tuyo parece hecho con Windows.


Título: Re: [Python] Ordenar palabras
Publicado por: Shell Root en 15 Noviembre 2010, 18:44 pm
Porque dices que parece que estuviera en WIN$?
Por eso verifica el S.O y ejecuta comando.

Código
  1. # -*- coding: ISO-8859-1 -*-
  2. #         Codificacion de caracteres. Al tener el programa caracteres no ASCII
  3. #         hace falta indicarle el tipo de codificacion empleado.
  4. #Programa:   Ejercicio_10.py
  5. #Proposito.- Programa que lee 5 palabras y dice cual es la menor de ellas.
  6. #            No se aceptan que las Mayúsculas sean menores que las Minúsculas.
  7. #Autor:      Luis Alberto Rouco Ramirez
  8. #Fecha:      15 de Ocubre de 2010
  9.  
  10. # Importar librerias del sistema
  11. import os
  12.  
  13. # Declarar variables
  14. sistema = (os.name)
  15.  
  16. if sistema=="nt":
  17.    os.system("cls")
  18. else:
  19.    os.system("clear")
  20.  
  21. #Introduccion del numero y extraccion del primer caracter
  22. letra1=raw_input("Escribe la primera palabra: ")
  23. letra1_1=letra1.lower()
  24. letra2=raw_input("Escribe la segunda palabra: ")
  25. letra2_1=letra2.lower()
  26. letra3=raw_input("Escribe la tercera palabra: ")
  27. letra3_1=letra3.lower()
  28. letra4=raw_input("Escribe la cuarta palabra: ")
  29. letra4_1=letra4.lower()
  30. letra5=raw_input("Escribe la quinta palabra: ")
  31. letra5_1=letra5.lower()
  32.  
  33. #CONDICION PARA QUE NO SE PONGA OTRA COSA QUE NO SEA UNA PALABRA Y RESOLUCIÓN
  34.  
  35. if letra1_1<letra2_1:
  36.    palabra_final=letra1
  37. else:
  38.    palabra_final=letra2
  39. if palabra_final<letra3_1:
  40.    palabra_final=palabra_final
  41. else:
  42.    palabra_final=letra3
  43. if palabra_final<letra4_1:
  44.    palabra_final=palabra_final
  45. else:
  46.    palabra_final=letra4
  47. if palabra_final<letra5_1:
  48.    palabra_final=palabra_final
  49. else:
  50.    palabra_final=letra5
  51.  
  52. print 'La palabra mas chica es: ' + palabra_final
  53. print 'Gracias por usar este programa. Pulse una tecla para salir.'
  54. raw_input()
  55. quit()


Título: Re: [Python] Ordenar palabras
Publicado por: facu_m en 24 Noviembre 2010, 05:39 am
yo hice lo siguiente.creo que es la manera mas facil utilizando la funcion lower para que todas las palabras esten siempre en minuscula

Código
  1. a = raw_input ('dame la primera palabra: ')
  2. b = raw_input ('dame la segunda palabra: ')
  3. c = raw_input ('dame la tercera palabra: ')
  4. d = raw_input ('dame la cuarta palabra: ')
  5. e = raw_input ('dame la quinta palabra: ')
  6.  
  7. a = a.lower()
  8. b = b.lower()
  9. c = c.lower()
  10. d = d.lower()
  11. e = e.lower()
  12. if a == ' ' or b == ' ' or c == ' ' or d == ' ' or e == ' ' :
  13.  print ' uno de los caracteres no es una palabra '
  14.  
  15. elif a < b and a < c and a < d and a < e :
  16.  print ' La menor es ' , a
  17.  
  18. elif b < a and b < c and b < d and b < e :
  19.  print ' La menor es ' , b
  20.  
  21. elif c < a and c < b and c < d and c < e :
  22.  print ' La menor es ' , c
  23.  
  24. elif d < a and d < c and d < c and d < e :
  25.  print ' La menor es ' , d
  26.  
  27. elif e < a and e < b and e < c and e < d :
  28.  print ' La menor es ' , e