繁体   English   中英

确保每个字母在密码中仅出现一次

[英]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的长度:

这是为什么:

  1. 集合是唯一对象的集合。
  2. x的元素集是组成x的唯一元素的集合。
  3. 因此,如果x仅由唯一元素组成,则x元素集的基数将等于组成x的元素总数。

def has_unique_letters(x):
    return len(set(x)) == len(x)

如果x仅包含唯一字母,则返回True ,否则返回False

[edit]-对小写/大写无动于衷的问题:

如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM