[PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if

Iniciado por jesslandero2, 24 Octubre 2017, 15:32 PM

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

jesslandero2

Buen dia.

Sigo con mis ejercios en python, estoy en un ejercicio que me solicita lo siguiente: Hacer un programa que sepa si un caracter es mayuscula o minuscula, poner ciertas condiciones para restringir la entrada de una cadena completa, es decir que se limite solo a evaluar un caracter. Tambien tiene que saber si es un numero.

Lo llevo asi:

Código (python) [Seleccionar]

#este programa lee una letra del teclado y dice si es mayuscula o minuscula}
#que identifique que sea solo una letra
#que reconozca las Ñ

print("Escribe un Letra para saber si Mayuscula o Minuscula")
caracter=input("Escribe un caracter: ")  #Lee la variable


if len(caracter) == 1 and caracter.isalpha() == true:  #Si solo es un caracter adelante y alfabetica
if caracter >= "A" and caracter <= "Z": #evalua que se encuentre dentro de A y Z mayus
print("El caracter ", caracter," Es Mayuscula")

elif caracter >= "a" and caracter <= "z":
print("El caracter ", caracter," Es Minuscula") #Evalua que se encuentre entre a y z minus

elif caracter == "Ñ":     # apartir de aqui evalua si es una Ñ
print ("El caracter ",caracter," Es Ñ")
elif caracter == "ñ":
print("El caracter ",caracter,"Es ñ")
else: #si no cumple ninguna de las anteriores, no es una letra.
print("El caracter no es una letra")

elif len(caracter) >= 2 and caracter.isalpha() == false: #quiero que si es mas d 2 caracters
print("Debes escribir solo un caracter (sin numeros)") #y si esa cadena tiene numeros
#lo identifique
else:
print("No escribas una cadena, solo un caracter")  #ninguna d las anteriores


Antes lo tenia con if aplicados de la siguiente manera:

      if caracter >= 0 and caracter <= 0:
           print("Es un numero)


Estuve investigando sobre la validacion de caracteres y encontre la funcion isalpha ero con la función caracter.isalpha() == false (linea 23) me manda un error me dice que false no esta inicializada.  y con el true del primer if (linea 9) no me manda ese error. No entiendo por que

nota: tambien encontre que hay funciones predefinidas para saber si es mayuscula o minuscula, pero tengo que hacer el ejercicio con if  :-(
"La física es el sistema operativo del Universo"

                                        Steven R Garman

engel lex

el asunto es que en python2 input es inestable en el tipo retornado, así que si retorna un numero el metodo.isalfa no existe para el... re recomiendo usar raw_input que retorna siempre string
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jesslandero2

Hola de echo estoy en Python 3. Voy a probar con raw_input y comentaré que paso.

Ahora estoy en mi trabajo  :rolleyes:
"La física es el sistema operativo del Universo"

                                        Steven R Garman

tincopasan

tenés muchos errores de concepto:
1) el más grave, raw_input no existe en python 3

2) la función isalpha() retorna verdadero o falso entonces usas if o not if
Código (python) [Seleccionar]
if len(caracter) == 1 and caracter.isalpha():#ya estás diciendo que debe ser verdadera
Código (python) [Seleccionar]
elif len(caracter) >= 2 and not caracter.isalpha():#debe ser falsa

3)
Código (python) [Seleccionar]
if caracter >= "A" and caracter <= "Z": #evalua que se encuentre dentro de A y Z mayus
esto no es que esté mal, pero es feo mirarlo!!, lo mismo pero en python:
Código (python) [Seleccionar]
if "A" <= caracter <= "Z":

4)¿uándo te enseñan format?

en fin, unas modiifcaciones a ese código,manteniendolo casi igual:
Código (python) [Seleccionar]

#-*- coding:utf -8 -*-
print("Escribe un Letra para saber si Mayuscula o Minuscula")
caracter=input("Escribe un caracter: ")  #Lee la variable


if len(caracter) == 1 and caracter.isalpha():  #Si solo es un caracter adelante y alfabetica
    if "A" <= caracter <= "Z": #evalua que se encuentre dentro de A y Z mayus
        print("El caracter ", caracter," Es Mayuscula")

    elif "a" <= caracter <= "z":
        print("El caracter ", caracter," Es Minuscula") #Evalua que se encuentre entre a y z minus

    elif caracter == "Ñ":     # apartir de aqui evalua si es una Ñ
        print ("El caracter ",caracter," Es Ñ")
    elif caracter == "ñ":
        print("El caracter ",caracter,"Es ñ")
    else: #si no cumple ninguna de las anteriores, no es una letra.
        print("El caracter no es una letra")

elif len(caracter) >= 2 and not caracter.isalpha(): #quiero que si es mas d 2 caracters
    print("Debes escribir solo un caracter (sin numeros)") #y si esa cadena tiene numeros
                                            #lo identifique
else:
    print("No escribas una cadena, solo un caracter")  #ninguna d las anteriores


Saludos




jesslandero2

Gracias por la informacion, de verdad te agradezco.

Citar
4)¿Cuándo te enseñan format?

