我正在做一个密码检查器,其中一个要求是检查密码是否可以是纽约牌照(即3个字母然后4个数字(
我是这样做的:
def check_license(password):
if len(password) == 7:
if password[0].isalpha() and password[1].isalpha() and password[2].isalpha() and password[3].isdigit() and password[4].isdigit() and password[5].isdigit() and password[6].isdigit():
print('License: -2')
score -= 2
但我想知道是否有一种更干净的方式来格式化第三行,或者只是一种更快的方式
您可以使用正则表达式:
import re
def check_license(password):
return bool(re.match(r'^[A-Za-z]{3}[0-9]{4}$', password))
测试字符串的两个切片,如下所示:
def is_license(s):
return len(s) == 7 and s[:3].isalpha() and s[3:].isdigit()
for test in "abc1234", "ab12345", "ab123cd", "abc123a":
print(is_license(test)) # True, False, False, False
这将包括来自其他字母表的字母和数字(例如is_license("和bc123٠")
是True
(。要排除这些,可以添加条件s.isascii()
。