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 inputList
tout 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
Enregistrer un commentaire