Bien la verdad es que me he buscado un buen libro(desde mi persepcion) y es el que estoy siguiedo, y de format, solo he visto .format() para mostrar datos con print

tendras un mejor libro o curso??
"La física es el sistema operativo del Universo"

                                        Steven R Garman

tincopasan

si, format es para mostrar datos con print, de una forma mejor o más clara.
En cuanto a libros creo que cualquiera es bueno para empezar, después es cuestión de buscar sobre temas más especificos.
Saludos.

elflamas30


Serapis

No te ahogues en un vaso de agua... Si un lenguaje no tiene exactamente una función tal y como tú la precisas, pués créala, que para eso sirve programar...


1 - Crea una enumeración con los tipos de atributos que vayas a necesitar...
2 - Crea un array del 0 al 255... cada uno representa los atributos para el carácter ASCII, bajo cuyo índice se aloja el valor.
3 - Establece los atributos que te parezca a cada uno según se te antoje o necesites (que la ñ es alfabética, pués listo, que no, pués no).

4 - Cuando debas hacer una verificación específica, recorres la cadena carácter a carácter preguntando justamente por lo que precisas... si basta que un solo carácter no cumpla lo esperado, pués hale devuelves FALSE.

5 - Como tales funciones pueden ser de uso general,. sería acorde declararlas estáticas...

pseudocódigo de ejemplo:

Punto 1

enumeracion AtributosDeCaracteres
   ATRIB_CARACTER_ES_DIGITO =1
   ATRIB_CARACTER_ES_MINUSCULA =2
   ATRIB_CARACTER_ES_MAYUSCULA =4
   ATRIB_CARACTER_ES_ALFABETICO = ATRIB_CARACTER_ES_MINUSCULA OR ATRIB_CARACTER_ES_MAYUSCULA
   ATRIB_CARACTER_ES_ALFANUMERICO = ATRIB_CARACTER_ES_ALFABETICO OR ATRIB_CARACTER_ES_DIGITO

   ATRIB_CARACTER_OTROS ATRIBUTOS QUE PRECISES... por ejemplo operadores: * / + - = > <, etc...
fin enumeracion


Punto 2


array tipo AtributosDeCaracteres CharAtribs(0 a 255)


Punto3
...al cargar el programa...

   // 0-9
   bucle para k desde 48 a 57
       CharAtribs(k) = ATRIB_CARACTER_ES_DIGITO
   fin bucle

   // A-Z
   bucle para k desde 65 a 90
       CharAtribs(k) = ATRIB_CARACTER_ES_MAYUSCULA
   fin bucle

   // Ñ mayúscula...
   CharAtribs(209) = ATRIB_CARACTER_ES_MAYUSCULA
   // Lo mismo con otras letras mayúsculas de los caracteres extendidos que quieras considerar
   // por ejemplo las vocales tildaddas Á É Í Ó Ú, pero quizás no con otras tildes diferentes À
   CharAtribs(193) = ATRIB_CARACTER_ES_MAYUSCULA  //Á
   CharAtribs(201) = ATRIB_CARACTER_ES_MAYUSCULA  //É
   CharAtribs(205) = ATRIB_CARACTER_ES_MAYUSCULA  //Í
   CharAtribs(211) = ATRIB_CARACTER_ES_MAYUSCULA  //Ó
   CharAtribs(218) = ATRIB_CARACTER_ES_MAYUSCULA  //Ú
   CharAtribs(220) = ATRIB_CARACTER_ES_MAYUSCULA  //Ü

   // ídem con letras minúsculas y más atributos que quieras... de hecho un carácter puede tener más de 1 atributo a la vez (por eso los enumeramos con potencias de 2, en vez de seguidos).


Punto 4... las funciones...

// digitos 0-9 pero no considera puntos decimales.
buleano = funcion EsTodoDigitos(string texto)
  Por cada valor de caracter en texto
      Si (CharAtribs(valor) and ATRIB_CARACTER_ES_DIGITO) = 0 devolver FALSE
  siguiente
  devolver TRUE
fin funcion

// A-Z, a-z (y vocales las tildadas y ü con diéresis y Ñ)
buleano = funcion EsTodoAlfabetico(string texto)
  Por cada valor de caracter en texto
      Si (CharAtribs(valor) and ATRIB_CARACTER_ES_ALFABETICO) = 0 devolver FALSE
  siguiente
  devolver TRUE
fin funcion

// A-Z, Á, É, Í, Ó, Ú, Ú, Ñ
buleano = funcion EsTodoMayusculas(string texto)
  Por cada valor de caracter en texto
      Si (CharAtribs(valor) and ATRIB_CARACTER_ES_MAYUSCULA) = 0 devolver FALSE
  siguiente
  devolver TRUE
fin funcion


Algo diferente, devolver el punto donde deja de haber dígitos.

entero = funcion NumDigitosAIzquierda(string texto)
  entero k = texto.Lenght
  entero index = 0

  Bucle para index desde 0 a k
      char =  CaracterEnPosicion(texto,index)
      Si (CharAtribs(ASCII(char)) and ATRIB_CARACTER_ES_DIGITO) = 0 devolver index  
  siguiente
  devolver k //todos sus caracteres son dígitos
fin funcion