缺少字母方法与python

问题描述 投票:0回答:4

你好,我有下面的代码,但它没有按预期工作,我看不到我犯了错误,我使用python 3,missing_letters方法没有按预期工作,因为第二个输出是错误的,我需要它采取一个输入并使用字母串作为比较返回缺失的字母

alphabet = "abcdefghijklmnopqrstuvwxyz"   

test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the 

def missing_letters(string):
    compare = histogram(string) 
    for key in sorted(compare): 
        if key in alphabet: 
            result = alphabet.replace(key,'') 
            return result # print result
        else:
            return None

for letters in test_miss: 
    if missing_letters(letters) == None:
        print(letters, 'uses all the letters')   
    else:
        print(letters , 'is missing letters', missing_letters(letters))

# output: zzz is missing letters abcdefghijklmnopqrstuvwxy                                                                               
# subdermatoglyphic is missing letters bcdefghijklmnopqrstuvwxyz                                                                 
# the quick brown fox jumps over the lazy dog uses all the letters
            
python python-3.x missing-data
4个回答
0
投票

你的方法'def missing_letters(string):'是错误的。我已经纠正了它,以下代码/方法将起作用,尝试一下

alphabet = "abcdefghijklmnopqrstuvwxyz"   

test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the lazy dog"]     

def missing_letters(string):
    result = alphabet
    compare = set(string)# use histogram to make a dictionary
    compare=sorted(compare)
    for key in compare: # iterate and sort in alphabetical order
        if key in alphabet: # check if the key in alphabet
            result = result.replace(key,'')# remove it from alphabet
    return result

# Test the function          
print(missing_letters("ab")) # output: bcdefghijklmnopqrstuvwxyz

##### test_miss for loop #####

for letters in test_miss: 
    if len( missing_letters(letters) ) == 0:
        print(letters, 'uses all the letters')   
    else:
        print(letters , 'is missing letters', missing_letters(letters))

# output: zzz is missing letters abcdefghijklmnopqrstuvwxy                                                                               
# subdermatoglyphic is missing letters bcdefghijklmnopqrstuvwxyz                                                                 
# the quick brown fox jumps over the lazy dog uses all the letters

1
投票

你不需要计算字母的数量,你可以直接使用一个集合(你的输入string每个字母只会出现一次)。一旦你有了这个集合,你就可以从字母表中减去这个集合,你最终得到一个包含缺失字母的集合:

from string import ascii_lowercase

alphabet = set(ascii_lowercase)

def missing_letters(string):
    return alphabet - set(string.lower())

print(missing_letters("abcdefghijklmnopqrstuv"))

将输出{'w', 'y', 'x', 'z'}。请注意,ascii_lowercase只是一个包含所有小写字母的字符串。


0
投票

主要的问题是你在循环内部return,即在检查了第一个字母之后。此外,似乎你正在迭代单词中的字母,并检查它们是否在字母表中,而不是相反,这将产生更多的senes。此外,似乎没有必要创建字母频率的直方图。

你可以尝试这样的事情:

def missing_letters(string):
    missing = []
    for key in alphabet:
        if key not in string:
            missing.append(key)
    return ''.join(missing) or None

或者你可以将字母和字符串转换为set并使用set difference -

def missing_letters(string):
    return ''.join(sorted(set(alphabet) - set(string))) or None

0
投票

使用集合进行成员资格测试:首先使alphabet成为一组

In [10]: alphabet = "abcdefghijklmnopqrstuvwxyz"

In [11]: alphabet = set(alphabet)

对于字符串'ab'`直方图返回

In [12]: compare = {'a':1,'b':1}

使用set方法确定差异

In [13]: alphabet.difference(compare.keys())
Out[13]: 
{'c',
 'd',
 'e',
 'f',
 'g',
 'h',
 'i',
 'j',
 'k',
 'l',
 'm',
 'n',
 'o',
 'p',
 'q',
 'r',
 's',
 't',
 'u',
 'v',
 'w',
 'x',
 'y',
 'z'}
© www.soinside.com 2019 - 2024. All rights reserved.