Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: jesslandero2 en 24 Octubre 2017, 15:32 pm



Título: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: jesslandero2 en 24 Octubre 2017, 15:32 pm
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
  1. #este programa lee una letra del teclado y dice si es mayuscula o minuscula}
  2. #que identifique que sea solo una letra
  3. #que reconozca las Ñ
  4.  
  5. print("Escribe un Letra para saber si Mayuscula o Minuscula")
  6. caracter=input("Escribe un caracter: ")  #Lee la variable
  7.  
  8.  
  9. if len(caracter) == 1 and caracter.isalpha() == true:  #Si solo es un caracter adelante y alfabetica
  10. if caracter >= "A" and caracter <= "Z": #evalua que se encuentre dentro de A y Z mayus
  11. print("El caracter ", caracter," Es Mayuscula")
  12.  
  13. elif caracter >= "a" and caracter <= "z":
  14. print("El caracter ", caracter," Es Minuscula") #Evalua que se encuentre entre a y z minus
  15.  
  16. elif caracter == "Ñ":     # apartir de aqui evalua si es una Ñ
  17. print ("El caracter ",caracter," Es Ñ")
  18. elif caracter == "ñ":
  19. print("El caracter ",caracter,"Es ñ")
  20. else: #si no cumple ninguna de las anteriores, no es una letra.
  21. print("El caracter no es una letra")
  22.  
  23. elif len(caracter) >= 2 and caracter.isalpha() == false: #quiero que si es mas d 2 caracters
  24. print("Debes escribir solo un caracter (sin numeros)") #y si esa cadena tiene numeros
  25. #lo identifique
  26. else:
  27. print("No escribas una cadena, solo un caracter")  #ninguna d las anteriores
  28.  

Antes lo tenia con if aplicados de la siguiente manera:
Código:
      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  :-(


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: engel lex en 24 Octubre 2017, 16:09 pm
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


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: jesslandero2 en 24 Octubre 2017, 18:08 pm
Hola de echo estoy en Python 3. Voy a probar con raw_input y comentaré que paso.

Ahora estoy en mi trabajo  :rolleyes:


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: tincopasan en 24 Octubre 2017, 20:04 pm
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
  1. if len(caracter) == 1 and caracter.isalpha():#ya estás diciendo que debe ser verdadera
Código
  1. elif len(caracter) >= 2 and not caracter.isalpha():#debe ser falsa

3)
Código
  1. 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
  1. if "A" <= caracter <= "Z":

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

en fin, unas modiifcaciones a ese código,manteniendolo casi igual:
Código
  1. #-*- coding:utf -8 -*-
  2. print("Escribe un Letra para saber si Mayuscula o Minuscula")
  3. caracter=input("Escribe un caracter: ")  #Lee la variable
  4.  
  5.  
  6. if len(caracter) == 1 and caracter.isalpha():  #Si solo es un caracter adelante y alfabetica
  7.    if "A" <= caracter <= "Z": #evalua que se encuentre dentro de A y Z mayus
  8.        print("El caracter ", caracter," Es Mayuscula")
  9.  
  10.    elif "a" <= caracter <= "z":
  11.        print("El caracter ", caracter," Es Minuscula") #Evalua que se encuentre entre a y z minus
  12.  
  13.    elif caracter == "Ñ":     # apartir de aqui evalua si es una Ñ
  14.        print ("El caracter ",caracter," Es Ñ")
  15.    elif caracter == "ñ":
  16.        print("El caracter ",caracter,"Es ñ")
  17.    else: #si no cumple ninguna de las anteriores, no es una letra.
  18.        print("El caracter no es una letra")
  19.  
  20. elif len(caracter) >= 2 and not caracter.isalpha(): #quiero que si es mas d 2 caracters
  21.    print("Debes escribir solo un caracter (sin numeros)") #y si esa cadena tiene numeros
  22.                                            #lo identifique
  23. else:
  24.    print("No escribas una cadena, solo un caracter")  #ninguna d las anteriores
  25.  

Saludos



 


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: jesslandero2 en 25 Octubre 2017, 03:56 am
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??


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: tincopasan en 25 Octubre 2017, 04:10 am
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.


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: elflamas30 en 16 Junio 2018, 00:28 am
No funciona el codigo publicado no reconoce las eñes


Título: Re: [PYTHON] Como evaluar una cadena que no contenga numeros con sentencia if
Publicado por: Serapis en 16 Junio 2018, 12:14 pm
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
Código:
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

Código:
array tipo AtributosDeCaracteres CharAtribs(0 a 255)

Punto3
...al cargar el programa...
Código:
   // 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...
Código:
// 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.
Código:
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