Test Foro de elhacker.net SMF 2.1

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

CitarCalcule 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:
CitarDiseñ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.
CitarNo 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 (python) [Seleccionar]
lista = ["mesa", "Silla", "nevera", "Cuadro", "alfombra"]
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:

CitarDiseñ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 (python) [Seleccionar]
# Introducir datos a la variable.
palabra_1 = raw_input('Introduce primera palabra: ')
palabra_2 = raw_input('Introduce segunda palabra: ')
palabra_3 = raw_input('Introduce tercera palabra: ')
palabra_4 = raw_input('Introduce cuarta palabra: ')
palabra_5 = raw_input('Introduce quinta palabra: ')


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

Código (python) [Seleccionar]
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 (python) [Seleccionar]
if palabra_1 < palabra_2:
   print palabra_1
if palabra_2 < palabra_3:
   print palabra_2
if palabra_3 < palabra_4:
   print palabra_3
if palabra_4 < palabra_5:
   print palabra_4


Edito:

Código (python) [Seleccionar]
# Introducir datos a la variable.
palabra_1 = raw_input('Introduce primera palabra: ')
palabra_2 = raw_input('Introduce segunda palabra: ')
palabra_3 = raw_input('Introduce tercera palabra: ')
palabra_4 = raw_input('Introduce cuarta palabra: ')
palabra_5 = raw_input('Introduce quinta palabra: ')

if palabra_1 < palabra_2:
   var1 = palabra_1
if palabra_2 < palabra_3:
   var2 = palabra_2
if palabra_3 < palabra_4:
   var3 = palabra_3
if palabra_4 < palabra_5:
   var4 = palabra_4
if var1 < var3:
   h1 = var1
if var2 < var4:
   h2 = var2
else:
   h3 = var5


No funciona porque sale este error.
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 (python) [Seleccionar]
# Introducir datos a la variable.
palabra_1 = raw_input('Introduce primera palabra: ')
palabra_2 = raw_input('Introduce segunda palabra: ')
palabra_3 = raw_input('Introduce tercera palabra: ')
palabra_4 = raw_input('Introduce cuarta palabra: ')
palabra_5 = raw_input('Introduce quinta palabra: ')

var1 = palabra_1
var2 = palabra_2
var3 = palabra_3
var4 = palabra_4
var5 = palabra_5

if palabra_1 < palabra_2:
    var1 = palabra_1
if palabra_2 < palabra_3:
    var2 = palabra_2
if palabra_3 < palabra_4:
    var3 = palabra_3
if palabra_4 < palabra_5:
    var4 = palabra_4
if var1 < var3:
    h1 = var1
if var2 < var4:
    h2 = var2
else:
    h3 = var5

    print var1, var2, var3, var4, var5


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

CitarIntroduce 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 (python) [Seleccionar]
palabra_1 = raw_input('Introduce primera palabra: ')
palabra_2 = raw_input('Introduce segunda palabra: ')
palabra_3 = raw_input('Introduce tercera palabra: ')
palabra_4 = raw_input('Introduce cuarta palabra: ')
palabra_5 = raw_input('Introduce quinta palabra: ')

# Variable que guarda en la primera palabra.
minimo =palabra_1

# Condiciones.
if palabra_2.lower() < minimo:
    minimo = palabra_2
if palabra_3.lower() < minimo:
    minimo = palabra_3
if palabra_4.lower() < minimo:
    minimo = palabra_4
if palabra_5.lower() < minimo:
    minimo = palabra_5

# Visualiza en pantalla la menor de la palabras.
    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.
# -*- 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 (python,16,17,18,19) [Seleccionar]
# -*- 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()
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 (python) [Seleccionar]
a = raw_input ('dame la primera palabra: ')
b = raw_input ('dame la segunda palabra: ')
c = raw_input ('dame la tercera palabra: ')
d = raw_input ('dame la cuarta palabra: ')
e = raw_input ('dame la quinta palabra: ')

a = a.lower()
b = b.lower()
c = c.lower()
d = d.lower()
e = e.lower()
if a == ' ' or b == ' ' or c == ' ' or d == ' ' or e == ' ' :
 print ' uno de los caracteres no es una palabra '
 
elif a < b and a < c and a < d and a < e :
 print ' La menor es ' , a
 
elif b < a and b < c and b < d and b < e :
 print ' La menor es ' , b
 
elif c < a and c < b and c < d and c < e :
 print ' La menor es ' , c
 
elif d < a and d < c and d < c and d < e :
 print ' La menor es ' , d
 
elif e < a and e < b and e < c and e < d :
 print ' La menor es ' , e