2016-05-18 103 views
0

我正在爲學校創建一個簡單的加密項目。我正在與Python合作。python字符串到數組

目標:用戶輸入字符串,例如, hello world! 我得把它轉換成一個數組:space=0, a=1, b=2, ... z=26, .=27, ,=28, ?=29 and !=30

我用的字典:

dict = {' ': 0, 'a': 1, 'b': 2, 'c': 3,...} 

我的代碼

def messageToCode(message): 
    xarray = [None] 
    length = len(message) 
    ctr = 0 
    while not ctr == length: 
     xarray.append = dict[message.charAt(ctr)] 
     ctr = ctr + 1 
    return xarray 

這是行不通的。有什麼建議麼?

+4

什麼不適用於它?它會拋出一個錯誤嗎?輸出是不同的?怎麼會這樣? – Celeo

+0

相關:http://stackoverflow.com/questions/8848294/how-to-get-char-from-string-by-index – jakevdp

+1

'[dict [x] for x in message]',也許? – twalberg

回答

0

我的建議:

import string 

# Lists os components 
chars = [' '] + list(string.ascii_lowercase) + ['.',',','?','!'] 

# Your target 
target = 'hello world!' 

# Your array 
array = [chars.index(target[t]) for t in range(len(target))] 

在這種情況下,必須排列等於: [8,5,12,12,15,0,23,15,18,12,如圖4所示,30]

0

試試這個,

def encode_message(message, d): 
    return [d[c] for c in message] 

# Test 
message = 'hello world!' 
d = {'!': 0, ' ': 1, 'e': 2, 'd': 3, 'h': 4, 'l': 5, 'o': 6, 'r': 7, 'w': 8} 

l = encode_message(message, d) 
print(l) 
# Output 
[4, 2, 5, 5, 6, 1, 8, 6, 7, 5, 3, 0] 
5

有一些嚴重的問題:

  • xarray應該開始是空的,所以才[]。你寫的是一個包含單個元素的列表:NoneNone是一個實際值,就像5或「a」一樣,你不希望它在你的最終結果中。
  • =用於分配,因此xarray.append = ...正在爲您不需要的方法append分配一個值。您想調用該函數,即xarray.append(...)
  • .charAt來自Java和其他語言。要從字符串中獲取字符,您可以像列表或字典一樣對其進行索引,即使用方括號:message[ctr]

還有一些不太嚴重的:

  • not ctr == length比較好寫ctr != length。想象一下,!=是≠。在這種情況下,最好說ctr < length,因爲這就是它的意圖:message[ctr]只有在ctr < length(和ctr >= 0),而不僅僅是當ctr != length時纔有效。如果將代碼更改爲每次迭代增加2或更多ctr,並且ctr跳過length,則也不希望循環繼續進行。
  • ctr = ctr + 1更好寫ctr += 1,所以你不必寫變量兩次。

對代碼進行這些更改,確保它能正常工作,將其編輯到您的問題中,然後我會一點點地告訴您如何改進它。最終我們會在另一個答案中得到最優版本。

+5

根據你的答案我見過我很驚訝你不做[代碼評論](http:// codereview。 stackexchange.com) –

+0

@ TadhgMcDonald-Jensen我可能永遠不會做任何事情。另外,當我知道其他人可能會說同樣的話時,我的動機就會減弱。 –

+3

你會得到的東西..除非你被吸入到[第二臺顯示器](https://chat.stackexchange.com/rooms/8595/the-2nd-monitor)的生產力匯......請發送幫助!我們非常認真地歡迎您加入CR。即使其他人也會說同樣的話,沒有人會以這種態度提交任何答案! –