题目十八
网站要求用户输入用户名和密码才能注册。编写一个程序来检查用户输入的密码的有效性。
以下是检查密码的标准:
至少有一个大写字母
至少有一个小写字母
至少有一个数字
至少有[$#@]中的一个特殊符号
长度至少为6
长度至多为12
程序能够对以逗号相隔的密码输入时进行检测,并将符合条件的密码输出。
比如以下列作为输入:
ABd1234@1,a F1#,2w3E*,2We3345
则输出为:
ABd1234@1
代码实现
方法一
def up_check(x):
for i in x:
if (i < 'A' and i >'Z'):
return False
return True
def low_check(x):
for i in x:
if (i < 'a' and i >'z'):
return False
return True
def num_check(x):
for i in x:
if (i < '0' and i >'9'):
return False
return True
def fu_check(x):
for i in x:
if i == '$' or i == '#' or i== '@':
return True
return False
s = input("请输入密码:").split(',')
shu_s = []
for i in s:
length = len(i)
if (
6 <= length
and length <= 12
and up_check(i)
and low_check(i)
and num_check(i)
and fu_check(i)
):
shu_s.append(i)
print(shu_s)
方法二
import re
s = input("请输入密码,并以','相隔:").split(',')
lst = []
for i in s:
cnt = 0
cnt += 6 <= len(i) and len(i) <= 12
cnt += bool(re.search("[a-z]",i))
cnt += bool(re.search("[A-Z]",i))
cnt += bool(re.search("[0-9]",i))
cnt += bool(re.search("[@#$]", i))
if cnt == 5:
lst.append(i)
print(",".join(lst))
运行结果
请输入密码:ABd1234@1,a F1#,2w3E*,2We3345
['ABd1234@1']
题目十九
您需要编写一个程序来对(名称、年龄、分数)元组按升序排序,其中名称是字符串,年龄和分数是数字。元组是通过控制台输入的。
排序标准是:
1:根据名字排序
2:然后根据年龄
3进行排序:然后按分数排序
优先考虑的是名字>年龄>分数。
如果给出以下元组作为程序的输入:
Tom,19,80
John,20,90
Jony,17,91
Jony,17,93
Json,21,85
然后,程序的输出应该是:
[(‘John’, ‘20’, ‘90’), (‘Jony’, ‘17’, ‘91’), (‘Jony’, ‘17’, ‘93’), (‘Json’, ‘21’, ‘85’), (‘Tom’, ‘19’, ‘80’)]
代码实现
方法一
lst = []
while True:
s = input("请按照姓名,年龄,分数的顺序输入,并以逗号相隔").split(",")
if not s[0]:
break
lst.append(tuple(s))
lst.sort(
key=lambda x: (x[0], x[1], x[2])
)
print(lst)
运行结果
请按照姓名,年龄,分数的顺序输入,并以逗号相隔Tom,19,80
请按照姓名,年龄,分数的顺序输入,并以逗号相隔John,20,90
请按照姓名,年龄,分数的顺序输入,并以逗号相隔Jony,17,91
请按照姓名,年龄,分数的顺序输入,并以逗号相隔
[('John', '20', '90'), ('Jony', '17', '91'), ('Tom', '19', '80')]
涉及函数
re库中search(“搜索内容”,需要被搜索的字符串)
.sort函数中,以19题中lst.sort(key=lambda x: (x[0], x[1], x[2])为例,键值以lambda函数规定了排序重要的先后,实现了元组中的三类数据的重新排列。