-3

特殊文字のリストがあります:

specialCharList=['`','~','!','@','#','$','%','^',
                         '&','*','(',')','-','_','+','=',
                         '|','','{','}','[',']',';',':',
                         '"',',','.','<','>','/','?',"'",'\\',' ']

ユーザーが新しい行の入力ボタンを押したときのために、ある種の文字表記を含める必要があります。「\n」を試しましたが、うまくいきませんでした。何か案は?

以下の詳細情報

すみません、指定するべきでした。基本的な暗号化/復号化アプリケーションを作成しています。文字を右に 6 桁ずらして出力します。

たとえば、abc は ghi として出力されます。たとえば、123 は 789 として出力されます。

特殊文字を使用して同じことをしました。以下のリストを使用して、それがどのように機能するかを確認してください。

specialCharList=['`','~','!','@','#','$','%','^',
                         '&','*','(',')','-','_','+','=',
                         '|','','{','}','[',']',';',':',
                         '"',',','.','<','>','/','?',"'",'\\',' ']

例~!^&として出力されます

暗号化するテキスト、数字、特殊文字の組み合わせをテキスト ボックスに入力するとすべて正常に動作しますが、誰かが新しい行を入力すると (たとえば、Enter キーを押すと)、エラーが発生します。

index=specialCharList.index(tbInput[i])

ValueError: u'\n' はリストにありません

完全なコードは以下のとおりです。

import wx
import os
class mainForm(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,'Encryption Tool v2',size=(270,300))
        panel=wx.Panel(self)
        #Setting up controls
        wx.StaticText(panel,-1,'Enter Text Below',(10,10),(200,25))
        self.tbInput=wx.TextCtrl(panel,-1,'',(10,30),(250,220),wx.TE_MULTILINE)
        self.rdEncrypt=wx.RadioButton(panel,-1,'Encrypt',(10,250),(200,-1))
        self.rdDecrypt=wx.RadioButton(panel,-1,'Decrypt',(10,270),(200,-1))
        btnExecute=wx.Button(panel,-1,'Execute',(181,252),(80,-1))
        btnExecute.Bind(wx.EVT_BUTTON,self.encryptionDecryption)
    def encryptionDecryption(self,event):
        tbInput=self.tbInput.GetValue()
        rdEncrypt=self.rdEncrypt.GetValue()
        rdDecrypt=self.rdDecrypt.GetValue()
        if rdEncrypt==True and tbInput!='':
            #copy encryption code below
            encryptedStr=''
            alphabet=['X','M','y','B','e','f','N','D','i','Q',
                 'k','u','Z','J','s','A','q','Y','E','P','S',
                 'v','w','a','U','z','p','d','C','h','o','F',
                 'G','H','I','n','K','W','b','g','O','t','j',
                 'R','l','T','c','V','L','x','r','m']
            specialCharList=['`','~','!','@','#','$','%','^',
                             '&','*','(',')','-','_','+','=',
                             '|','','{','}','[',']',';',':',
                             '"',',','.','<','>','/','?',"'",'\\',' ',]
            for i in range(0,len(tbInput)):
                if tbInput[i].isalpha():
                    index=alphabet.index(tbInput[i])
                    if index+6>len(alphabet)-1:
                        index=5+(index-(len(alphabet)-1))
                        encryptedStr+=alphabet[index]
                    else:
                        encryptedStr+=alphabet[index+6]
                elif tbInput[i].isdigit():
                    if int(tbInput[i])+6>9:
                        encryptedStr+=str(-1+(int(tbInput[i])+6)-9)
                    else:
                        encryptedStr+=str(int(tbInput[i])+6)
                else:
                    index=specialCharList.index(tbInput[i])
                    if index+6>len(specialCharList)-1:
                        index=5+(index-(len(specialCharList)-1))
                        encryptedStr+=specialCharList[index]
                    else:
                        encryptedStr+=specialCharList[index+6]
            #print 'Encrypted Text: '+encryptedStr
            #text file here
            e=open('encryptedText.txt', 'w')
            e.write(encryptedStr)
            e.close()
            if os.name == 'nt':
                os.system('notepad ecryptedText.txt&')
            elif os.name == 'posix':
                os.system('gedit decryptedText.txt&')
            os.system('gedit encryptedText.txt&')
        elif rdDecrypt==True and tbInput!='':
            #copy code for decryption below
            decryptedStr=''
            alphabet=['X','M','y','B','e','f','N','D','i','Q',
                 'k','u','Z','J','s','A','q','Y','E','P','S',
                 'v','w','a','U','z','p','d','C','h','o','F',
                 'G','H','I','n','K','W','b','g','O','t','j',
                 'R','l','T','c','V','L','x','r','m']
            specialCharList=['`','~','!','@','#','$','%','^',
                             '&','*','(',')','-','_','+','=',
                             '|','','{','}','[',']',';',':',
                             '"',',','.','<','>','/','?',"'",'\\',' ']
            for i in range(0,len(tbInput)):
                if tbInput[i].isalpha():
                    index=alphabet.index(tbInput[i])
                    if index-6>len(alphabet)-1:
                        index=5+(index-(len(alphabet)-1))
                        decryptedStr+=alphabet[index]
                    else:
                        decryptedStr+=alphabet[index-6]
                elif tbInput[i].isdigit():
                    if int(tbInput[i])-6<0:
                        decryptedStr+=str(-1+(int(tbInput[i])-6)+11)
                    else:
                        decryptedStr+=str(int(tbInput[i])-6)
                else:
                    index=specialCharList.index(tbInput[i])
                    if index-6>len(specialCharList)-1:
                        index=5+(index-(len(specialCharList)-1))
                        decryptedStr+=specialCharList[index]
                    else:
                        decryptedStr+=specialCharList[index-6]
            #print 'Decrypted Text: '+decryptedStr
            #text file here
            d=open('decryptedText.txt', 'w')
            d.write(decryptedStr)
            d.close()
            if os.name == 'nt':
                os.system('notepad ecryptedText.txt&')
            elif os.name == 'posix':
                os.system('gedit decryptedText.txt&')
            os.system('gedit encryptedText.txt&')
        else:
            message=wx.MessageDialog(None, 'Please enter text for encryption/decryption','No Text Found',wx.OK|wx.ICON_INFORMATION)
            message.ShowModal()
            message.Destroy()
if __name__=='__main__':
    encryptionToolv2=wx.PySimpleApp()
    frame=mainForm(parent=None,id=-1)
    frame.Show()
    encryptionToolv2.MainLoop()
#usrInput=raw_input('Please enter your text.\n> ')
#eOrD=raw_input('Do you want to encrypt or decrypt? (e or d)\n> ')
#if eOrD=='e' or eOrD=='E':
#    encryption()
#elif eOrD=='d' or eOrD=='D':
#    decryption()
4

2 に答える 2

0

ほとんどのテキスト ボックス (主に Windows) は\r\n、次の行に切り替える必要があります。\nだけでは十分ではありません。

于 2012-09-25T14:36:40.663 に答える
0

読みやすくするために、文字列を使用する必要があると思います。それでも:

specialCharacters += ["\n", "\r", "\r\n", "\t"]

new linecarriage return、。carriage return and new line_tab

于 2012-09-25T14:41:05.007 に答える