[英]Ensuring that each letter appears only once in the password
刚开始学习python并尝试使用循环编写检查唯一字母的代码,如下所示:
def has_unique_letters(x):
count = 0
letters = set(x)
while count < len(x):
if x[count] in letters:
return False
count += 1
return True
但是,无论我在x中输入什么,它都将返回false。 代码有什么问题? 谢谢!
x
每个字母将始终包含在set(letters of x)
,因此您的函数将始终返回False
为了解决您的问题,您可以验证set(x)
的长度等于x
的长度:
这是为什么:
def has_unique_letters(x):
return len(set(x)) == len(x)
如果x仅包含唯一字母,则返回True
,否则返回False
如果pw中的大写和小写字母等效,则在处理之前,必须将输入参数转换为小写(或大写):
def has_unique_letters(x):
lower_x = x.lower()
return len(set(lower_x)) == len(lower_x)
[edit]在密码上设置唯一字母约束会减少域空间; 也许这不是一个好主意。
这是另一种方法:
def has_unique_letters(string):
return not bool([x for x in __import__('collections').Counter(string).values() if x > 1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.