Python 有没有办法将字符串转换回上一个?

Python 有没有办法将字符串转换回上一个?,python,python-3.x,Python,Python 3.x,问题说明: 你把所有密码都写在日记里,这样你就不会忘记它们。但是很明显,这太危险了,所以你想出了一个简单的计划,你只需将所有字母表移动一个特定的步骤就可以了。例如:如果你决定你的步数是3,那么“a”将变成“d”,而“k”将变成“n”,所有字母表也是如此。最后的字母将简单地循环回“a”。在这种情况下,“y”将变成“b”,依此类推。现在你只要记住步长,就可以随时检查密码 输入: 两个元素的列表 第一个元素是一个字符串,仅由取自日记的字母组成,第二个元素是步长 输出: 表示密码的字符串 说明: 密

问题说明:

你把所有密码都写在日记里,这样你就不会忘记它们。但是很明显,这太危险了,所以你想出了一个简单的计划,你只需将所有字母表移动一个特定的步骤就可以了。例如:如果你决定你的步数是3,那么“a”将变成“d”,而“k”将变成“n”,所有字母表也是如此。最后的字母将简单地循环回“a”。在这种情况下,“y”将变成“b”,依此类推。现在你只要记住步长,就可以随时检查密码


输入:

两个元素的列表

第一个元素是一个字符串,仅由取自日记的字母组成,第二个元素是步长

输出:

表示密码的字符串


说明:

密码是“upHrae”。按第4步进行更改后

你变得很性感

p变成了t

H变成了L

r变成了v

a变成了e

当我

因此日记里写的是ytKveh


为了得到上面的输出,我编写了下面的代码

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'


有人能告诉我为什么会发生这种情况吗?

这是因为您正在按第4步进行更改。你需要把它调低4。您的代码也不起作用——在python中,不能通过strs添加和减去int! 下面是一个新的代码:

letters='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz'
def convert_str(字符串,步骤):
converted=“”
对于字符串中的字符:
如果字符!=“Z”:
转换+=字母[字母.索引(字符)+步长]
其他:
转换+=字母[步骤1]
转换收益
in_str=输入(“字符串:”)
打印(转换字符集(字符集,4))
这将使
upHare
成为
ytLevi
。 要向下转换,请使用负数:

打印(转换字符串(在字符串-4中))

这是因为您正在按第4步向上更改它。你需要把它调低4。您的代码也不起作用——在python中,不能通过strs添加和减去int! 下面是一个新的代码:

letters='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz'
def convert_str(字符串,步骤):
converted=“”
对于字符串中的字符:
如果字符!=“Z”:
转换+=字母[字母.索引(字符)+步长]
其他:
转换+=字母[步骤1]
转换收益
in_str=输入(“字符串:”)
打印(转换字符集(字符集,4))
这将使
upHare
成为
ytLevi
。 要向下转换,请使用负数:

打印(转换字符串(在字符串-4中))

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

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

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

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

即使在不同的情况下,这种方法也应该有效

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

即使在不同的情况下,这种方法也应该有效

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

我正在尝试添加条件temp=chr((ord(I)+step-65)%26+65),否则:temp=chr((ord(I)+step-97)%26+97),通过该条件字符串将返回上一个字符串。但是我不知道如何在代码中添加这个条件,这样上面的条件就可以工作了。你能帮帮我吗。我想你应该找一个不同的方法来增加4封信。你能建议一封信吗?过去3天我一直在努力解决这个问题,但到现在还没有找到任何解决办法。@nidhibhatnagar--我已经更新了我的帖子。很抱歉,我很忙。没问题,但我无法在输入中添加负号以获得所需的输出。输入已经给了我,我只需要按照给定的输入进行编码。这就是我花了这么长时间为这个问题编写代码,但仍然没有得到解决方案的原因。我正在尝试添加条件temp=chr((ord(I))+步骤-65)%26+65)否则:temp=chr((ord(i)+步骤-97)%26+97),通过该字符串将返回到上一个。但是我不知道如何在代码中添加这个条件,这样上面的条件就可以工作了。你能帮帮我吗。我想你应该找一个不同的方法来增加4封信。你能建议一封信吗?过去3天我一直在努力解决这个问题,但到现在还没有找到任何解决办法。@nidhibhatnagar--我已经更新了我的帖子。很抱歉,我很忙。没问题,但我无法在输入中添加负号以获得所需的输出。输入已经给了我,我只需要按照给定的输入进行编码,这就是我花了这么长时间为这个问题编写代码,但仍然没有得到解决方案的原因。