Herramientas de usuario

Herramientas del sitio


python:basico

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
python:basico [2022/04/04 23:36] – [Expresiones Regulares y patrones] albertopython:basico [2025/08/02 02:14] (actual) – [Strings] alberto
Línea 43: Línea 43:
  
 Las variables que se declaren fuera de una función, tienen ámbito global. Las variables que se declaren fuera de una función, tienen ámbito global.
-Las variables que se declaran en el interior de una función tienen ámbito local y s´ñolo existen mientras se ejecute esa función.+Las variables que se declaran en el interior de una función tienen ámbito local y sólo existen mientras se ejecute esa función.
 Dentro de una función se pueden usar variables globales anteponiendo **global**. Dentro de una función se pueden usar variables globales anteponiendo **global**.
 El uso de variables globales es desaconsejable. El uso de variables globales es desaconsejable.
Línea 109: Línea 109:
     print("A igual a B")     print("A igual a B")
          
-elif (A > B):;+elif (A > B):
     print("A mayor que B")     print("A mayor que B")
          
Línea 128: Línea 128:
  
 Si fuese necesario, se pueden usar las sentencias: Si fuese necesario, se pueden usar las sentencias:
-  * **break** Sale del bcle while+  * **break** Sale del bucle while
   * **continue** Pasa a la primera línea del interior del bucle while   * **continue** Pasa a la primera línea del interior del bucle while
  
Línea 167: Línea 167:
  
 <code python> <code python>
-def miFuncion('argumento1'='a', 'argumento2'='b'): # El programa usará a y b si no se declaran explícitamente en la ejecución del programa+def miFuncion(argumento1='a', argumento2='b'): # El programa usará a y b si no se declaran explícitamente en la ejecución del programa
     # ...     # ...
     # ...     # ...
Línea 383: Línea 383:
  
 Permite el uso de las sentencias **in** y **not in**. Permite el uso de las sentencias **in** y **not in**.
-Se puede usar //string interpolation// con **%s** para insertar otros strings. +Se puede usar desde Python 3.6 con **//f-strings//**:
- +
-<code python> +
-name = 'Al' +
-age =4000 +
-'Hello, my name is %s, and I am %s years', %(name, age) +
-</code> +
- +
-Desde Python 3.6 existen **//f-strings//**, similar a //string interpolation//:+
  
 <code python> <code python>
Línea 454: Línea 446:
 Las funciones regex se encuentran en la biblioteca de python **re**.\\ Las funciones regex se encuentran en la biblioteca de python **re**.\\
  
