python - 确保每个字母在密码中只出现一次

标签 python while-loop set

刚开始学习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)

[编辑] 对密码设置唯一字母限制可减少域空间;也许这不是一个好主意。

关于python - 确保每个字母在密码中只出现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498678/

相关文章:

java - java 逐行读取

algorithm - 知道对顺序的一组元素的排序算法

python - 如何修复 : "Testing pyext configuration : Could not build python extensions"

python - 隔离相似颜色的单个区域的最佳方法是什么?

c - 为什么下面的程序会陷入循环?

java - 输出在 Java 循环的开始和结束时出现偏差

python - bool 列上的 sqlalchemy 约束

Python使用均方根法拟合多条直线

c++ - 当终止条件取决于来自不同部分的更新时,为什么 OMP 并行部分中的 while 循环无法终止

python - Python 中的属性装饰器和设置函数