我执行Decode()时打印了其他字母

时间:2018-11-15 19:03:24

标签: python

因此,当我在Encode()函数中对“ hello”进行编码时,如果将其移位三位,则会得到结果“ khoor”。当我尝试使用我的解码功能将“ khoor”解码为三位时,我会得到“ hellor”。这很奇怪,因为尽管仅解码了5个字母,但仍返回了额外的字母“ r”。我尝试解码的每个字符串都会发生这种情况,而且我注意到,要编码的每个字符串的最后一个字母都会作为附加字母添加到解码的字符串中。

SELECT T1.Serial,
       ISNULL(COUNT(T2.Serial),0) N
FROM T1
LEFT JOIN T2
    ON T1.Serial = T2.Serial
GROUP BY T1.Serial
;

2 个答案:

答案 0 :(得分:2)

缩进错误使package.json的{​​{1}}函数成为else循环的Decode(这是else循环的鲜为人知的功能:如果未遇到for,则会执行for,并在您的情况下添加一个额外的字母)。

这说明了为什么没有错误但行为异常的原因。

更多内容:Why does python use 'else' after for and while loops?

此外,一种非常笨拙的字母搜索方式是使用break,当您可以直接使用字符代码计算索引时:

else

除了#2:请注意,解码和编码方法非常相似。将index作为参数进行因子分解(一种方法与另一种方法相反)

答案 1 :(得分:1)

在将所有input语句更改为raw_input之前,尝试运行您的脚本时出现错误。但是我不太了解if i.strip() and i in ALPHABET:背后的逻辑。同样,当Python允许您直接附加字符串时,也不必一次将一个字母累积在一个列表中,然后再将它们重新加入。无论如何,当我将Decode()函数简化为以下代码时,它对我来说都是有效的:

def Decode():
    string = raw_input("Please enter the string you wish to decode.\n").lower().strip()
    if string.isalpha():
        shift = int(raw_input("Enter the key. (Number of shifts used when encoding original word. \n"))
        return ''.join([ ALPHABET[(ALPHABET.index(c) - shift) % 26] for c in string])

我还添加了.lower().isalpha()检查,以防用户使用任何大写字母或非字母字符串,但是您可以添加其他类似的东西来处理其他用例。