为什么我的if语句没有比较列表项

2024-09-30 23:38:33 发布

您现在位置:Python中文网/ 问答频道 /正文

    alphabet =["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
def decoder(input):
    inputlist = list(input)
    inputlength = len(input)
    alphabetlength = len(alphabet)
    result = "Decoded Sentence: "
    for x in range(inputlength):
        for y in range(alphabetlength):
            if inputlist[x] is alphabet[y]:
                print ("hi")
                if y == 24:
                    result += "a"
                if y == 25:
                    result += "b"
                else:
                    result += alphabet[y+2]
            if inputlist[x] is "(":
                result += "("
            if inputlist[x] is ")":
                result += ")"
            if inputlist[x] is ".":
                result += "."
            if inputlist[x] is " ":
                result += " "
    return result

我的代码应该把一个句子的字母表增加2。例如:a->;c、l->;n 我使用print(“hi”)语句来检查if语句是否被评估为true,但它从未被评估为true。有人能告诉我为什么吗?在


Tags: ingtforinputlenifisrange
3条回答

is检查对象的标识。因为您似乎在测试两个字符串是否具有相同的值(不是相同的object),所以最好使用==。例如:

if inputlist[x] == alphabet[y]

您也可以对其他if语句进行相同的更新。在

问题是is比较字符串的同一性和不相等性。两个相等的短字符串可能是相同的,这是因为CPython做了一些字符串内接,但您通常不应该建立在这种行为的基础上。相反,使用==来比较字符串的相等性。在

请注意,使用^{},并使用^{}创建的映射,可以更好地实现这一点:

>>> table = str.maketrans('abcdefghijklmopqrstuvwxyz', 'cdefghijklmopqrstuvwxyzab')
>>> 'hello world'.translate(table)
'jgooq yqtof'

您可以进一步使用^{},这样就不需要自己键入字母表;或者使用^{}来表示小写和大写字符:

^{pr2}$

除了is精简之外,代码中还有另一个问题:

一旦y == 24,它将中断:首先,a将被添加,然后{}-这将导致错误。在

所以改变你的逻辑

for inp in inputlist:
    if inp in "(). ":
        result += inp
    else: # very important
        for y in range(alphabetlength):
            if inp == alphabet[y]:
                if y == 24:
                    result += "a"
                elif y == 25: # elif instead of if!
                    result += "b"
                else:
                    result += alphabet[y+2]

这甚至可以进一步改进:

如果你做alphabet = 'abcdefghijklmnopqrstuvwxyz',你可以做到

^{pr2}$

相关问题 更多 >