问题描述:
您将所有密码写在日记中,以免您忘记密码。但是显然,这太冒险了,因此您想出了一个简单的计划,只需将所有字母按一定的步调来编写即可。例如:如果您将步长确定为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' 。
谁能告诉我为什么会这样?
答案 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))
这将使upHare
到ytLevi
。
要向下转换,请使用负数:
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))