一、题目描述
给定用户密码输入流input,输入流中字符'<'表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。
密码安全要求如下:
1.密码长度>=8;
2.密码至少需要包含1个大写字母;
3.密码至少需要包含1个小写字母;
4.密码至少需要包含1个数字;
5.密码至少需要包含1个字母和数字以外的非空白特殊字符;
注意空串退格后仍然为空串,且用户输入的字符串不包含空白字符。
输入描述
用一行字符串表示输入的用户数据,输入的字符串中'<'字符表示退格,用户输入的字符串不包含空白字符,例如:
WC#134<shinia<
输出描述
输出经过程序处理后,输出的实际密码字符串,并输出该密码字符串是否满足密码安全需求。两者间使用','分隔。例如:
WC#13shini,True
二、解题思路
利用栈实现退格操作,首先处理字符串,之后再判断是否符合安全需求。
三、详细代码
def deal_input(string):
password_stack = []
# 遍历字符串字符,如果是<则出栈,即实现退格;不是则压入栈中
for c in string:
if c == '<':
password_stack.pop()
else:
password_stack.append(c)
# 返回处理好的密码输入流
return ''.join(password_stack) # 将栈(列表)中字符元素联成字符串
def check_password_security(password):
'''
检查密码是否符合安全要求
:param password: 处理好的密码输入流
:return:bool值
'''
has_upper_case = any(c.isupper() for c in password) # 大写字母
has_lower_case = any(c.islower() for c in password) # 小写字母
has_digit = any(c.isdigit() for c in password) # 数字
has_special_char = any(not c.isalnum() for c in password) # 特殊符号
return len(password) >= 8 and has_upper_case and has_lower_case and has_digit and has_special_char
if __name__ == '__main__':
string = input()
password = deal_input(string)
is_secure = check_password_security(password)
print(f"{password},{is_secure}")