4

テキストファイルを開き、ファイル内の各文字を5文字右にシフトするプログラムを作成しようとしています。これは英数字に対してのみ行う必要があり、英数字以外の文字はそのままにしておきます。(例:CはHになります)これを行うためにASCIIテーブルを使用することになっていますが、文字が折り返されるときに問題が発生します。例:wはbになるはずですが、私のプログラムではASCIIテーブルにある文字が表示されます。私が抱えているもう1つの問題は、すべての文字が別々の行に印刷されており、すべての文字を同じ行に印刷したいということです。リストや辞書は使えません。

これは私が持っているものです、私は最終的な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)
4

3 に答える 3

7

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'
于 2013-03-07T00:51:17.653 に答える
1

まず、小文字か大文字かが重要です。ここでは、すべての文字が小文字であると想定します(そうでない場合は、簡単に作成できます)。

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

ASCIIではw=119、ASCIIではz = 122(10進数)なので、119 + 5=124と124-122=2は新しいbであり、これをa-1に追加します(これは、1を取得した場合に処理されます)戻ると、2 + 96=98で98はbです。

同じ行に印刷する場合は、あるときに印刷するのではなく、リストに書き込んでから、そのリストから文字列を作成します。

例:代わりに

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

私はします

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

次に、リストの各要素を1つの文字列に結合します。

于 2013-03-07T00:46:29.250 に答える
0

あなたはそれを処理するための辞書を作成することができます:

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

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


def encryptFile(fileName):
    s = string.lowercase + string.uppercase + string.digits + string.lowercase[:5]
    encryptionKey = {s[i]:s[i+5] for i in range(len(s)-5)}
    f= open(fileName, 'r')
    line=1
    for line in f:
       for char in line:
           if char.isalnum():
               print(encryptionKey[char])
           else:
                print(char)
于 2013-03-07T00:50:54.567 に答える