#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, что произойдет только в том случае, если:
- EOF вводится с клавиатуры (Ctrl-D для систем на базе Unix и Ctrl-Z для Windows);
- Входные данные перенаправляются из другого потока, который заканчивается 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}")