加密fi中的线路

2024-10-03 06:18:46 发布

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

我试图编写一个程序,打开一个文本文件,并将文件中的每个字符向右移动5个字符。它应该只对字母数字字符执行此操作,并保持非字母数字不变。(例如:C变成H)我应该使用ASCII表来完成这项工作,但是当字符换行时,我遇到了一个问题。例:w应该变成b,但是我的程序给了我一个ASCII表中的字符。另一个问题是所有的字符都打印在不同的行上,我希望它们都打印在同一行上。 我不能使用列表或字典。在

这就是我所拥有的,我不知道如何做最后的if语句

def main():
    fileName= input('Please enter the file name: ')
    encryptFile(fileName)


def encryptFile(fileName):
    f= open(fileName, 'r')
    line=1
    while line:
       line=f.readline()
       for char in line:
           if char.isalnum():
               a=ord(char)
               b= a + 5
               #if number wraps around, how to correct it
               if 

                print(chr(c))
            else:
                print(chr(b))
        else:
            print(char)

Tags: 程序ifdef字母lineascii数字filename
3条回答

使用str.translate

In [24]: import string

In [25]: string.uppercase
Out[25]: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

In [26]: string.uppercase[5:]+string.uppercase[:5]
Out[26]: 'FGHIJKLMNOPQRSTUVWXYZABCDE'

In [27]: table = string.maketrans(string.uppercase, string.uppercase[5:]+string.uppercase[:5])

In [28]: 'CAR'.translate(table)
Out[28]: 'HFW'

In [29]: 'HELLO'.translate(table)
Out[29]: 'MJQQT'

首先,它是小写还是大写很重要。我在这里假设所有的字符都是小写的(如果不是的话,就很容易造出它们)

if b>122:
    b=122-b  #z=122
    c=b+96   #a=97

w=119在ASCII中,z=122(十进制的ASCII)所以119+5=124和124-122=2,这是我们的新b,然后我们把它加到a-1上(这考虑到如果我们得到1,2+96=98,98是b

对于在同一行上打印,我会将它们写入一个列表,然后从该列表创建一个字符串,而不是在您拥有它们时进行打印。在

例如代替

^{pr2}$

我会的

     someList.append(chr(c))
else: 
     somList.append(chr(b))

然后将列表中的每个元素连接到一个字符串中。在

您可以创建一个dictionary来处理它:

import string
s = string.lowercase + string.uppercase + string.digits + string.lowercase[:5]
encryptionKey = {s[i]:s[i+5] for i in range(len(s)-5)}

s+ string.lowercase[:5])的最后一个加数将前5个字母添加到密钥中。然后,我们使用一个简单的字典理解来创建加密密钥。在

放入您的代码中(我还更改了它,以便您迭代行而不是使用f.readline()

^{pr2}$

相关问题 更多 >