PyInputPlus包含与input()类似的、用户多种数据(数字日期、E-mail地址等)的函数。如果用户输入了无效的内容,例如格式错误的日期或超出预期范围的数字,PyIputPlus会再次提示他们输入。PyInputPlus还包含其他有用的功能,例如提示用户的次数限制和时间限制(如果要求用户在时限内作出响应)。
PyInputPlus不是Python标准库的一部分,因此需要使用pip单独安装。命令如下:
pip install --user pyinputplus
PyInputPlus具有以下几种用于不同类型输入的函数:
inputStr()类似于内置的input()函数,但具有一般的PyInputPlus功能inputNum()确保用户输入数字并返回int或float值,这取决于数字是否包含小数点inputChoice()确保用户输入习题提供的选项之一inputMenu()与inputChoice类似,但提供一个带有数字或字母选项的菜单inputDatetime()确保用户输入日期和时间inputYesNo()确保用户输入“yes”或“no”响应inputBool()类似inputYesNo(),但接收“True”或“False”响应,并返回一个布尔值inputEmail()确保用户输入有效的E-mail地址inputFilepath()确保用户输入有效的文件路径和文件名,并可以选择检查是否存在具有该名称的文件inputPassword()类似于内置的input(),但是在用户输入时显示*字符,因此不会在屏幕上显示密码或者其他敏感信息只要输入了无效内容,以上函数就会自动提示用户:
>>> import pyinputplus as pyip >>> response = pyip.inputNum() five 'five' is not a number 10 >>> response 10
每次调用PyInputPlus模块的函数时,import语句中的as pyip代码让我们不必输入pyinputplus,而是可以使用较短的pyip名称。正如可以将字符串传递给input()以提供提示一样,也可以将字符串传递给PyInputPlus模块的函数的prompt关键字参数来显示提示:
>>> import pyinputplus as pyip >>> response = pyip.inputInt(prompt='Enter a number') Enter a number:cat 'cat' is not an Integer. Enter a number:10 >>> response 10
接收int和float数的inputNum()、inputInt()和inputFloat()函数还具有min、max、greaterThan和lessThan关键字参数,用于指定有效值范围,例如如下例子:
>>> 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('Enter num: ', 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
在默认情况下,除非将blank关键字参数设置为True,否则不允许输入空格字符:
>>> import pyinputplus as pyip >>> response = pyip.inputNum('Enter num: ') Enter num: (blank input entered here) Blank values are not allowed. Enter num: 40 >>> response 40 >>> response = pyip.inputNum(blank=True) (blank input entered here) >>> response ''
如果想使输入可选,使用blank=True,这样用户不需要输入任何内容。
在默认情况下,PyInputPlus模块的函数在程序运行时会一直要求用户提供有效输入,如果希望某个函数在经过一定次数的尝试或一定的时间后停止要求用户输入,就可以使用limit和timeout关键字参数。用limit关键字参数传递一个整数,以确定PyInputPlus的函数在放弃之前尝试接受有效输入多少次。用timeout关键字参数传递一个整数,以确定用户在多少秒之内必须提供有效输入,然后PyInputPlus模块的函数会放弃。
如果用户未能提供有效输入,那么这些关键字参数将分别导致函数引发RetryLimitException或TimeoutException异常。
当你使用这些关键字参数并传入default关键字参数时,该函数将返回默认值,而不是引发异常。例如:
response = pyip.inputNum(limit=2, default='N/A') hello 'hello' is not a number world 'world' is not a number >>> response 'N/A'
inputNum()函数使用了default关键字参数后不会引发RetryLimitException,只会返回字符串‘N/A’.
我们也可以使用正则表达式指定输入是否被接受。关键字参数allowRegexes和blockRegexes利用正则表达式字符串列表来确定PyInputPlus模块的函数将接受或拒绝哪些内容作为有效输入。例如,使用inputNum()函数将接收罗马数字以及常规数字作为有效输入:
import pyinputplus as pyip >>> response = pyip.inputNum(allowRegexes=[r'(I|V|X|L|C|D|M)+', r'zero']) XLII >>> response 'XLII'
我们还可以用blockRegexes关键字参数指定PyInputPlus模块的函数不接收的正则表达式字符串列表:
import pyinputplus as pyip >>> response = pyip.inputNum(blockRegexes=[r'[02468]$']) 42 This response is invalid. 43 >>> response 43
如果同时指定allowRegexes和blockRegexes参数,那么允许列表将优先于阻止列表。例如:
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'
可以编写函数以执行自定义的验证逻辑,并将函数传递给inputCustom()。例如,我们可以创建自己的addsUpToTen()函数,然后将其传递给inputCustom()。注意,函数调用看起来像inputCustom(addsUpToTen),而不是inputCustom(addsUpToTen()),因为我们是将addsUpToTen()函数本身传递给inputCustom(),而不是调用addsUpToTen()函数并传递其返回值:
import pyinputplus as pyip def addsUpToTen(numbers): numbersList = list(numbers) for i,digit in enumerate(numersList): numbersList[i] = int(digit) if sum(numbersList) != 10: raise Exception('The digits must add up to 10,not %s. ' %(sum(numbersList))) return int(number) >>> response = pyip.inputCustom(addsUpToTen) 123 The digit must add up to 10,not 6. 55 >>> response 55
inputCustom()函数还支持常规的PyInputPlus功能,该功能可通过blank、limit、timeout、default、allowRegexes和blockRegexes关键字参数实现。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
长按识别二维码并关注微信
更方便到期提醒、手机管理