Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,因为它不起作用_Python_Function_For Loop - Fatal编程技术网

python,因为它不起作用

python,因为它不起作用,python,function,for-loop,Python,Function,For Loop,我正在尝试打印lst列表中每个字符的拼写字母表,以及列表中任何其他字符的0。我的代码如下: def alphabet(lst): returned = [] for value in lst: value = str(value) if value == "a": returned = returned + ["alpha"] elif value == "b": returned =

我正在尝试打印
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”]
。为什么的
结构不适用于列表中的每个项目?如何将
return
语句从
for
循环中取出而不出现缩进错误?

如果向函数传递字符串,则该函数应能正常工作(即,如果执行
lst=“test”
,则会得到
[“tango”、“echo”、“sierra”、“tango”]
)。因此,您的问题很可能在于实际传递给函数的内容。如果您传递一个实际的列表,您将得到(除非该列表看起来像
[“t”、“e”、“s”、“t”]
)只有
[“0”]
作为输出

也就是说,这条线

str(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]

应该这样做。

尽管您的代码中可能存在错误,但我建议您使用地图/字典:

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

您也可以按照Tim在上述答案中的建议填写letter2alpha map(
{“a”:“alpha”,…}
),数据结构是相同的。其思想是将每个字母与其拼写字母表条目相关的信息从代码控制结构移动到动态数据结构

给我们看一个
lst
的示例值。我认为您的调用是错误的,因为像
alphabet('something')
那样调用它对我很有用。也许你把它叫做字母表(['something')
?谢谢你的建议,但我对python不太了解,也不知道什么是字典。您知道如何在没有缩进错误的情况下将“return”从“for”中去掉吗?字典可能是Python中最强大的数据结构。你现在肯定需要——不要因为你不知道基本的数据类型而让你的生活变得悲惨。在代码示例中,
return
语句似乎缩进正确;您的编辑器是否有可能混合制表符和空格?您也应该(见鬼,阅读整个教程,这是值得的!)-如果您想向列表中添加项目,Python的方法是执行
returned.append(“zulu”)
而不是
returned=returned+[“zulu”]
。非常感谢您的建议,错误在str(value)中正如你所建议的。谢谢你的建议,但我对python不是很了解,我也不知道什么是地图或字典。您知道如何在没有缩进错误的情况下将“return”从“for”中删除吗?@Sonio您的return已从for中删除,因为它的缩进级别与“for”关键字的缩进级别相同。然而,归还任何东西在这里都没有任何意义。您的功能是带有副作用(打印)的程序。如果你想退货,你必须听从蒂姆的建议。如果没有,请删除
return
语句。