刚开始学习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。代码有什么问题?谢谢!
答案 0 :(得分:6)
x
的每个字母都将始终包含在set(letters of x)
中,因此您的函数将始终返回False
要解决您的问题,您可以验证set(x)
的长度是否等于x
的长度:
这就是原因:
def has_unique_letters(x):
return len(set(x)) == len(x)
如果x仅包含唯一字母,则返回True
,否则为False
如果上&amp; pw中的小写字母是等价的,在处理之前必须将输入参数转换为较低(或较高)的情况:
def has_unique_letters(x):
lower_x = x.lower()
return len(set(lower_x)) == len(lower_x)
[edit]在密码上放置一个唯一的字母约束会减少域空间;也许这不是一个好主意。
答案 1 :(得分:0)
这是另一种方法:
def has_unique_letters(string):
return not bool([x for x in __import__('collections').Counter(string).values() if x > 1])