有什么方法可以将字符串转换回先前的字符串?

时间:2020-04-13 20:32:35

标签: python python-3.x

问题描述:

您将所有密码写在日记中,以免您忘记密码。但是显然,这太冒险了,因此您想出了一个简单的计划,只需将所有字母按一定的步调来编写即可。例如:如果您将步长确定为3,则“ a”将变为“ d”,而“ k”将变为“ n”,因此对于所有字母。最后的字母将简单地圈回到“ a”。在这种情况下,“ y”将变为“ b”,依此类推。现在,您只需要记住步长,然后便可以随时检查密码了。


输入:

两个元素的列表。

第一个元素是一个只包含从日记中提取的字母的字符串,第二个元素是步长。

输出:

表示密码的字符串


Sample input: ['ytLvei', 4]

Sample output: upHrae

说明:

密码为“ upHrae”。按4步更改后,

u变成y

p变成了t

H变成L,

r变成了v

a变为e

e成为我

因此日记中写的是ytKveh


Sample input: ['banana', 7]

Sample output: utgtgt

要获得上述输出,我已编写了下面的代码。

import at
n = ast.literal_eval(input())
n1 = n[0]
step = n[1]
def enc_dec(string,step):
    result = ''
    for i in string:
        temp = ''
        if i=='':
            result = result+i
        elif i.isupper():
            temp = chr((ord(i) - step - 65) % 26 + 65)
        else:
            temp = chr((ord(i) - step - 97) % 26 + 97)
        result = result + temp
    return result
print(enc_dec(n1,step))

我的示例测试用例

Sample input1: ['banana', 7]

Sample output2: utgtgt

Sample input2: ['ytLvei', 4]

Sample output2: upHrae

以上示例输入均通过,但是当我尝试将'upHare'转换为'ytLvei'时,我得到了另一个输出,即'qlCnwz'

谁能告诉我为什么会这样?

3 个答案:

答案 0 :(得分:3)

这是因为您要在步骤4的 up 中进行更改。您需要将其向下更改4。您的代码也不起作用-您不能通过python中的strs! 这是应该起作用的新代码:

letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
def convert_str(string, step):
    converted = ""
    for char in string:
        if char != "Z":
            converted += letters[letters.index(char) + step]
        else:
            converted += letters[step-1]
    return converted

in_str = input("string: ")
print(convert_str(in_str, 4))

这将使upHareytLevi。 要向下转换,请使用负数:

print(convert_str(in_str, -4))

答案 1 :(得分:1)

所描述的密码在一个方向旋转字母以进行编码,在另一个方向旋转以进行解码;它们不是可互换的操作。如果在测试输入时不允许您指定否定步骤,请定义不同的编码/解码功能:

def encode(message: str, step: int) -> str:
    return enc_dec(message, step)

def decode(message: str, step: int) -> str:
    return enc_dec(message, -step)

现在您可以这样做:

>>> print(decode('upHrae', 4))
ytLvei

答案 2 :(得分:0)

即使大小写不同,这也应该起作用

import ast
n = ast.literal_eval(input())
string = n[0]
step = n[1]
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
l1='abcdefghijklmnopqrstuvwxyz'
l2='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
converted = ""
def convert_str(string, step):
    converted = ""
    for char in string:
        if char.islower():

            converted += l1[l1.index(char) + step]
        elif char.isupper():
            converted += l2[l2.index(char) + step]
        elif char != "Z":
            converted += letters[letters.index(char) + step]
            print(converted)
        else:
            converted += letters[step-1]
    return converted
print(convert_str(string, -step))