Как я могу перевести слова с помощью скрипта python?

#python

#python

Вопрос:

Итак, мы должны перевести числа с английского на немецкий. Я чувствую, что делаю все это неправильно, потому что я не получаю никаких результатов при тестировании своего кода.

 #!/usr/bin/env python3
import sys

english = sys.stdin.read().split()

num = {}

with open("translation.txt") as f:
    data = f.read().split("n")

i = 0
while len(data[i]) < 0:
    n = data[i].split()

    n1 = n[0]
    n2 = n[1]
    if n1 not in num:
        num[n1] = n2
    i = i   1

i = 0
while i < len(english):
    n = english[i]
    if n in num:
        print(num[n])
    i = i   1
 

Пожалуйста, помогите. Я даже получаю код для открытия текстового файла? текстовый файл содержит числа, переведенные с английского на немецкий

Пример translation.txt

 one: eins
two: zwei
three: drei
four: vier
five: funf
six: sechs
seven: sieben
eight: acht
nine: neun
ten: zehn
 

Комментарии:

1. Можете ли вы привести пример translation.txt и stdin ?

2. Почему это len(data[i]) < 0 так? Я думаю, что большая проблема заключается в том, что вы не избавляетесь от двоеточий.

Ответ №1:

Ну, в вашем коде было несколько серьезных логических ошибок. Прежде всего, сравнение было неправильным для циклов. Вы также разделили строку, но оставили : ключи. Также нет необходимости проверять, существует ли слово, но я оставил его так, как вы написали. Я также добавил двусторонний перевод на всякий случай, если он вам понадобится.

Вот моя реализация проблемы:

 #!/usr/bin/env python3
import sys

english = sys.stdin.read().split()

num = {}

with open("translation.txt") as f:
    data = f.read().split("n")

i = 0
while i < len(data):
    n = data[i].split()
    print(n)
    n1 = n[0].replace(':', '')
    n2 = n[1]
    if n1 not in num and n2 not in num:
        num[n1] = n2
        num[n2] = n1
    i = i   1

print(num['one'])
print(num['eins'])

 

Ответ №2:

Вы считываете входные данные из стандартного ввода через sys.stdin.read() . Это требует чтения ВСЕХ символов до тех пор, пока не будет выполнено EOF, что произойдет только в том случае, если:

  1. EOF вводится с клавиатуры (Ctrl-D для систем на базе Unix и Ctrl-Z для Windows);
  2. Входные данные перенаправляются из другого потока, который заканчивается EOF, такого как поток файлов.

Если ввод вводится построчно с клавиатуры, вывод не будет виден до тех пор, пока не будет виден EOF. Если желательно, чтобы вывод отображался сразу после одной строки ввода, input() следует использовать вместо sys.stdin.read() .

Другие проблемы были объяснены в ответе @Raguel.

Ответ №3:

Здесь у нас есть серьезная проблема с логикой приложения, как упоминалось в предыдущих ответах:

  • Прежде всего, нам нужно загрузить dictionary — наш ресурс для работы.
  • Во-вторых, мы можем начать перевод, например, слово в слово, из продолжения пользовательского ввода

Компактное решение (требуется python 3.8):

 #!/usr/bin/env python3

with open("translation.txt", "r") as f:
    dictionary = { k: v.strip()  for k, v in [line.split(":") for line in f.readlines()]}

while word:=input("Word to translate: "):
    try:
        print(dictionary[word])
    except KeyError:
        print(f"No translation found for the word: {word}")