我正在尝试在python中构建一个caesar密码,所以我试图遍历字符串并更改字符。
def caesar_shift(s, n):
letters = list(s)
for x in letters:
if x == ' ':
continue
x = ord(x)
x += n
while (97 < x < 122) != True:
if x < 97:
x += 26
elif x > 122:
x -= 26
letters = ''.join(letters)
return letters
print caesar_shift('a',1)
我的输出显示x变为98,然后变成'b',但是当打印实际字符串时,它显示的全部是字母'a'。有什么帮助吗?
答案 0 :(得分:1)
x
是循环中的局部变量,不会更改数组中元素的值。
您需要将x
的新值重新分配回数组:
for i,x in enumerate(letters):
# ... rest of your loop
letters[i] = x
来自enumerate()
函数的Python文档:
返回枚举对象。序列必须是一个序列,一个迭代器, 或其他支持迭代的对象。 next()方法 enumerate()返回的迭代器返回一个包含a的元组 count(从默认为0的开始)和从中获得的值 迭代序列:
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
答案 1 :(得分:0)
试试这段代码:
#!/usr/bin/python
def encrypt(s,n):
letters=list(s)
cipher=[]
for x in letters:
if x==' ':
continue
else:
p=ord(x)+n
if(p>122):
p=p-25
cipher.append(chr(p))
return cipher
print encrypt('abcde',1)