2014-10-08 134 views
-2

我试图打印lst列表中的每个单个字符的拼写字母表,并为列表中的其他任何内容打印0。我的代码如下:蟒蛇,因为不工作

def alphabet(lst): 
    returned = [] 
    for value in lst: 
     value = str(value) 
     if value == "a": 
      returned = returned + ["alpha"] 
     elif value == "b": 
      returned = returned + ["bravo"] 
     elif value == "c": 
      returned = returned + ["charlie"] 
     # 
     # lots of elifs removed here for brevity 
     # 
     elif value == "y": 
      returned = returned + ["yankee"] 
     elif value == "z": 
      returned = returned + ["zulu"] 
     else: 
      returned = returned + ["0"] 
    return returned 

通过此功能给出的输出总是["0"]每个输入。为什么for构造不适用于列表上的每个项目?我怎样才能将return语句从for循环中删除而不会发生缩进错误?

+1

调试你的代码。 – Maroun 2014-10-08 09:19:17

+4

向我们展示'lst'的样本值。 – 2014-10-08 09:19:23

+1

我觉得你说错了,因为把它称为'字母'('something')'适用于我。也许你把它叫做'字母表'(['something'])'? – parchment 2014-10-08 09:24:34

回答

2

如果你传递一个字符串给它,你的函数应该能正常工作(即,如果你做lst = "test",那么你得到["tango", "echo", "sierra", "tango"])。所以你的问题很可能在于你实际传递给你的函数。如果你通过一个实际列表,你会得到(除非该列表看起来像["t", "e", "s", "t"])只有["0"]作为输出。

这就是说,行

str(value) 

什么也不做,因为你不分配结果返回给value。如果你想转换成不同的类型为字符串的对象,你需要做的

value = str(value) 

但很有可能你真的不想要转换不同类型的对象 - 你处理字符串,右(在这种情况下,调用参数lst是一种反直觉)?

然而,最明显的问题是,你应该使用字典,而不是这样一个长的if/elif/else结构。

喜欢的东西

def alphabet(word): 
    """Expects a string "word" and returns a list containing the phonetic alphabet's 
     mnemonic for each letter or "0" if the current character can't be converted.""" 
    alpha = {"a": "alpha", "b": "bravo", ...} 
    return [alpha.get(character, "0") for character in word] 

应该做的伎俩。

+0

感谢您的建议,但我不太了解python,我不知道什么是字典。你知道我怎样才能将“返回”从“for”中移出来而不会发生缩进错误? – 2014-10-08 09:27:57

+2

字典可能是Python中最强大的数据结构。你现在肯定需要[阅读教程](https://docs.python.org/2/tutorial/datastructures.html#dictionaries) - 不要让你的生活悲惨,因为你不知道基本的数据类型。在你的代码示例中,'return'语句显示为正确缩进;是你的编辑混合制表符和空格的机会吗? – 2014-10-08 09:31:13

+0

你也应该[阅读列表上的教程](https://docs.python.org/2/tutorial/introduction.html#lists)(heck,阅读整个教程,值得你花时间!) - 如果你想要将项目添加到列表中,pythonic方法是执行'returned.append(“zulu”)'而不是'returned = returned + [“zulu”]''。 – 2014-10-08 09:34:37

0

尽管可能错误,你可以在你的代码已经做了,我想建议你使用地图/字典:

def alphabet(lst): 
    letter2alpha = dict() 
    letter2alpha['a'] = "alpha" 
    letter2alpha['b'] = "bravo" 
    letter2alpha['c'] = "charlie" 
    ... 
    for l in lst: 
     print(letter2alpha.get(l,"Unknown")) 

你还可以填写letter2alpha图作为添在上面的回答表明( {"a":"alpha", ...})数据结构是一样的。这个想法是将与每个字母相关的信息从代码控制结构移动到其拼写字母表项到动态数据结构。

+0

感谢您的建议,但我不太了解python,我不知道什么是地图或字典。你知道我怎样才能将“返回”从“for”中移出来而不会发生缩进错误? – 2014-10-08 09:28:21

+0

@Sonio您的退货已经超出了原来的范围,因为它与'for'关键字在同一个文件夹中缩进。尽管如此,返回任何东西都没有任何意义。你的功能是具有副作用的程序(打印)。如果你想退货,你必须遵循Tim的建议。如果不是,则删除'return'语句。 – 2014-10-08 09:31:36