[Python] - Ordenal palabras.

Iniciado por Meta, 3 Noviembre 2010, 02:54 AM

0 Miembros y 1 Visitante están viendo este tema.

Meta

:)

Ver imagen.

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

Código (python) [Seleccionar]
cadena = raw_input('Introduce palabra alfabética o no: ')

dato = ''
for caracter in cadena:
    if (cadena >= 'A' and cadena <= 'Z') or (cadena >= 'a' and cadena <= 'z'):
        print 'Es una palabra alfabética.'
    else:
        print 'No es una palabra alfabética.'


;)
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

VirajeCR

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.

Meta

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

VirajeCR

#3
Qué tal algo así.


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.

43H4FH44H45H4CH49H56H45H

Puede ser de esta forma:
Código (python) [Seleccionar]
#Python3
def isAlfab(palabra):
    for x in range(len(palabra)):
        if x>0:
            if ord(palabra[x])<ord(palabra[x-1]):
                return False
    return True

while True:
    palabra = input("Introduce: ")
    if isAlfab(palabra):
        print("si es una palabra alfabetica")
    else:
        print("no es una palabra alfabetica")
    continuar = input("Desea continuar? s/cualquier otro: ")
    if continuar.lower() != 's':
        break
print("Saliendo del programa")


pero hay que probarlo...

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Meta

#5
¿Por qué pones un corchete y un 0 en el medio?

Código (python, 5) [Seleccionar]
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"


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

Código (python,7) [Seleccionar]
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"
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

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í:
Citarstring = Novlucker
string[0] = N
string[1:] = ovlucker

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

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

Meta

Cita de: 43H4FH44H45H4CH49H56H45H en  3 Noviembre 2010, 08:12 AM
Puede ser de esta forma:
Código (python) [Seleccionar]
#Python3
def isAlfab(palabra):
    for x in range(len(palabra)):
        if x>0:
            if ord(palabra[x])<ord(palabra[x-1]):
                return False
    return True

while True:
    palabra = input("Introduce: ")
    if isAlfab(palabra):
        print("si es una palabra alfabetica")
    else:
        print("no es una palabra alfabetica")
    continuar = input("Desea continuar? s/cualquier otro: ")
    if continuar.lower() != 's':
        break
print("Saliendo del programa")


pero hay que probarlo...

Lo he probado y adaptado al Python 2.6.

Código (python) [Seleccionar]
def isAlfab(palabra):
    for x in range(len(palabra)):
        if x>0:
            if ord(palabra[x])<ord(palabra[x-1]):
                return False
    return True

while True:
    palabra = raw_input("Introduce: ")
    if isAlfab(palabra):
        print("si es una palabra alfabetica")
    else:
        print("no es una palabra alfabetica")
    continuar = raw_input("Desea continuar? s/cualquier otro: ")
    if continuar.lower() != 's':
        break
print "Saliendo del programa"


Es preferible hacerlo con un while en vez de preguntar si quiero continuar. Que siempre continúe.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

43H4FH44H45H4CH49H56H45H

Cita de: Meta en  3 Noviembre 2010, 10:13 AM
Código (python,7) [Seleccionar]
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"


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

Cita de: Meta en  5 Noviembre 2010, 01:21 AM
Lo he probado y adaptado al Python 2.6.

Código (python) [Seleccionar]
def isAlfab(palabra):
    for x in range(len(palabra)):
        if x>0:
            if ord(palabra[x])<ord(palabra[x-1]):
                return False
    return True

while True:
    palabra = raw_input("Introduce: ")
    if isAlfab(palabra):
        print("si es una palabra alfabetica")
    else:
        print("no es una palabra alfabetica")
    continuar = raw_input("Desea continuar? s/cualquier otro: ")
    if continuar.lower() != 's':
        break
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

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W