python之明密文轉換

來源:互聯網
上載者:User

這個問題是我在學習Udacity(一個網路課程平台)學習web development課程時遇到的一個問題:

題目大概是定義一個ROT13函數,然後將輸入字母轉換為相應後移13個位置的字母,比如輸入Hello,輸出應該是Urryb,大小寫不變,別的符號不變。

本能想到用一個對應的二元組的List來進行映射:這裡使用的zip,它的功能是將兩個列表合并成一個二元組,元組中每個元素是原來列表的元素

L1 = [1,3,5,7]L2 = [2,4,6,8]#使用zip將兩個列表合并print zip(L1,L2)for (a,b) in zip(L1,L2):  print (a,b)L3 = [2,4,6]#當長度不一的時候,多餘的被忽略print zip(L1,L3)#extra items are ignored#map則不會忽略,例如下例。當L1和L3長度不一的時候,#會用第一個參數來填充。print map(None,L1,L3)

下面我準備用zip嘗試解決這個問題

s = "abcdefghijklmnopqrstuvwxyz"t = "nopqrstuvwxyzabcdefghijklm"list = zip(s,t)def ROT13(str):    for (i,o) in list:        str = str.replace(i,o)    print str

運行模組,結果如下

>>> ROT13("abcdefghijklmnopqrstuvwxyz")
abcdefghijklmabcdefghijklm

也就是說從a到m的沒變,從n到z的轉換成功

我又舉了個其他例子:

>>> ROT13("nopqrstuvwxyzabcdefghijklm")
abcdefghijklmabcdefghijklm 同樣只替換n到z

在這兒我感覺到這個replace可能是先找出所有a,替換,然後再找出所有b.....,然後當a~m都替換成n~z後,就和後面的那部分是一樣的,接下來字串中所有的字母都會轉換成a~m

想到這兒,我把代碼改了一下

將list = zip(s,t)改為 list =zip(t,s)

結果是:

>>> ROT13("abcdefghijklmnopqrstuvwxyz")
nopqrstuvwxyznopqrstuvwxyz

只替換a~m了,上述假設貌似有點道理

為了進一步驗證我的想法,我又把代碼改了一下

s = "abc"t = "bca"list = zip(s,t)def ROT13(str):    for (i,o) in list:        str = str.replace(i,o)    print str

這樣,如果上述猜想是正確地,那麼ROT13("abca")之後應該是aaa

具體轉化過程是abc->bbc->ccc->aaa

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.