-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)

また、もう 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 に答える