2014-01-25 42 views
1

每列長我以前從來沒有使用Python,但一所學校的單位我想我應該學習它, 我有一個暗號文本打破嘗試在python

ICBKAOREMDERAEAA 

這是i am a code breaker,

手工破解這個我不得不成立了一個4×4格

I C B K 
A O R E 
M D E R 
A E A A 

正如你看到的然後就往下走的每一列,這就是我想要得到的代碼做但每邊網格從1 x長度輸入到所有可能的大小

我已經設法破解這個手,但我現在要做的是使用python,將採取輸入ICBKAOREMDERAEAA並輸出每一個可能的列的大小的組合,

這樣的一列,將顯示

ICBKAOREMDERAEAA 

2列,將減半輸入和然後將結果寫每一列下去

ICBKAORE 
MDERAEAA 

這將輸出

IMCDBEKRAAOERAEA 

等,

我怎麼能在Python代碼這樣想,我以前從來沒有這麼難過使用它,如果這是一個簡單的問題

的解決辦法是我認爲

輸入文本

然後插入到一個數組和拆分該數組ë時間,但我怎麼可以編碼呢?

我希望,該算法將打印出來的答案,全長的,並且代碼會自動做了網格大小,這是一個基本transpotion密碼BTW

由於在這裏評論我使用的代碼

def main(): 
    s = "ICBKAOREMDERAEAA" 
for i in range(1, len(s) + 1): # range doesn't include upper bound 
    rows = [s[x:x+i] for x in range(0, len(s), i)] 
print('\n'.join(rows)) 

但得到的錯誤

Traceback (most recent call last): 
    File "transsolve.py", line 4, in <module> 
    for i in range(1, len(s) + 1): # range doesn't include upper bound 
NameError: name 's' is not defined 

得到它編譯OK了!但在控制檯:(

def main(): 
    s = "ICBKAOREMDERAEAA" 
    for i in range(1, len(s) + 1): # range doesn't include upper bound 
     rows = [s[x:x+i] for x in range(0, len(s), i)] 
     print('\n'.join(rows)) 

我試圖完成的輸出,所以它看起來是這樣的

enter image description here

它能夠自動打印出每一行,並有騎下來每列無輸出

+0

你能否闡述算法應該是什麼樣子?你想要一個完整的字符串,然後一半,然後四分之一,等等,還是比它更細粒度? – sundance

+0

我希望算法能夠打印出全長的答案,並且代碼會自動完成網格大小,這是一個基本的傳輸密碼btw – user2292674

回答

2

取一個字符串s

s = "ICBKAOREMDERAEAA" 

的可能行的長度會從range 1,到s長度:

for i in range(1, len(s) + 1): # range doesn't include upper bound 

(雖然你可能不感興趣的上述len(s) // 2 - 調整的味道)。

然後您可以根據使用list comprehension和字符串slicing長度分割字符串爲行:

rows = [s[x:x+i] for x in range(0, len(s), i)] 

printjoinrows出帶有換行符荷蘭國際集團:

print('\n'.join(rows)) 

或使用zip將它們放在一起:

columns = list(zip(*rows)) 

例如,你的解決方案(i == 4):

>>> list(zip(*[s[x:x+4] for x in range(0, len(s), 4)])) 
[('I', 'A', 'M', 'A'), ('C', 'O', 'D', 'E'), 
('B', 'R', 'E', 'A'), ('K', 'E', 'R', 'A')] 
+0

嘿,謝謝你的評論,我已經嘗試過運行它,但是我得到錯誤'name s is not defined' – user2292674

+0

除非你有一行開始's =',*當然*它沒有被定義。但是你沒有發佈你用於你的字符串的變量名。 – jonrsharpe

+0

我確實有一條線開始s =,我跟着你的例子代碼在主要問題上面 – user2292674