【问题标题】:python string to array [closed]python字符串到数组[关闭]
【发布时间】:2016-05-18 17:31:18
【问题描述】:

我正在为学校创建一个简单的密码学项目。我正在使用 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

这行不通。有什么建议吗?

【问题讨论】:

  • 有什么不好的?它会抛出错误吗?输出不一样吗?怎么样?
  • [ dict[x] for x in message ],也许吧?
  • 投票结束,因为没有具体问题。仅供参考:如果您不提供更多信息,您的问题可能很快就会结束。看到这篇文章:stackoverflow.com/help/mcve
  • 致亲密的选民:我知道 OP 没有出了什么问题,但如果真的很明显,为什么要关闭它?

标签: python arrays string python-3.x


【解决方案1】:

有一些严重的问题:

  • 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 时有效。如果您将代码更改为每次迭代将 ctr 增加 2 或更多,并且 ctr 跳过 length,您也不希望循环永远持续下去。
  • ctr = ctr + 1 最好写成ctr += 1,这样你就不用把变量写两次了。

对您的代码进行这些更改,确保它有效,将其编辑到您的问题中,然后我会一点一点地告诉您如何进一步改进它。最终我们将在另一个答案中得到最佳版本。

【讨论】:

  • 根据你的回答我看到我很惊讶你不这样做code review
  • @TadhgMcDonald-Jensen 我可能永远不会完成任何事情。此外,当我知道其他人可能会说同样的话时,我的动力就会降低。
  • 您将完成任务.. 除非您陷入了the 2nd monitor..... 请发送帮助!说真的,我们欢迎您加入 CR。即使其他人会说同样的话,也没有人会以这种态度提交任何答案!
【解决方案2】:

我的建议:

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]

【讨论】:

    【解决方案3】:

    试试这个,

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2023-01-20
      • 1970-01-01
      • 2014-02-23
      相关资源
      最近更新 更多