2014-10-08 196 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