在字符串中递增字符

2024-10-01 07:11:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您有一个字符串 s 和一个整数数组 roll 。我想根据 roll 中的数字将 s 中的每个字母递增1。例如,如果 s = "abc" roll = [1,2] ,那么输出将是 s = "ccc" 。在

当我运行下面的代码时,我一直得到原始字符串 s 为什么会这样?在

def  rollTheString(s, roll):
  for i in range(0, len(roll)):
     for j in range(0,i):
       s[j] = (chr(ord(s[j])+1));
  return s;

Tags: 字符串代码inforlendef字母range
3条回答

字符串是不可变的,因此不能通过切片来更改它们。您需要创建一个新的字符串,最好是通过使用join进行理解。在

from itertools import izip_longest

s = "abc"
roll = [1, 2]

>>> "".join(chr(ord(c) + (n or 0)) for c, n in izip_longest(s, roll))
'bdc'

 # a + 1 = b, b + 2 = d, c + 0 = c

看看你的嵌套循环,你可能正在创建一个累加的各种类型。您甚至没有使用roll中的值,只是使用了它的长度。在

我把你的问题分成两部分:

  • 确定要从s添加到每个字符的偏移量。在
  • 使用上面说明的join方法根据偏移量创建一个新字符串。在

您得到的错误应该是:

TypeError: 'str' object does not support item assignment

这是因为在Python中,字符串是不可变的,因此不能适当地更改它们的字符。在

考虑以下问题:

^{pr2}$

你可以用这个

def rollTheString(s, roll):
    increment = [0] * len(s)
    a_to_z = [chr(i) for i in range(97, 97 + 26)]
    for num in roll:
        for i in range(num):
            increment[i] += 1
    result = ""
    for i in range(len(s)):
        index = ord(s[i]) + increment[i] - 97
        index = index % 26
        result += a_to_z[index]

    return result

相关问题 更多 >