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'我非常困惑请帮忙 - 谢谢
答案 0 :(得分:4)
这是因为pt
是一个字符串,在这里:
currentChar=pt(i)
您尝试将其称为函数,并传入参数i
。请记住,在Python中的对象之后添加(...)
会调用该对象。
我认为您真正想做的是 index pt
i
。为此,您需要使用方括号:
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
将是当前索引。
答案 1 :(得分: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'
>>>
答案 2 :(得分:1)
Python使用方括号来索引字符串[]
:
currentChar = pt[i]