-1
def ceasarEncipher(pt,key):
    for i in range(0,len(pt)):
        ct=""
        currentChar=pt(i)
        numericChar=ord(currentChar)-ord('a')
        numericNewChar=(numericChar+key)% 26
        numbericNewChar=numericChar + ord('a')
        newChar=chr(numericNewChar)
        ct= ct + newChar
    return ct

这就是我要回来的

ceasarEncipher('abcdef',1)

还有一个问题,我希望问题返回 'bcdefg',但它返回的 '\x01\x02\x03\x04\x05\x06' 我很困惑,请帮助 - 谢谢

4

3 回答 3

4

这是因为pt是一个字符串,在这里:

currentChar=pt(i)

您尝试将其作为函数调用,并传入参数i。请记住,(...)在 Python 中添加一个对象后会调用该对象。

我认为您真正想做的是使用 . 为此,您需要使用方括号:pti

currentChar=pt[i]

但是,几乎没有理由这样做:

for i in range(len(collection)):
    var = collection[i]

因为您可以更有效地完成相同的任务enumerate

def ceasarEncipher(pt,key):
    for idx,_ in enumerate(pt):
        ct=""
        numericChar=ord(idx)-ord('a')
        numericNewChar=(numericChar+key)% 26
        numbericNewChar=numericChar + ord('a')
        newChar=chr(numericNewChar)
        # This is the same as `ct = ct + newChar`
        ct += newChar
    return ct

在上面的代码中,对于 for 循环的每次迭代,idx都将是当前索引。

于 2013-11-07T19:44:16.940 回答
2

这里

currentChar = pt(i) #It is considering this as a function call. 

应该

currentChar = pt[i] #access the index i of string pt

演示:

>>> def ceasarEncipher(pt,key):
...     for i in range(0,len(pt)):
...         ct=""
...         currentChar=pt[i]
...         numericChar=ord(currentChar)-ord('a')
...         numericNewChar=(numericChar+key)% 26
...         numbericNewChar=numericChar + ord('a')
...         newChar=chr(numericNewChar)
...         ct= ct + newChar
...     return ct
... 
>>> ceasarEncipher('abcdef',1)
'\x06'
>>> 
于 2013-11-07T19:44:16.567 回答
1

Python 使用方括号来索引字符串[]

currentChar = pt[i]
于 2013-11-07T19:44:40.253 回答