2014-08-31 2 views
0

Я новичок в изучении python, и я пытаюсь закодировать небольшой переводчик с английского на испанский. Я получил код здесь, который переводится с английского на испанский и испанский на английский. Тем не менее, я хочу добавить код, который позволяет пользователю видеть список слов при вводе «show». Я получил код для него, но когда я набираю шоу, он просто распечатывает «except keyerror».Python, создающий словарь

english_list = ["fire","apple","morning","river","wind"] 
spanish_list = ["fuego","manzana","mañana","río","viento"] 
english_to_spanish = dict(zip(english_list, spanish_list)) 

def translate(word): 
    try: 
     for key,value in english_to_spanish.items(): 
      if key == word: 
       print("{0} in Spanish is {1}".format(
              word, english_to_spanish[word])) 
      elif value == word: 
       print("{0} in English is {1}".format(
              word, key))   
    except KeyError: 
     print("That wasn't an option" 
      .format(translate)) 

print("Welcome to the English <--> Spanish Dictionary") 
while True: 
    word1 = input("> ") 
    translate(word1) 

Вот код, который, как я думал, будет работать, чтобы показать пользователю список слов, когда они набирают «шоу».

if word == 'show': 
    wordlist = input("Would you like to see the English or Spanish wordlist?") 
    if wordlist == 'english':  
     print(english_list) 
    elif wordlist == 'spanish': 
      print(spanish_list) 
    else: 
     print("That wasnt an option") 

Было бы очень признательно, если бы кто-то мог помочь мне здесь.

+3

конечно "шоу" вызывает ключевую ошибку - ее нет в списке. Код, размещенный внизу. Должен работать (* предполагая *, что 'translate' не вызывается и помещается в соответствующее место). Показать * актуальный код * важен. – user2864740

+0

Ваш исходный код использует 'word1', а не' word', для ввода пользователем. –

ответ

0
english_list = ["fire","apple","morning","river","wind"] 
spanish_list = ["fuego","manzana","mañana","río","viento"] 
english_to_spanish = dict(zip(english_list, spanish_list)) 
spanish_to_english = dict(zip(spanish_list, english_list)) 

def translate(word): 
    translation = english_to_spanish.get(word) 
    if translation: 
     return translation 

    translation = spanish_to_english.get(word) 
    if translation: 
     return translation 

    raise Exception('Word {0} does not exists'.format(word)) 

print("Welcome to the English <--> Spanish Dictionary") 
while True: 
    word = input("> ") 
    if word == 'show': 
     wordlist = input("Would you like to see the English or Spanish wordlist?") 
     if wordlist == 'english': 
      print ','.join(english_list) 
     elif wordlist == 'spanish': 
      print ','.join(spanish_list) 
    else: 
     try: 
      translate(word) 
     except Exception as e: 
      print str(e) 

Это должно работать, но не проверено.

Я добавил spanish_english dict, потому что в вашем решении вы выполняете итерацию для каждого поиска в словаре.

+0

Спасибо за ваш ответ, но почему я получаю недопустимую синтаксическую ошибку в последней строке вашего кода print str (e)? –

+0

У меня была опечатка, если слово == 'show' (отсутствует :). – gosom

1

Ответ @gosom почти подходит для некоторых маленьких ошибок, за исключением:

  1. бросить а «:» в конце строки «если слово ==„шоу“»
  2. , если вы используете Python 2.x, вы должны заменить 'ввод' на '' raw_input

ниже код был проверен на Python 2.7.3:

# -*- coding: utf-8 -*- 

english_list = ["fire","apple","morning","river","wind"] 
spanish_list = ["fuego","manzana","mañana","río","viento"] 
english_to_spanish = dict(zip(english_list, spanish_list)) 
spanish_to_english = dict(zip(spanish_list, english_list)) 

def translate(word): 
    translation = english_to_spanish.get(word) 
    if translation: 
     return translation 

    translation = spanish_to_english.get(word) 
    if translation: 
     return translation 

    raise Exception('Word {0} does not exists'.format(word)) 

print("Welcome to the English <--> Spanish Dictionary") 
while True: 
    word = raw_input("> ") 
    if word == 'show': 
     wordlist = raw_input("Would you like to see the " 
          "English or Spanish wordlist?") 
     if wordlist == 'english': 
      print ','.join(english_list) 
     elif wordlist == 'spanish': 
      print ','.join(spanish_list) 
    else: 
     try: 
      translate(word) 
     except Exception as e: 
      print '--' 
      print str(e) 
Смежные вопросы