Le projet Python lance une erreur de clé

Je travaille sur mon devoir Python et j'essaie de convertir des chaînes en codes de lettres OACI. Cependant, chaque fois que la première boucle du programme se termine, il lance une KeyError et refuse de continuer à demander à l'utilisateur s'il veut traduire une autre chaîne. Quelqu'un pourrait-il m'aider avec ça? Merci.

while True:
ICAOInput = raw_input("Please enter a string: ")
inputToUpper = ICAOInput.upper()
def buildCodeArray():
ICAOArray = {
"A": "Alpha",
"B": "Bravo",
"C": "Charlie",
"D": "Delta",
"E": "Echo",
"F": "Foxtrot",
"G": "Golf",
"H": "Hotel",
"I": "India",
"J": "Juliet",
"K": "Kilo",
"L": "Lima",
"M": "Mike",
"N": "November",
"O": "Oscar",
"P": "Papa",
"Q": "Quebec",
"R": "Romeo",
"S": "Sierra",
"T": "Tango",
"U": "Uniform",
"V": "Victor",
"W": "Whiskey",
"X": "X-ray",
"Y": "Yankee",
"Z": "Zulu",
" ": " "}
return ICAOArray
def translateString(string, array):
inputStr = ""
punctList = "~`!@#$%^&*()_+-={[}]\|;:<,>.?/''"
for x in string:
if x not in punctList:
inputStr = inputStr + x
inputList = list(inputStr)
for i in inputList:
inputList = [array[letter] for letter in inputList]
print (inputList)
ICAOArray = buildCodeArray()
translateString(inputToUpper, buildCodeArray())
loop = raw_input("Would you like to translate another String? Please press 'Y' to restart or another key to end.")
if loop.upper() == "Y":
continue
print "Bye"
break

Et voici la KeyError :

Please enter a string: Hello
['Hotel', 'Echo', 'Lima', 'Lima', 'Oscar']
Traceback (most recent call last):
File "/Users/technologyspotlight/Desktop/Assignment 2.py", line 52, in <module>
translateString(inputToUpper, buildCodeArray())
File "/Users/technologyspotlight/Desktop/Assignment 2.py", line 48, in translateString
inputList = [array[letter] for letter in inputList]
KeyError: 'Hotel'


Solution du problème

Vous devrez dire à la boucle de se casser

for i in inputList:
inputList = [array[letter] for letter in inputList]
print(inputList)
break

Alternativement, vous pouvez supprimer le for i in inputListtout puisque vous parcourez déjà la liste

def translateString(string, array):
inputStr = ""
punctList = "~`!@#$%^&*()_+-={[}]\|;:<,>.?/''"
for x in string:
if x not in punctList:
inputStr = inputStr + x
inputList = list(inputStr)
inputList = [array[letter] for letter in inputList]
print(inputList)

Vous voudrez également ajouter une pause pour votre contrôle de boucle, sinon il continuera à boucler indépendamment de ce que vous entrez

loop = raw_input("Would you like to translate another String? Please press 'Y' to restart or another key to end.")
if loop.upper()!= "Y":
break

Sinon, il continuera à boucler indépendamment de ce que vous entrez

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"