用Python做一个类似的输入验证机制,你知道吗?
长假过后,大家都缓过神来了吗?在这里祝大家上班快乐~
今天来个应用题。在使用各种网站和应用时,少不了要注册账号,这种注册表单大家应该屡见不鲜了吧。
一般这些表单都会做一些验证,如果你填写的信息不符合规范,就不让你提交js 验证form,并提示你错误,比如内容不能为空、密码的长度不够、邮件地址不正确等。
这种小功能通常是用 JavaScript 在网页上实现的。而我们这次要做的,是用 Python 做一个类似的输入验证机制。参考效果:
基本要求:
需要输入邮箱地址、密码两项
邮箱地址需要满足形如 xxx@xxx.xx 的正常邮件格式(中间有一个 @,后半段中间至少有一个 .),并且不包含空格
密码需要8位以上,必须包含有大写字母、小写字母和数字三种字符(三种都要有)
附加要求:
通过正则表达式来验证规则
增加重名验证
如果你熟悉 JS,也可以提供一个页面版本。
期待各位同学提交解答。
提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【解答】数路径
上一期的题目,有很多同学提交了解答。先来分析下思路,我们可以从最简单的情况开始考量。
当该矩阵为 2 * 2 时:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">` A B-top
B-left B`</pre>
因为只能向右和下走js 验证form,所以 A 到 B 的路劲可分解为(B-left 到 B 路径数)与(B-top 到 B 路径数)之和。如下所示:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">`2 1
1 0`</pre>
也就是说,从右下倒推回左上,每个点的路径数都是它右边和下边的路径数之和。
当为 3 * 3 时:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">`6 3 1
3 2 1
1 1 0`</pre>
认识到这一点之后,代码就水到渠成了。
我们先给出一个迭代版本供参考:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">`def uniquePath(m, n):
'''
:type m: int
:type n: int
:rtype: int
'''
#为了计算方便,初始化创建一个全为1的m*n矩阵
#并假设右下角是0,0,左上角是m,n
matrix = [[1 for j in range(n)] for i in range(m)] for i in range(1, m): for j in range(1, n):
matrixi = matrixi + matrixi-1
print(matrix) return matrix-1 assert uniquePath(1, 2) == 1 assert uniquePath(3, 3) == 6 assert uniquePath(10, 20) == 6906900`</pre>
然后是递归版本,留言区有很多同学使用了递归方法。这里参考的是 @elyt 同学的代码:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">`def uniquePath(m, n):
'''
:type m: int
:type n: int
:rtype: int
'''
if (m==1) or (n==1): return 1
else: return uniquePath(m,n-1)+uniquePath(m-1,n)`</pre>
最后是纯数学版本,参考了 @LDJ 同学的代码:
<pre style="font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em;line-height: 1.2em;margin: 1.2em 0px;">`import mathdef uniquePath(m,n):
return ((math.factorial(m+n-2))/((math.factorial(m-1))*(math.factorial(n-1))))`</pre>
使用了递归方法的同学有:
elyt、狮子不咬人、bolin、古美萌、Seerz、阳光海岸、徐大龙、侧耳倾听、九二
迭代方法:
王炎、王任(实现了递归、迭代两种)
数学方法:
LDJ、迷途阡陌
以上各位同学的具体代码可以在上一篇留言栏中查看。还有一些未给出代码地址的同学,同样在留言栏中可以看到他们的方法。
感谢大家的参与!
发表评论
热门文章
Spimes主题专为博客、自媒体、资讯类的网站设计....
一款个人简历主题,可以简单搭建一下,具体也比较简单....
仿制主题,Typecho博客主题,昼夜双版设计,可....
用于作品展示、资源下载,行业垂直性网站、个人博客,....
尘集杂货铺和官网1t5-cn
11月11日
[已回复]
希望主题和播放器能支持SQLite数据库,AI能多个讯飞星火