Python:使用for循环更改String中的值

时间:2014-02-04 03:13:48

标签: python

我正在尝试在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'。有什么帮助吗?

2 个答案:

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