def enc(a):
for i in range(len(a)):
if (i%2==0):
a[i]=chr(ord(a[i])+3)
else:
a[i]=chr(ord(a[i])+5)
r1 = ''.join(a)
return r1
def dec(m):
for i in range(len(m)):
if (i%2==0):
m[i]=chr(ord(m[i])-3)
else:
m[i]=chr(ord(m[i]+5)
r2 = ''.join(m)
return r2
h=input()
print(enc(h))
print(dec(h))
请帮助我解决这个可能愚蠢的错误,我只想输入并加密并解密
答案 0 :(得分:1)
我很高兴阅读您的代码,因为一段时间前,我尝试自己编写加密和解密。所以我想我知道你要达到的目标。
因此,首先,Python字符串不喜欢赋值。
因此我们将字符串转换为列表
def enc(a):
a = list(a)
之后,我们会查看您的来电
h=input()
print(enc(h))
print(dec(h))
这些调用只会产生一些“随机”字符串,所以我建议:
h=input()
h= enc(h)
print(h)
print(dec(h))
这将加密字符串,而不是将其打印出来。将其传递给dec方法,并回滚enc中的更改后,打印您输入的字符串。
最后但并非最不重要的一点,我们必须看看您的dec方法:
else:
m[i]=chr(ord(m[i]+5)
如果在enc中使用+5,则将永远无法找回原始字符串,这在加密和解密中应该是最重要的事情。
因此您必须将其更改为
else:
m[i]=chr(ord(m[i])-5)
因此,如果您全部更改,则最终代码应如下所示:
def enc(a):
a = list(a)
for i in range(len(a)):
if (i%2==0):
a[i]=str(chr(ord(a[i])+3))
else:
a[i]=str(chr(ord(a[i])+5))
r1 = ''.join(a)
return r1
def dec(m):
m = list(m)
for i in range(len(m)):
if (i%2==0):
m[i]=str(chr(ord(m[i])-3))
else:
m[i]=str(chr(ord(m[i])-5))
string2 = "".join(m)
return string2
h = "Hallo"
h = enc(h)
print(h)
print(dec(h))
因此,对于字符串“ Welcome to StackOverflow”,输出将为:
after enc: Zjohrrh%wt#XwffpR{hwiqr|
after dec: Welcome to StackOverflow