首页 > 解决方案 > Python通过函数发送每个字符?

问题描述

所以我有这个任务,我需要询问用户输入。用户输入的每个字母都将返回等效的北约字母表。例如 F="FoxTrot"。这个输入通过一个函数来获取返回值。我还在函数中有几个针对特定字符的 IF 语句,例如 9="niner"、-="Dash",任何其他数字/字符都只返回该字符。

我遇到的问题是此时它只允许输入一个字符。如果我尝试输入多个字符,它会给我错误“typeerror ord() expected a character but string length # found”。我无法根据分配更改该 ord 语句。因为它给出了北约字母等效的正确计算。

def main():
    char = input("Enter license plate tag: ")
    charToWord(char)

def charToWord(char):    
nato = ["Alpha","Beta","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","X-Ray","Yankee","Zulu" ]
work =''

charNum = ord(char) - 65
word = nato[charNum]

if char.isalpha():
   print(word)
if char == "9":
   print("Niner")
if char == "-":
   print("Dash")
else:
   print(char)

return word

main()

所以我相信我需要在我的主函数中输入一个 For 循环?为了让它通过 charToWord 函数传递多个字符?但是我不确定如何构建它。有什么建议么?谢谢你。

标签: pythonfunctionloops

解决方案


您可以执行以下操作,使用map

def charToWord(char):    
    nato = ["Alpha","Beta","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whiskey","X-Ray","Yankee","Zulu" ]
    decode = {w[0]: w for w in nato}
    decode["9"] = "Niner"
    decode["-"] = "Dash"
    return decode.get(char, char)

# ...
list(map(charToWord, "ABC9-9G"))
# ['Alpha', 'Beta', 'Charlie', 'Niner', 'Dash', 'Niner', 'Golf']

推荐阅读