Argumentos del módulo de terceros pyinputplus

Las palabra clave min, max, greaterThan y lessThan como Argumentos

Las funciones inputNum(), inputInt() y inputFloat(), que aceptan números int y float, también tienen argumentos de palabra clave min, max, greaterThan y lessThan para especificar un rango de valores válidos. Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ', min=4)
Enter num:3
Input must be at minimum 4.
Enter num:4
>>> response
4
>>> response = pyip.inputNum('Enter num: ', greaterThan=4)
Enter num: 4
Input must be greater than 4.
Enter num: 5
>>> response
5
>>> response = pyip.inputNum('>', min=4, lessThan=6)
Enter num: 6
Input must be less than 6.
Enter num: 3
Input must be at minimum 4.
Enter num: 4
>>> response
4

Estas palabras clave son opcionales, pero si se suministran, la entrada no puede ser menor que el argumento min o mayor que el argumento max (aunque la entrada puede ser igual a ellos). Además, la entrada debe ser mayor que el argumento greaterThan y menor que el argumento lessThan (es decir, la entrada no puede ser igual a ellos).

El argumento de palabra clave blank

Por defecto, la entrada en blanco no está permitida a menos que el argumento de la palabra clave en blanco se establezca como True:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ')
Enter num:(blank input entered here)
Blank values are not allowed.
Enter num: 42
>>> response
42
>>> response = pyip.inputNum(blank=True)
(blank input entered here)
>>> response
''

Usa blank=True si quieres que la entrada sea opcional para que el usuario no tenga que introducir nada.

Tiempo de espera con limit, timeout y default

Por defecto, las funciones de PyInputPlus continuarán pidiendo al usuario una entrada válida para siempre (o mientras el programa se ejecute). Si quieres que una función deje de preguntar al usuario después de un cierto número de intentos o una cierta cantidad de tiempo, puedes usar los argumentos limit y timeout. Pasa un número entero como argumento de la palabra clave limit para determinar cuántos intentos hará la función PyInputPlus para recibir una entrada válida antes de rendirse, y pasa un número entero como argumento de la palabra clave timeout para determinar cuántos segundos tiene el usuario para introducir una entrada válida antes de que la función PyInputPlus se rinda.

Si el usuario no introduce una entrada válida, estos argumentos de palabra clave harán que la función lance una RetryLimitException o TimeoutException, respectivamente. Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum(limit=2)
blah
'blah' is not a number.
Enter num: number
'number' is not a number.
Traceback (most recent call last):
    --snip--
pyinputplus.RetryLimitException
>>> response = pyip.inputNum(timeout=10)
42 (entered after 10 seconds of waiting)
Traceback (most recent call last):
    --snip--
pyinputplus.TimeoutException

Cuando se utilizan estos argumentos de palabra clave y también se pasa un argumento de palabra clave por defecto, la función devuelve el valor por defecto en lugar de lanzar una excepción. Introduzca lo siguiente en el shell interactivo:

>>> response = pyip.inputNum(limit=2, default='N/A')
hello
'hello' is not a number.
world
'world' is not a number.
>>> response
'N/A'

En lugar de lanzar una RetryLimitException, la función inputNum() simplemente devuelve la cadena 'N/A'.

Argumentos allowRegexes y blockRegexes

También puede utilizar expresiones regulares para especificar si una entrada está permitida o no. Los argumentos de palabra clave allowRegexes y blockRegexes toman una lista de cadenas de expresiones regulares para determinar lo que la función PyInputPlus aceptará o rechazará como entrada válida. Por ejemplo, introduzca el siguiente código en el shell interactivo para que inputNum() acepte números romanos además de los números habituales:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum(allowRegexes=[r'(I|V|X|L|C|D|M)+', r'zero'])
XLII
>>> response
'XLII'
>>> response = pyip.inputNum(allowRegexes=[r'(i|v|x|l|c|d|m)+', r'zero'])
xlii
>>> response
'xlii'

Por supuesto, esta regex afecta sólo a las letras que la función inputNum() aceptará del usuario; la función seguirá aceptando números romanos con ordenación inválida como ‘XVX’ o ‘MILLI’ porque la expresión regular r'(I|V|X|L|C|D|M)+' acepta esas cadenas.

También puedes especificar una lista de cadenas de expresión regular que una función de PyInputPlus no aceptará utilizando el argumento de la palabra clave blockRegexes. Introduzca lo siguiente en el shell interactivo para que inputNum() no acepte números pares:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum(blockRegexes=[r'[02468]$'])
42
This response is invalid.
44
This response is invalid.
43
>>> response
43

Si especifica tanto el argumento allowRegexes como blockRegexes, la lista de permitidos anula la lista de bloqueados. Por ejemplo, introduzca lo siguiente en el intérprete de comandos interactivo, que permite 'caterpillar' y 'category' pero bloquea cualquier otra cosa que contenga la palabra 'cat':

>>> import pyinputplus as pyip
>>> response = pyip.inputStr(allowRegexes=[r'caterpillar', 'category'],
blockRegexes=[r'cat'])
cat
This response is invalid.
catastrophe
This response is invalid.
category
>>> response
'category'

Las funciones del módulo PyInputPlus pueden ahorrarte el escribir tú mismo el tedioso código de validación de entradas. Pero hay más en el módulo PyInputPlus de lo que se ha detallado aquí. Puedes examinar su documentación completa en línea en https://pyinputplus.readthedocs.io/.

Deja una respuesta