Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 3 Noviembre 2010, 02:54 am



Título: [Python] - Ordenal palabras.
Publicado por: Meta en 3 Noviembre 2010, 02:54 am
:)

Ver imagen. (http://www.subeimagenes.com/img/zoom-5962.jpg)

He intentado ordenas las palabras alfabéticamente, al darme cuenta, sólo lo hace por letra.

Código
  1. cadena = raw_input('Introduce palabra alfabética o no: ')
  2.  
  3. dato = ''
  4. for caracter in cadena:
  5.    if (cadena >= 'A' and cadena <= 'Z') or (cadena >= 'a' and cadena <= 'z'):
  6.        print 'Es una palabra alfabética.'
  7.    else:
  8.        print 'No es una palabra alfabética.'

;)


Título: Re: [Python] - Ordenal palabras.
Publicado por: VirajeCR en 3 Noviembre 2010, 03:02 am
Lo que deberías hacer es comparar la actual letra con la siguiente, si la actual es menor que la siguiente la palabra es alfabética si no no.


Título: Re: [Python] - Ordenal palabras.
Publicado por: Meta en 3 Noviembre 2010, 03:25 am
¿Cómo haces eso?
¿Todo el rato con if else o elif?

Sólo se me ocurre eso y me puedo pegar un pedazo de código enorme.


Título: Re: [Python] - Ordenal palabras.
Publicado por: VirajeCR en 3 Noviembre 2010, 05:53 am
Qué tal algo así.

Código:
import sys

myString = raw_input('Introduce una palabra alfabetica: ')

charA = myString[0]

for charB in myString[1:]:
    if charA > charB:
        print "La palabra no es alfabetica"
        sys.exit(1)

print "La palabra es alfabetica"

Perdón si está muy mal hecho, pero no soy programado en python.

Saludos.


Título: Re: [Python] - Ordenal palabras.
Publicado por: 43H4FH44H45H4CH49H56H45H en 3 Noviembre 2010, 08:12 am
Puede ser de esta forma:
Código
  1. #Python3
  2. def isAlfab(palabra):
  3.    for x in range(len(palabra)):
  4.        if x>0:
  5.            if ord(palabra[x])<ord(palabra[x-1]):
  6.                return False
  7.    return True
  8.  
  9. while True:
  10.    palabra = input("Introduce: ")
  11.    if isAlfab(palabra):
  12.        print("si es una palabra alfabetica")
  13.    else:
  14.        print("no es una palabra alfabetica")
  15.    continuar = input("Desea continuar? s/cualquier otro: ")
  16.    if continuar.lower() != 's':
  17.        break
  18. print("Saliendo del programa")

pero hay que probarlo...


Título: Re: [Python] - Ordenal palabras.
Publicado por: Meta en 3 Noviembre 2010, 10:13 am
¿Por qué pones un corchete y un 0 en el medio?

Código
  1. import sys
  2.  
  3. myString = raw_input('Introduce una palabra alfabetica: ')
  4.  
  5. charA = myString[0]
  6.  
  7. for charB in myString[1:]:
  8.    if charA > charB:
  9.        print "La palabra no es alfabetica"
  10.        sys.exit(1)
  11.  
  12. print "La palabra es alfabetica"

Aquí abajo no estiendo esta parte.
myString[1:]:

Código
  1. import sys
  2.  
  3. myString = raw_input('Introduce una palabra alfabetica: ')
  4.  
  5. charA = myString[0]
  6.  
  7. for charB in myString[1:]:
  8.    if charA > charB:
  9.        print "La palabra no es alfabetica"
  10.        sys.exit(1)
  11.  
  12. print "La palabra es alfabetica"


Título: Re: [Python] - Ordenal palabras.
Publicado por: Novlucker en 3 Noviembre 2010, 11:38 am
Porque los strings también son arrays/listas, así que el índice cero es el primer caracter.
[1:] es para indicar que se toman los caracteres que van desde el índice 1 hasta el último.
Digamos que es algo así:
Citar
string = Novlucker
string[0] = N
string[1:] = ovlucker

Saludos


Título: Re: [Python] - Ordenal palabras.
Publicado por: Meta en 3 Noviembre 2010, 11:51 am
Ok. Aún no he llegado la parte de usar listas. Ya decía yo que no lo conozco.

En el libro http://marmota.act.uji.es/mtp/pdf/python.pdf voy por la página 159.

Como no lo ha explicado aún, te pide en el ejercicio que uses Cadenes, no listas Lista es para más delante. ;)


Título: Re: [Python] - Ordenal palabras.
Publicado por: Meta en 5 Noviembre 2010, 01:21 am
Puede ser de esta forma:
Código
  1. #Python3
  2. def isAlfab(palabra):
  3.    for x in range(len(palabra)):
  4.        if x>0:
  5.            if ord(palabra[x])<ord(palabra[x-1]):
  6.                return False
  7.    return True
  8.  
  9. while True:
  10.    palabra = input("Introduce: ")
  11.    if isAlfab(palabra):
  12.        print("si es una palabra alfabetica")
  13.    else:
  14.        print("no es una palabra alfabetica")
  15.    continuar = input("Desea continuar? s/cualquier otro: ")
  16.    if continuar.lower() != 's':
  17.        break
  18. print("Saliendo del programa")

pero hay que probarlo...

Lo he probado y adaptado al Python 2.6.

Código
  1. def isAlfab(palabra):
  2.    for x in range(len(palabra)):
  3.        if x>0:
  4.            if ord(palabra[x])<ord(palabra[x-1]):
  5.                return False
  6.    return True
  7.  
  8. while True:
  9.    palabra = raw_input("Introduce: ")
  10.    if isAlfab(palabra):
  11.        print("si es una palabra alfabetica")
  12.    else:
  13.        print("no es una palabra alfabetica")
  14.    continuar = raw_input("Desea continuar? s/cualquier otro: ")
  15.    if continuar.lower() != 's':
  16.        break
  17. print "Saliendo del programa"

Es preferible hacerlo con un while en vez de preguntar si quiero continuar. Que siempre continúe.


Título: Re: [Python] - Ordenal palabras.
Publicado por: 43H4FH44H45H4CH49H56H45H en 5 Noviembre 2010, 04:24 am
Código
  1. import sys
  2.  
  3. myString = raw_input('Introduce una palabra alfabetica: ')
  4.  
  5. charA = myString[0]
  6.  
  7. for charB in myString[1:]:
  8.    if charA > charB:
  9.        print "La palabra no es alfabetica"
  10.        sys.exit(1)
  11.  
  12. print "La palabra es alfabetica"

Probaste ese code? porque si introduzco una cadena como ABCDFA o abcdea me devuelve que es alfabetica  :huh:

Lo he probado y adaptado al Python 2.6.

Código
  1. def isAlfab(palabra):
  2.    for x in range(len(palabra)):
  3.        if x>0:
  4.            if ord(palabra[x])<ord(palabra[x-1]):
  5.                return False
  6.    return True
  7.  
  8. while True:
  9.    palabra = raw_input("Introduce: ")
  10.    if isAlfab(palabra):
  11.        print("si es una palabra alfabetica")
  12.    else:
  13.        print("no es una palabra alfabetica")
  14.    continuar = raw_input("Desea continuar? s/cualquier otro: ")
  15.    if continuar.lower() != 's':
  16.        break
  17. print "Saliendo del programa"

Es preferible hacerlo con un while en vez de preguntar si quiero continuar. Que siempre continúe.

Lo probaste con varias cadenas para ver si funciona completamente  :huh: porque solo probe un poco  :o
Respecto al while, es por costumbre  :P


Título: Re: [Python] - Ordenal palabras.
Publicado por: Meta en 5 Noviembre 2010, 13:06 pm
Si funciona así.
Código
  1. def isAlfab(palabra):
  2.    for x in range(len(palabra)):
  3.        if x>0:
  4.            if ord(palabra[x])<ord(palabra[x-1]):
  5.                return False
  6.    return True
  7.  
  8. while True:
  9.    palabra = raw_input("Introduce: ")
  10.    if isAlfab(palabra):
  11.        print("si es una palabra alfabetica")
  12.    else:
  13.        print("no es una palabra alfabetica")
  14. #    continuar = raw_input("Desea continuar? s/cualquier otro: ")
  15. #    if continuar.lower() != 's':
  16. #        break
  17. print "Saliendo del programa"
  18.  
  19.  

Citar
ntroduce: abcd
si es una palabra alfabetica
Introduce: abcdefghijk
si es una palabra alfabetica
Introduce: bacdefg
no es una palabra alfabetica
Introduce: amor
si es una palabra alfabetica
Introduce: chino
si es una palabra alfabetica
Introduce: himno
si es una palabra alfabetica
Introduce: loco
no es una palabra alfabetica
Introduce: ABCDEF
si es una palabra alfabetica
Introduce: LOCO
no es una palabra alfabetica
Introduce:


Título: Re: [Python] - Ordenal palabras.
Publicado por: xassiz~ en 5 Noviembre 2010, 14:38 pm
En el último print quitaste los paréntesis pero en los anteriores no :rolleyes:


Título: Re: [Python] - Ordenal palabras.
Publicado por: Novlucker en 5 Noviembre 2010, 14:39 pm
Por que habría que quitarlos?

Saludos


Título: Re: [Python] - Ordenal palabras.
Publicado por: xassiz~ en 5 Noviembre 2010, 15:31 pm
Por que habría que quitarlos?

Saludos

Porque dijo que lo adaptó a 2.6, y solo modificó el último :rolleyes:


Título: Re: [Python] - Ordenal palabras.
Publicado por: Novlucker en 5 Noviembre 2010, 15:32 pm
Es que en el 2.6 también funciona con paréntesis :rolleyes: en realidad lo único que hizo fue cambiar los input por raw_input :xD

Saludos


Título: Re: [Python] - Ordenal palabras.
Publicado por: xassiz~ en 5 Noviembre 2010, 16:16 pm
Es que en el 2.6 también funciona con paréntesis :rolleyes: en realidad lo único que hizo fue cambiar los input por raw_input :xD
Ah, pensaba que no, había leído esto (http://docs.python.org/release/3.0.1/whatsnew/3.0.html):
Citar
Old: print "The answer is", 2*2
New: print("The answer is", 2*2)

Y es la página oficial de python >.<