字符串操作Python

2024-05-19 01:50:36 发布

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

我试图修改一个字符串,把每个字母表替换成前面两个位置的字母表。e、 g.“a”替换为“c”,“b”替换为“d”。唯一的例外是“y”应该被“a”替换,“z”应该被“b”替换(循环返回开始)。在

我已经为它编写了以下代码,这似乎起到了作用,但是输出格式有点破坏了它。在

string = "g fmnc wms bgblr rpylqjyrc gr zw fylb."
print string
for i in string:
    if i.isalpha():
        if ord(i)>120:
            print chr(ord(i)-24),
        else:
            print chr(ord(i)+2),
    else: 
        print i

输出:

^{pr2}$

预期输出:

g fmnc wms bgblr rpylqjyrc gr zw fylb.
i hope you didnt translate it by hand.

有没有其他更快的方法来解决这个问题?在


Tags: 字符串stringifelse字母表printgrwms
3条回答

print i,语法在正在打印的内容的末尾添加一个空格。您可以通过将所有字符放在一个列表中并在末尾''.join()来解决这个问题:

string = "g fmnc wms bgblr rpylqjyrc gr zw fylb."
print string
answer = []
for i in string:
    if i.isalpha():
        if ord(i)>120:
            answer.append(chr(ord(i)-24))
        else:
            answer.append(chr(ord(i)+2))
    else: 
        answer.append(i)
print ''.join(answer)

当然,正如其他人所建议的那样,string.translate可能会更直接

你也可以使用这个可怕的列表理解的混蛋。在

message = "g fmnc wms bgblr rpylqjyrc gr zw fylb."
print message
print ' '.join([''.join([chr(((ord(letter)+2) % 122) + int(ord(letter)/121.0)*96) if ord(letter)>96 else letter for letter in word]) for word in message.split()])

下面是一个使用字符串.翻译公司名称:

from string import translate, maketrans, ascii_lowercase

s='g fmnc wms bgblr rpylqjyrc gr zw fylb.'

rot2=maketrans(
    ascii_lowercase,
    ascii_lowercase[2:]+ascii_lowercase[:2]
    )

print s.translate(rot2)

相关问题 更多 >

    热门问题