486|5

6483

帖子

9

TA的资源

版主

楼主
 

《Python编程快速上手》8、输入验证 [复制链接]

        我们通常会需要对用户输入的内容格式进行验证。例如,用户输入年龄,那么代码不应该接受无意义的答案,例如负数或单词。输入验证可以防止错误或者安全漏洞。
通常,我们执行输入验证的方式是要求用户反复进行输入,直到他们输入有效的文本。本书中举了一个例子:
while True:
try:
age = int(input('Enter your age: '))
except ValueError:
print('Please use numeric digits.')
else:
if age < 0:
print('Please enter a positive number.')
else:
break
print('Your age is {}.'.format(age))

        如上面这个例子,我们没有输入或者输入错误回报错,一直循环等待,直到正确的格式进入运行后如下:

        这样有个弊端,就是需要一直等待while循环的退出,很麻烦,所有引入了PyInputPlus 模块,学习其关键字的使用和自定义。
PyInputPlus 模块
        PyInputPlus 模块包含与 input 函数类似的、用于多种数据的函数:数字、日期、邮箱等。如果用户输入了无效的数据,例如格式错误的日期或者超出预期范围的数字,那么 PyInputPlus 会提示输入者再次输入。此外 PyInputPlus 模块还支持其它功能,例如提示输入者输入次数和时间限制。
        PyInputPlus 不是 Python 标准库的一部分,因此需要额外安装(pycharm64是在“Terminal”中进行),执行如下终端命令安装:
                “pip3 install -U pip”检查安装条件;
                “pip3 install pyinputplus”进行安装。
        我尝试在pycharm64的设置中添加失败了,用上面的方法可以正确安装。
PyInputPlus 模块中的几种常用函数:
        inputStr:类似于 input 函数,具有一般的 PyInputPlus 功能
        inputNum:确保用户输入的是数值,并返回 int 或 float 类型的数据;
        inputChoice:确保用户输入的是系统提供的选项之一
        inputMenu:与inputChoice 类似,但它提供一个带有数字或字母选项的菜单;
        inputDatetime:确保用户输入的是日期和时间;
        inputYesNo:确保用户输入的是不分大小写的 yes 或者 no ( n 、N 、no 、NO 等字样看作 no ,把 y 、Y、yes 、YES 等字样看作 Yes),返回的是字符串 'yes' 或 'no' 
        inputBool:与 inputYesNo 类似,但输入值是不分大小写的 true 或 false ,返回的是对应的布尔值
        inputEmail:确保用户输入有效的邮箱地址
        inputFilepath:确保用户输入有效的文件路径和文件名,并且可以设置是否检查文件的存在
        inputPassword:确保用户的输入内容不会显示在屏幕上
        这些常用函数就相当于是一个打包好的固件,我们可以直接使用。
         inputNum 、inputInt 、inputFloat 等这些可以把字符串转换为数值的函数,具有 min 、max 、greaterThan 、lessThan 等关键字参数用于指定有效范围。例如:
from pyinputplus import inputNum
num = inputNum('Enter a number: ', min=2, lessThan=15)

        有一些关键字不能同时使用,例如max和lessThan,运行后会报错;
        blank 参数设置为 True ,则可以包含空白字符;limit和timeout关键字允许用户在输入一定次数后停止尝试,或者一段时间后停止输入,达到限制后会提示异常并终止程序,或者可以使用default关键字触发后不提示异常,而是返回default关键字的值。例如:
from pyinputplus import inputNum
num1 = inputNum('Enter a number: ', max=10, limit=3, default='Over limit')
print(num1)
num2 = inputNum('Enter a number: ', max=10, timeout=10, default='Over time')
print(num2)
num3 = inputNum('Enter a number: ', max=10, blank=True)
print(num3)

        关键字参数 allowRegexes 和 blockRegexes 可以利用正则表达式字符串来确定函数接收哪些输入作为有效输入或者将哪些输入视作无效输入。
        更复杂的逻辑要求可以通过自定义验证函数实现,可以实现高度定制化。

最新回复

期待版主大佬的下一期精彩分享!   详情 回复 发表于 2024-6-2 12:21
点赞 关注
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复
举报

755

帖子

5

TA的资源

纯净的硅(高级)

沙发
 

楼主分享的python输入验证基础知识对入门者帮助很大,感谢分享

点评

作者写的好,主要也是对作者的教程进行了实验学习    详情 回复 发表于 2024-6-1 20:54
 
 
 

回复

6483

帖子

9

TA的资源

版主

板凳
 
chejm 发表于 2024-6-1 20:49 楼主分享的python输入验证基础知识对入门者帮助很大,感谢分享

作者写的好,主要也是对作者的教程进行了实验学习  

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

6992

帖子

11

TA的资源

版主

4
 

这个输入检测确实是我以前没有学习到的。

点评

Python的各种模式真的多,确实很好用的    详情 回复 发表于 2024-6-2 11:00
 
 
 

回复

6483

帖子

9

TA的资源

版主

5
 
lugl4313820 发表于 2024-6-1 22:39 这个输入检测确实是我以前没有学习到的。

Python的各种模式真的多,确实很好用的  

点评

期待版主大佬的下一期精彩分享!  详情 回复 发表于 2024-6-2 12:21
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

6992

帖子

11

TA的资源

版主

6
 
秦天qintian0303 发表于 2024-6-2 11:00 Python的各种模式真的多,确实很好用的  

期待版主大佬的下一期精彩分享!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表