任务是:
编写一个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.")
答案 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_user
和is_valid_password
方法之间共享支票。
答案 1 :(得分:0)
我通过创建一个删除下划线并使用.isalnum比较该变量的新变量来解决了该问题
rmveudrsre = usepass.replace("_", "")
if rmveudrsre.isalnum()==False:
print("Your password must only contain numbers, letters and underscores.")