1081 检查密码 python

本文介绍了如何使用Python编写一个密码检查功能,确保密码至少包含6个字符,仅包含英文字母、数字和小数点,并且必须同时包含字母和数字。程序通过分析输入的字符类型,判断密码的合法性并提供相应的反馈信息。
摘要由CSDN通过智能技术生成

1081 检查密码 (15 分)

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。

输入格式:

输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。

输出格式:

对每个用户的密码,在一行中输出系统反馈信息,分以下5种:

  • 如果密码合法,输出Your password is wan mei.
  • 如果密码太短,不论合法与否,都输出Your password is tai duan le.
  • 如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.
  • 如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.
  • 如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.

输入样例:

5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6

输出样例:

Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.

通过ord()来判断输入的是字母还是数字还是其他的,ord('.')=46,小写字母是97-122,大写字母是65-90,数字是48-57

建了个字典,遍历输入的密码,如果是字母,就在word上加1,如果是数字就在num上加1,如果是小数点,就在小数点上加1

这样在最后做判断的时候就很容易,比如:如果密码缺少字母,那么word的值就是0

需要注意的是,如果输入的密码中存在特殊字母(非字母非数字非小数点)的话,在输出相应句子以后,需要把字典里的所有key的值变为0,不然最后判断的时候会错

N = int(input())
for i in range(N):
    psw = input()
    dic={'word':0,'num':0,'.':0}
    if len(psw)<6:
        print('Your password is tai duan le.')
    if len(psw) >= 6:
        for j in psw:
            if (ord(j) not in range(97,123))and(ord(j) not in range(65,91))and(ord(j) not in range(48,58))and(ord(j)!=46):
               
                print('Your password is tai luan le.')
                dic={'word':0,'num':0,'.':0}
                break
            if (ord(j) in range(97,123)) or (ord(j) in range(65,91)):
                dic['word'] += 1
            if ord(j) in range(48,58):
                dic['num'] += 1
            if ord(j) == 46:
                dic['.'] += 1

        if dic['word'] != 0 and dic['num'] != 0:
            print('Your password is wan mei.')

        if dic['word'] == 0 and dic['num'] != 0:
            print('Your password needs zi mu.')
            
        if dic['word'] != 0 and dic['num'] == 0:
            print('Your password needs shu zi.')

 

### 使用Python检查密码强度的方法 在实际应用中,可以通过编写函数来评估输入的密码是否满足一定的安全标准。以下是基于提供的引用以及常见实践的一种实现方式。 #### 密码强度校验的核心逻辑 为了确保密码具有足够的安全性,通常会设置一些基本规则,比如长度要求、字符种类(大写字母、小写字母、数字和特殊符号),并结合正则表达式或其他方法进行验证[^1]。 #### 实现代码示例 以下是一个完整的 Python 函数用于检验密码强度: ```python import re import string def check_password_strength(password): """ 检查给定密码的强度。 参数: password (str): 需要检查密码 返回: bool: 如果密码通过强度测试返回True, 否则False. """ # 定义最小长度要求 min_length = 8 # 判断密码长度是否符合要求 if len(password) < min_length: return False # 检测是否存在大小写字母、数字和特殊字符 has_uppercase = any(char.isupper() for char in password) has_lowercase = any(char.islower() for char in password) has_digit = any(char.isdigit() for char in password) special_characters = set(string.punctuation) has_special_char = any(char in special_characters for char in password) # 至少需要包含两类不同的字符组合 categories_count = sum([has_uppercase, has_lowercase, has_digit, has_special_char]) if categories_count < 2: return False # 可选:进一步增加复杂度检测,例如不允许连续重复字符 pattern_repeated_chars = r"(.)\1" if re.search(pattern_repeated_chars, password): return False return True ``` 上述代码实现了以下几个功能: - **密码长度**:至少为指定的最小长度[^3]。 - **字符多样性**:密码应包含多种类型的字符,如大小写英文字母、数字及特殊符号。 - **模式匹配**:利用正则表达式排除可能降低安全性的简单模式,像连续相同字符[^2]。 #### 测试样例 下面提供几个例子演示该函数的工作情况: ```python test_cases = [ ("Password1!", True), # 符合所有条件 ("weak", False), # 过短且缺乏多类字符 ("PASSWORD", False), # 缺乏数字与特殊字符 ("pass1234", False), # 不含特殊字符也无大写字母 ] for pwd, expected in test_cases: result = check_password_strength(pwd) print(f"Testing '{pwd}': {'Passed' if result else 'Failed'} | Expected: {expected}") ``` 此部分展示了不同场景下密码的有效性和预期结果对比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值