python实现密码的强度,Python密码强度

I am programming a password strength code on python and i'm trying to find out if my password (p) contains a number, I have found out how to see if it contains upper and lower case letter by p.isupper() or p.islower(). I have also put them two together. My friend has told me how to see if the password only contains number but I need your help now.

running=True

while running:

p=raw_input("What is your Password? ")

if len(p) <6:

print "Your Password is too short"

if len(p) >12:

print "Your Password is too long"

if len(p) == 6 or 7 or 8 or 9 or 10 or 11 or 12:

print "Password Length OK"

running=False

print "Loop Broken" #this will be deleted, only for my help now

if p.isupper():

print "Your Password is weak as it only contains capital letters"

if p.islower():

print "Your Password is weak as it only contains lower case letters"

if p.isupper and p.islower:

print "Your Password is of medium strength, try adding some numbers"

try:

int(p)

print "Your Password is weak as it only contains numbers"

except (ValueError, TypeError):

pass

All I need now is the code for, if the password contains lower or upper case letters and numbers.

解决方案

To me, regex would definitely be the easiest way of going about this.

Given a sample password password, the way you would check it would be:

import re

# Check if contains at least one digit

if re.search(r'\d', password):

print "Has a digit"

# Check if contains at least one uppercase letter

if re.search(r'[A-Z]', password):

print "Has uppercase letter"

# Check if contains at least one lowercase letter

if re.search(r'[a-z]', password):

print "Has lowercase letter"

For your other pieces, you can continue to use .isupper() and .islower().

By the way, this portion of your code:

if p.isupper and p.islower:

print "Your Password is of medium strength, try adding some numbers"

Will not function how you want it to. First, you're not actually calling the methods, since you haven't put the parentheses--you need to write if p.isupper() and p.islower():. Second, this doesn't actually do what you want it to. You're trying to check that it contains both lowercase and uppercase numbers. Instead, you're checking both that it is completely uppercase and completely lowercase, and obviously it can't be both, so that if statement will always return False. Instead, you'll want to use something like:

if re.search(r'[a-z]', password) and re.search(r'[A-Z]', password):

Or, alternatively, without re:

import string

if any(letter in string.ascii_lowercase for letter in password) and \

any(letter in string.ascii_uppercase for letter in password):

Or:

if any(letter.islower() for letter in password) and \

any(letter.isupper() for letter in password):

I happen to prefer re because it's more concise.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值