-Las expresiones regulares pueden llegar a ser muy largas y complejas. se pueden usar las triples comillas simples **\'''**...**\'''** para poner la expresión en varias líneas, de modo que se pueda ir comentando con #. Para que compile ignore espacios y # dentro de la expresión, se mete como segundo argumente re.VERBOSE+Las expresiones regulares pueden llegar a ser muy largas y complejas. se pueden usar las triples comillas simples **%%'''%%**...**%%'''%%** para poner la expresión en varias líneas, de modo que se pueda ir comentando con #. Para que compile ignore espacios y # dentro de la expresión, se mete como segundo argumente re.VERBOSE
  
 === Claves de caracteres para crear expresiones regulares === === Claves de caracteres para crear expresiones regulares ===
Línea 498: Línea 490:
 El método **findall()** devuelve una lista de strings con todos los //matches//. El método **findall()** devuelve una lista de strings con todos los //matches//.
  
-Con el método **sub()**, se pueden sustituir las coincidencias: +Con el método **sub()**, se pueden sustituir las coincidencias
- +Se puede trabajar con el método sub() de dos formas
-<code python>+  - A partir del patrón especificado anteriormente:\\ patron.sub(string_que_sustituirá, string_donde buscará_coincidencias_para sustituir):<code python>
 nameRegex=re.compile(r'Agent\w+') nameRegex=re.compile(r'Agent\w+')
 nameRegex.sub('CENSORED', 'Agent Alice gave the secret document to Agent Bob.') nameRegex.sub('CENSORED', 'Agent Alice gave the secret document to Agent Bob.')
 # Sustituye "Agent Alice" y "Agent Bob" en la cadena por "CENSORED"  # Sustituye "Agent Alice" y "Agent Bob" en la cadena por "CENSORED" 
 +</code>
 +  - Especificando el patrón en la propia función sub\\ re.sub(patron, string_que_sustituirá_o_funcion, string_donde buscará_coincidencias_para sustituir, count=0, flags=0)\\ donde se puede incluir una función (sin paréntesis) en la que se pasa el valor coincidente (tipo //Match//) y debe retornar el string por el que sustituir. count puede limitar el número de coincidencias a sustituir, y flags puede tomar el valor re.IGNORECASE para no diferenciar entre mayúsculas y minúsculas. Ejemplo:<code python>
 +def dashrepl(matchobj):
 +...     if matchobj.group(0) == '-': return ' '
 +...     else: return '-'
 +>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
 +'pro--gram files'
 +>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
 +'Baked Beans & Spam'
 </code> </code>
 ===== Validación de datos de entrada ===== ===== Validación de datos de entrada =====
 +Se usa la biblioteca pyinputplus, que no viene con python, por lo que es necesario instalarla.\\
 +
 +<code python>
 +pip install --user pyinputplus
 +import pyinputplus as pyip # Se le puede definir un alias para no tener que escribir todo el nombre cada vez que se llama a uno de sus métodos.
 +</code>
 +
 +=== Métodos de validación de datos ===
 +Algunos de sus métodos:
 +  * **inputstr()** Como input(), con las características de la biblioteca. Se puede indicar una función de validación personalizada.
 +  * **inputNum()** Permite introducir un número y retorna un dato tipo int o float.
 +  * **inputChoice()** Asegura que se introduce una de las opciones definidas.
 +  * **inputMenu()** Asegura que se introduce una de las opciones definidas, que se encuentran ordenadas con letras o números.
 +  * **inputDatetime()** Asegura que se introducce una fecha y hora.
 +  * **inputYesNo()** Sobran las palabras.
 +  * **inputBool()** Comprueba True o False. Devuelve otro booleano.
 +  * **inputEmail()** Pues eso.
 +  * **inputFilepath()** Asegura que se introduce una dirección y nombre de archivo válida, y opcionalmente comprueba si existe.
 +  * **inputPassword()** Sin mostrar en pantalla los caracteres que se pulsan. Por defecto son sustituidos por *.
 +
 +Las funciones inputNum(), inputInt() e inputFloat() aceptan una serie de argumentos (el primero es el texto a validar):
 +  * **min** Número mínimo permitido.
 +  * **max** Número máximo permitido.
 +  * **greatherThan** Número mínimo permitido sin tenerlo en cuenta.
 +  * **lessThan** Número máximo permitido sin contar el indicado.
 +  * **blank**=True/False Permitir o no espacios en blanco.
 +
 +=== Intentos ===
 +Se puede limitar el número de intentos si se introduce el dato de forma errónea, ya que en caso de no hacerlo, lo seguiría pidiendo indefinidamente. Se puede hacer con los argumentos opcionales:
 +  * **limit**=n Número de intentos. Genera un error RetryLimitException
 +  * **timeout**=m Número de segundos máximo para introducir un dato válido. Genera un error TimeoutException
 +
 +Se manejan con Try-Except.
 +
 +Si se indica el argumento **default:...**, la cadena puesta a continuación se mostrará al sobrepasar el número de intentos o el tiempo de contestación.\\
 +
 +Se pueden pasar regex con los argumentos:
 +  * **allowRegexes**=[r'...', r'...', r'...'] Se indican los que la función no tenga permitidos, para poderlos introducir.
 +  * **blockRegexes**=[r'...', r'...', r'...'] Limita incluso los que la función tenga permitidos.
 +
 +allowRegexes sobreescribe a block si se especifican ambos y se pisan. 
 +
python/basico.1649108218.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki