在python中检查两个字符是否相等

时间:2018-07-27 15:35:45

标签: python

我正在尝试编写一个程序,以在按字母顺序排列的字母数组中查找丢失的字母。例如[a,b,c,d,f]丢失=>'e'。

现在我有这个:

def find_missing_letter(chars):

    # Creates variables of complete alphabet.

    alphabetLower = list(string.ascii_lowercase)
    enumeratedLower = []
    alphabetUpper = list(string.ascii_uppercase)
    enumeratedUpper = []

    # Checks if the function has to enumerate the upper- or lowercase alphabet.

    if(chars[0].islower()):
        for c, value in enumerate(alphabetLower, 1):
            enumeratedLower.append([c, value])
    else:
        for c, value in enumerate(alphabetUpper, 1):
            enumeratedUpper.append([c, value])

    # Checks at what letter the characters begin. 
    # After that it checks if the following letters are equal to eachother.

    if(chars[0].isupper()):
        for x in range(1, 26):
            print enumeratedUpper[x][1]
            print 'char:' + chars[0]
            if(chars[0] == enumeratedUpper[x][1]):
                for i in range(enumeratedUpper[x][0], len(chars)):
                    if(chars[i] != alphabetUpper[i]):
                        return alphabetUpper[i]
    else:
        for x in range(1, 26):
            print enumeratedLower[x][1]
            print 'char:' + chars[0]
            if(chars[0] == enumeratedLower[x][1]):
                for i in range(enumeratedLower[x][0], len(chars)):
                    if(chars[i] != alphabetLower[i]):
                        return alphabetLower[i]

但是,if语句

if(chars[0] == enumeratedUpper[x][1]):

if(chars[0] == enumeratedLower[x][1]):

由于某种原因无法正常工作。该语句的原因是因为给定的字符(字符)数组可以以随机字母开头(不必以'a'或'A'开头)。我把打印语句放在那里,看看有什么问题,输出是这样的:

b
char:o
c
char:o
d
char:o
e
char:o
f
char:o
g
char:o
h
char:o
i
char:o
j
char:o
k
char:o
l
char:o
m
char:o
n
char:o
o
char:o
p
char:o
q
char:o
r
char:o
s
char:o
t
char:o
u
char:o
v
char:o
w
char:o
x
char:o
y
char:o
z
char:o

3 个答案:

答案 0 :(得分:1)

您使事情变得有些复杂。 无需分别处理大写和小写字母。 另外,您不必使用enumerate即可使用index方法来查找 字符开始的地方。

import string 

def find_missing_letter(chars):   
    # Creates variables of complete alphabet.
    alphabet = string.ascii_lowercase if chars[0].islower() else string.ascii_uppercase
    # Checks at what letter the characters begin
    start = alphabet.index(chars[0])
    # After that it checks if the following letters are equal to each other.
    for x, y in zip(chars, aplhabet[start:]):
        if x != y:
            return y

示例输出:

>>> find_missing_letter('abcdf')
'e'

答案 1 :(得分:0)

您的方法似乎太复杂了。只需使用mapord将字符列表转换为数字列表,然后枚举结果列表以查找第一个缺少的数字,然后使用chr

将其转换回char
>>> l = ['a', 'b', 'c', 'd', 'f']
chr(next(i for i,j in enumerate(map(ord, l), ord(l[0])) if i!=j))
'e'

答案 2 :(得分:0)

您可以使用生成器表达式搜索不包含在char中的字母,如果需要,请按字母顺序对其进行排序

>>> chars = ['a', 'b', 'd', 'f']
>>> alphabet = string.ascii_lowercase if chars[0].islower() else string.ascii_uppercase
>>> sorted(letter for letter in alphabet if letter not in chars and letter > chars[0] and letter < chars[-1])

['c', 'e']