Второй одинковый объект в списке не отражается
Столкнулся с проблемой,что при нахождении определённых символов в array, программа просто игнорирует такой же второй элемент, и в output показывает то,что было в input.
К пример вот мой код:
list = str(input()).split()
dict = {"X-(": "Angry",
"</3": "Broken Heart",
":_(": "Crying",
":*)": "Drunk",
"|-O": "Yawn",
";)": "Winking",
":-)*": "Kiss",
";-)": "Winking",
":S": "Sarcastic",
":-(": "Sad",
"XD": "Laughing",
":)": "Happy",
":-)": "Happy",
":-*":"Kiss",
":-P": "Frustrated"}
for key,value in dict.items():
if key in list:
b = list.index(key)
list[b] = value
else:
pass
print(' '.join(list))
В этом коде пользователь вводит текст в виде смайликов, и программа выдёт ему перевеённые в текст смайлики.
Если ввести такой текст: I like you so much How its going :-P :-P
То он выведет: I like you so much How its going Frustrated :-P
В этом и является проблема,что при виде второго же такого символа в input он его игнорирует и оставляет таким же.
Ответы (2 шт):
Замените
if key in list:
на
while key in list:
И да, не называйте переменные list, dict и т.п. (именами встроенных типов/функций) Сами же рано или поздно на свои же грабли наступите.
Вообще это всё делается гораздо короче (переменные я переобозвал, чтобы не было пересечения с встроенными типами питона):
print(' '.join(dict_.get(w, w) for w in list_))
Просто перебираете слова и заменяете по словарю. Где не находит слово в словаре - оставляет исходное. Для этого используется второй параметр метода .get словаря, там прописывается, что должен выдавать словарь, если нет такого ключа.