python中的缺失字母方法

python中的缺失字母方法,python,python-3.x,missing-data,Python,Python 3.x,Missing Data,您好,我有下面的代码,但它没有按预期工作,我看不出我在哪里犯了错误,我使用的是python 3 missing_letters方法未按预期工作,因为第二个输出错误,我需要它接受输入并使用字母表字符串作为比较字符串返回缺少的字母 alphabet = "abcdefghijklmnopqrstuvwxyz" test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the def missing_let

您好,我有下面的代码,但它没有按预期工作,我看不出我在哪里犯了错误,我使用的是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 alphabet=“abcdefghijklmnopqrstuvxyz” 测试_miss=[“zzz”,“亚皮纹”,“敏捷的棕色狐狸跳过 def缺少_字母(字符串): 比较=直方图(字符串) 对于已排序的输入(比较): 如果输入字母表: 结果=字母表。替换(键“”) 返回结果#打印结果 其他: 一无所获 对于未命中测试中的字母: 如果缺少字母(字母)=无: 打印(字母“使用所有字母”) 其他: 打印(字母“缺失字母”,缺失字母(字母)) #输出:zzz缺少字母ABCDEFGHIJKLMNOPQRSTUVXY #亚皮纹缺少字母bcdefghijklmnopqrstuvwxyz #敏捷的棕色狐狸跳过懒惰的狗用所有的字母
主要的问题是,你
在循环内部返回
,即在检查第一个字母后返回。此外,你似乎在迭代单词中的字母,并检查它们是否在字母表中,而不是反过来,这将更加简洁。此外,似乎没有必要创建字母频率的直方图c是的

您可以尝试以下方法:

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

主要的问题是,你
在循环内部返回
,即在检查第一个字母后返回。此外,你似乎在迭代单词中的字母,并检查它们是否在字母表中,而不是反过来,这将更加简洁。此外,似乎没有必要创建字母频率的直方图c是的

您可以尝试以下方法:

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

使用集合进行成员资格测试:首先制作一个集合

In [10]: alphabet = "abcdefghijklmnopqrstuvwxyz"

In [11]: alphabet = set(alphabet)
对于字符串'ab','直方图返回

In [12]: compare = {'a':1,'b':1}
使用集合方法确定差异

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'}

使用集合进行成员资格测试:首先制作一个集合

In [10]: alphabet = "abcdefghijklmnopqrstuvwxyz"

In [11]: alphabet = set(alphabet)
对于字符串'ab','直方图返回

In [12]: compare = {'a':1,'b':1}
使用集合方法确定差异

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'}

您不需要计算字母的数量,可以直接使用一个集合(输入的
字符串中每个字母只出现一次)。拥有该集合后,您可以从字母表中减去该集合,最终得到一个包含缺失字母的集合:

从字符串导入ascii\u小写
字母表=集合(ascii_小写)
def缺少_字母(字符串):
返回字母表-集合(string.lower())
打印(缺少字母(“abcdefghijklmnopqrstuv”))

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

您不需要计算字母数,您可以直接使用一个集合(输入的
字符串中每个字母只出现一次)。一旦你有了这个集合,你可以从字母表中减去这个集合,你将得到一个包含缺少的字母的集合:

从字符串导入ascii\u小写
字母表=集合(ascii_小写)
def缺少_字母(字符串):
返回字母表-集合(string.lower())
打印(缺少字母(“abcdefghijklmnopqrstuv”))

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

您的方法“def missing\u 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

您的方法“def缺少_字母(字符串):”是错误的。 我已经纠正了它,下面的代码/方法将起作用,请尝试

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

你的代码试图做什么?你到底在哪里面临问题?请具体和简洁。你可以尝试像
''这样简单的东西。加入(排序(set(alphabet)-set(test))
你的代码试图做什么?你到底在哪里面临问题?请具体和简洁。你可以尝试像
''这样简单的东西。加入(分类(集合(字母表)-集合(测试)))