密码只能包含数字字母和下划线

时间:2019-10-27 19:16:44

标签: python passwords

任务是:

编写一个Python程序,提示用户创建用户帐户并检查提供的用户名和密码是否合法。

注意:密码应以字母开头,并且只能由字母,数字和下划线符号“ _”组成。长度应在8到16之间。

我在“密码应以字母开头,并且仅由字母,数字和下划线符号“ _”。”组成的部分中遇到麻烦。 (我知道这不是最优雅的代码)

username=input("Please enter a username:")
usepass=input("Please enter a password:")
#username
if len(username)<6 or len(username)>12:
    print("Username is incorrect length. Your username must be between 6 and 12 characters.")
if username.isalnum() == False:
        print("Username must only contain letters and numbers.")
username1=username[0]
if username1.isnumeric()== True :
    print ("Your username must start with a letter")
#password
if len(usepass)<8 or len(usepass)>16:
    print("Password is incorrect length. Your password must be between 8 and 16 characters.")
usepass1=usepass[0]
if usepass1.isalpha()==False:
    print("Your password must start with a letter")
if usepass.isalnum()==False:
    print("Your password must only contain numbers, letters and underscores.")

2 个答案:

答案 0 :(得分:0)

而不是使用isalnum方法,让我们尝试自己解决这个问题。您在这里缺少的主要功能是循环。例如,如果我要测试每个字母,则可以遍历这些字母,并使用ord方法来验证每个字母都在正确的范围内。

您应该构建方法来测试问题中所述的每个独特条件。如果通过所有条件,则最后可以返回true。

def is_valid_user(username):

    # a user name should start with a letter
    is_first_lower = ord('a') <= ord(username[0]) <= ord('z')
    is_first_upper = ord('A') <= ord(username[0]) <= ord('Z')
    if not (is_first_lower or is_first_upper):
        return False

    # only consists of letters and numbers
    for character in username:
        is_lower = ord('a') <= ord(character) <= ord('z')
        is_upper = ord('A') <= ord(character) <= ord('Z')
        is_number = ord('0') <= ord(character) <= ord('9')

        if not (is_lower or is_upper or is_number):
            return False

    # check the other cases like "The length should be between 6 and 12"
    ...

    # All the tests passed so return true
    return True

现在,您可以考虑如何制作is_valid_password方法。此方法应相似,但条件有所不同。 奖金 :考虑如何使用其他方法在is_valid_useris_valid_password方法之间共享支票。

答案 1 :(得分:0)

我通过创建一个删除下划线并使用.isalnum比较该变量的新变量来解决了该问题

rmveudrsre = usepass.replace("_", "")
if rmveudrsre.isalnum()==False:
    print("Your password must only contain numbers, letters and underscores.")
相关问题