gpt4 book ai didi

python - 将字符串中的每个字符更改为字母表中的下一个字符

转载 作者:行者123 更新时间:2023-12-05 08:42:51 24 4
gpt4 key购买 nike

我在 Ubuntu 上使用 PyCharm 在 Python 2.7 中编码。

我正在尝试创建一个函数,它将接受一个字符串并将每个字符更改为字母表中的下一个字符。

def LetterChanges(str):
# code goes here
import string
ab_st = list(string.lowercase)
str = list(str)
new_word = []
for letter in range(len(str)):
if letter == "z":
new_word.append("a")
else:
new_word.append(ab_st[str.index(letter) + 1])
new_word = "".join(new_word)
return new_word


# keep this function call here
print LetterChanges(raw_input())

当我运行代码时,出现以下错误:

/usr/bin/python2.7 /home/vito/PycharmProjects/untitled1/test.py
test
Traceback (most recent call last):
File "/home/vito/PycharmProjects/untitled1/test.py", line 17, in <module>
print LetterChanges(raw_input())
File "/home/vito/PycharmProjects/untitled1/test.py", line 11, in LetterChanges
new_word.append(ab_st[str.index(letter) + 1])
ValueError: 0 is not in list

Process finished with exit code 1

我在第 11 行写了什么?如何为每个字符获取字母表中的以下字符并将其附加到新列表?

非常感谢。

最佳答案

我觉得你把事情搞得太复杂了。

只需使用模数滚动到字符串的开头:

from string import ascii_letters

s='abcxyz ABCXYZ'
ns=''
for c in s:
if c in ascii_letters:
ns=ns+ascii_letters[(ascii_letters.index(c)+1)%len(ascii_letters)]
else:
ns+=c

如果你愿意,你可以将其减少到一个不可读的行:

''.join([ascii_letters[(ascii_letters.index(c)+1)%len(ascii_letters)] 
if c in ascii_letters else c for c in s])

无论哪种情况,

Turns      abcxyz ABCXYZ
into bcdyzA BCDYZa

如果你希望它被限制为大小写字母,只需更改导入:

from string import ascii_lowercase as letters

s='abcxyz'
ns=''
for c in s:
if c in letters:
ns=ns+letters[(letters.index(c)+1)%len(letters)]
else:
ns+=c

关于python - 将字符串中的每个字符更改为字母表中的下一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com