刚开始学习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
的长度:
原因如下:
- 集合是唯一对象的集合。
- x的元素的集合,是唯一的集合 构成 x 的元素。
- 因此,如果 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/