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

2024-04-25 11:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

任务是:

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

注意:密码应该以字母开头,并且只能由字母、数字和下划线符号“u”组成。长度应该在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.")


Tags: and用户false密码yourlenif字母
2条回答

与其使用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_user和{}方法之间共享支票。在

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

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

相关问题 更多 >