2016-05-18 105 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。即使其他人也会说同样的话,没有人会以这种态度提交任何答案! –