2013-03-08 47 views
0

所以我努力工作,以創建一個程序,它可以採取兩個輸入如蟒蛇,用較小的關鍵

encrypt('12345','12') 

任何大小碼加密它將返回

'33557' 

代碼('12345')和按鍵('12')遞增,從右向左工作。

我已經創建了一個適用於代碼和鍵都是8位長的工作,但是我不能解決如何讓代碼被允許爲任意大小,可能是嵌套的命令?

這裏是一個我做早,所以你可以看到更好的我所試圖做的

def code_block(char,charBlock): 
    if len(char) == 8 and len(charBlock) == 8: #Check to make sure both are 8 didgets. 
     c = char 
     cB = charBlock 
     line = "" 
     for i in range(0,8): 
      getDidget = code_char2(front(c),front(cB)) 
      c = last(c) 
      cB = str(last(cB)) 
      line =line + getDidget 
     print(line) 
    else: 
     print("Make sure two inputs are 8 didgets long") 

def front(word): 
    return word[:+1] 

def last(word): 
    return word[+1:] 
+1

你爲什麼要自己加密?這可能是相當危險的... – thegrinner 2013-03-08 13:56:18

+1

它也可能更有趣! – cfi 2013-03-08 14:13:28

回答

1

Python的3.2測試一些代碼:

from decimal import Decimal 
import itertools 

def encrypt(numbers_as_text, code): 
    key = itertools.cycle(code[::-1]) 

    num = Decimal(numbers_as_text) 

    power = 1 
    for _ in numbers_as_text: 
     num += power * int(next(key)) 
     power *= Decimal(10) 

    return num 



if __name__ == "__main__": 
    print(encrypt('12345','12')) 

一些解釋:

  • code[::-1]是反轉字符串的一種很酷的方法。 Stolen from here
  • itertools.cycle endlessly repeats your key。所以變量key現在包含一個發生器產生212121
  • Decimal is a datatype which can handle arbitrary precision numbers。實際上Python 3的整數是足夠的,因爲它們可以處理任意數量的數字的整數。調用類型名稱作爲函數Decimal(),調用該類型的constructor,並因此創建該類型的新對象。 Decimal()構造函數可以處理一個參數,然後將其轉換爲一個Decimal對象。在該示例中,numbers_as_text字符串和整數10都被轉換爲Decimal with its constructor類型。
  • power是一個變量,以1開頭的變量乘以10表示我們所處理的每個數字(從右邊算起)。它基本上是一個指向我們需要在當前循環迭代中修改num的指針
  • for循環標頭確保我們對給定輸入文本中的每個數字進行一次迭代。我們也可以使用像for index in range(len(numbers_as_text))但這是不必要的複雜過程

,如果你要編碼的文字,這種方法是行不通的。但由於這不是你的問題規範,所以這是一個專注於處理整數的函數。

+0

Whats itertools.cycle(code [:: - 1]在做什麼?謝謝 – jackdh 2013-03-08 14:32:02

+1

@jack:如果你認爲一個有用的答案,upvote it。如果一個答案解決了你的問題,接受它(點擊旁邊的複選標記)。如果你不這樣做,人們會停止看你的問題,它也總是很好的提供反饋:-) – cfi 2013-03-08 14:39:00

+0

我會做,但我還沒有+15代表,否則我肯定會,但我可能還有幾個問題。 – jackdh 2013-03-08 14:46:44