我被分配了以下练习作为家庭作业:
- 某些网站对密码规定了某些规则。编写一个函数来检查字符串是否是有效密码。假设密码规则如下:
醇>
- 密码必须至少包含八个字符。
- 密码必须只包含字母和数字。
- 密码必须至少包含两位数字。 编写一个程序,提示用户输入密码,如果遵循规则则显示有效密码,否则显示无效密码。
我知道这是一种更有效率的方法,但我刚刚开始,所以我现在不一定需要做那些。只想完成这个问题。
计数器/累加器工作正常,但我没有收到任何错误,但我无法正确处理if条件,因此该程序会打印出有效密码"
password = str(input("Enter in a password to be checked: "))
def valid_password_checker(password):
from string import ascii_lowercase as alphabet
digits = '0123456789' # creates a string of digits
digit = 0 # acc for digits
length = 0 # acc for length
for char in password: # calls on each character in string
if char in alphabet:
length += 1
if char in digits:
digit += 1
if digit >= 2:
flag = True
if length >= 8 and digit is True:
print("valid password")
else:
print("Password does not contain enough characters or digits.")
else:
print("Password does not contain enough digits.")
valid_password_checker(password)
答案 0 :(得分:1)
现有代码存在的问题是,变量digit
是一个数字,因此您在digit is True
语句中执行if
始终返回False
。如果您删除digit is True
,则现有解决方案将有效。看看我的版本:
def valid(password):
digits = 0
characters = 0
for char in password:
if char.isalpha():
characters += 1
elif char.isdigit():
digits += 1
characters += 1
if characters >= 8:
if digits >= 2:
print("Password is valid")
else:
print("Password doesn't contain enough digits")
else:
print("Password doesn't contain enough characters")
我从原作中做了以下修改:
str.isdigit()
检查字符是否为数字。str.isalpha()
检查字符是否为字母表中的字母for
循环之外的计数操作以外的所有内容,以便该函数不会打印多个内容如果您愿意,可以撤消前两项更改,如果您担心您的老师知道您要求帮助。但是,我不会提供打印的解决方案"密码不包含足够的数字"输入密码中有多个字符。
答案 1 :(得分:0)
你可以这样写:
password = str(input("What is the password that you want to validate: "))
def get_digits(password):
return [i for i in password if i.isdigit()]
numbers = ''.join(get_digits(password))
if (len(password) < 8) or (len(numbers) < 2):
print(password, "is an invalid password")
else:
print(password, "is a valid password")
美好而简单。