如果字符串具有唯一字符,如何创建返回True的函数,否则返回False

时间:2018-10-12 20:45:13

标签: python python-3.x

例如:"xwzfyfjvmehjnscfdvyosifv"应该返回False,因为它有多个"f"(以及其他重复的字符)

"fnyqov"应该返回True。

我的问题是我的代码大多数时候都可以工作,但是"xwzfyfjvmehjnscfdvyosifv"保留returnig True

大写字母和小写字母都应受到相同的威胁,因此"woOman"应该返回False

这是我的代码:

def is_isogram(string):
    string = string.lower()
    if string == "":
        return True
    for i in string:
        if string.count(i) >= 2:
            return False
        elif is_repeated(string) == True:
            return False
        else: 
            return True

def is_repeated(string):
    last_letter = ""
    for i in string:
        if last_letter.lower() == i.lower():
            return True
            break
        last_letter = i
    return False

print(is_isogram("xwzfyfjvmehjnscfdvyosifv"))

3 个答案:

答案 0 :(得分:4)

您可以使用set

def unique(s):
    return len(set(s.lower())) == len(s)

set将删除重复项,因此您可以将其长度与原始长度进行比较。

答案 1 :(得分:0)

尝试一下

def func(string):
    if len(set(string.lower())) == len(string.lower()):
        return True
    else:
        return False

答案 2 :(得分:0)

def is_unique(test):
    test = test.lower()
    for c in test:
        if test.count(c) != 1:
            return False
    return True

test1 = "xwzfyfjvmehjnscfdvyosifv"
test2 = "woOman"
test3 = "abcdefghijklmnop"

is_unique(test1)
>>>False
is_unique(test2)
>>>False
is_unique(test3)
>>>True

或使用set()

len(set(test1.lower()))==len(test1)
>>>False
len(set(test2.lower()))==len(test2)
>>>False
len(set(test3.lower()))==len(test3)
>>>True