Python- 为什么即使我输入了应该有效的密码,它仍然说密码被拒绝?
Python- Why does it say password denied even when I enter a password that should work?
userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):
if userpass[i].isupper():
uppercounter=uppercounter+1
print(uppercounter)
if uppercounter > 0:
print("working")
else:
print('Password Denied')
raise SystemExit(0)
if userpass[i].islower():
lowercounter=lowercounter+1
print(lowercounter)
if lowercounter > 0:
print('working')
else:
print('Password Denied')
raise SystemExit(0)
if userpass[i].isnumeric():
numbercounter=numbercounter+1
print(numbercounter)
if numbercounter > 0:
print("working")
print("Password Accepted")
else:
print('Password Denied')
raise SystemExit(0)
我正在尝试编写一个必须包含一个大写字母、一个小写字母和一个数字的密码程序。但是 if 语句似乎无法正常工作,每当我输入“Py11”之类的密码时,它都会显示密码被拒绝。
对于您要再次检查所有三个条件的密码的每个字符:
假设您输入了:"hi"
对于第一个循环,您将在字母 "h"
如果它是上层(不是)你的其他人你将被执行 运行 密码被拒绝部分(这就是问题所在)
为了完成您想要的,我建议您这样检查:
if condition1:
pass #add here the counting you are making
elif condition2:
pass #add here the counting you are making
elif condition3:
pass #add here the counting you are making
# [...]
else:
print("password denied")
对于检查上、下、数字的条件,如果你想允许特殊字符,你也需要检查它们
您可以采用其他方式:
userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):
if userpass[i].isupper():
uppercounter=uppercounter+1
if userpass[i].islower():
lowercounter=lowercounter+1
if userpass[i].isnumeric():
numbercounter=numbercounter+1
if uppercounter == 0 or lowercounter == 0 or numbercounter == 0:
print("Password denied")
raise SystemExit(0)
这样你就不必检查其他特殊字符
因为你的逻辑不对。
所以首先,您要输入 Py11
密码,然后它会进入第一个 if 语句。
您的循环采用的第一个值是 Py11
中的 P
。到第二个if语句的时候,马上就到第二个if语句的else语句,因为值还是P
.
我尽量不对你的代码做太多修改,但你可以这样试试:
userpass = input(
'Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter = 0
lowercounter = 0
numbercounter = 0
for i in range(len(userpass)):
print(userpass[i])
if userpass[i].isupper():
uppercounter = uppercounter+1
print(uppercounter)
if uppercounter > 0:
print("working")
elif userpass[i].islower():
lowercounter = lowercounter+1
print(lowercounter)
if lowercounter > 0:
print('working')
elif userpass[i].isnumeric():
numbercounter = numbercounter+1
print(numbercounter)
if numbercounter > 0:
print("working")
if uppercounter <= 0 or lowercounter <= 0 or numbercounter <= 0:
print('Password Denied')
raise SystemExit(0)
else:
print("Password Accepted")
userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):
if userpass[i].isupper():
uppercounter=uppercounter+1
print(uppercounter)
if uppercounter > 0:
print("working")
else:
print('Password Denied')
raise SystemExit(0)
if userpass[i].islower():
lowercounter=lowercounter+1
print(lowercounter)
if lowercounter > 0:
print('working')
else:
print('Password Denied')
raise SystemExit(0)
if userpass[i].isnumeric():
numbercounter=numbercounter+1
print(numbercounter)
if numbercounter > 0:
print("working")
print("Password Accepted")
else:
print('Password Denied')
raise SystemExit(0)
我正在尝试编写一个必须包含一个大写字母、一个小写字母和一个数字的密码程序。但是 if 语句似乎无法正常工作,每当我输入“Py11”之类的密码时,它都会显示密码被拒绝。
对于您要再次检查所有三个条件的密码的每个字符: 假设您输入了:"hi"
对于第一个循环,您将在字母 "h" 如果它是上层(不是)你的其他人你将被执行 运行 密码被拒绝部分(这就是问题所在)
为了完成您想要的,我建议您这样检查:
if condition1:
pass #add here the counting you are making
elif condition2:
pass #add here the counting you are making
elif condition3:
pass #add here the counting you are making
# [...]
else:
print("password denied")
对于检查上、下、数字的条件,如果你想允许特殊字符,你也需要检查它们
您可以采用其他方式:
userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):
if userpass[i].isupper():
uppercounter=uppercounter+1
if userpass[i].islower():
lowercounter=lowercounter+1
if userpass[i].isnumeric():
numbercounter=numbercounter+1
if uppercounter == 0 or lowercounter == 0 or numbercounter == 0:
print("Password denied")
raise SystemExit(0)
这样你就不必检查其他特殊字符
因为你的逻辑不对。
所以首先,您要输入 Py11
密码,然后它会进入第一个 if 语句。
您的循环采用的第一个值是 Py11
中的 P
。到第二个if语句的时候,马上就到第二个if语句的else语句,因为值还是P
.
我尽量不对你的代码做太多修改,但你可以这样试试:
userpass = input(
'Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter = 0
lowercounter = 0
numbercounter = 0
for i in range(len(userpass)):
print(userpass[i])
if userpass[i].isupper():
uppercounter = uppercounter+1
print(uppercounter)
if uppercounter > 0:
print("working")
elif userpass[i].islower():
lowercounter = lowercounter+1
print(lowercounter)
if lowercounter > 0:
print('working')
elif userpass[i].isnumeric():
numbercounter = numbercounter+1
print(numbercounter)
if numbercounter > 0:
print("working")
if uppercounter <= 0 or lowercounter <= 0 or numbercounter <= 0:
print('Password Denied')
raise SystemExit(0)
else:
print("Password Accepted")