Преобразование строки с заменой по условию

Упражнение на строки

ограничение по времени на тест - 2 seconds

ограничение по памяти на тест - 256 megabytes

ввод: стандартный ввод

вывод: стандартный вывод

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

  1. удаляет все гласные буквы,
  2. перед каждой согласной буквой ставит символ ".",
  3. все прописные согласные буквы заменяет на строчные.

Гласными буквами считаются буквы "A", "O", "Y", "E", "U", "I", а согласными — все остальные.

На вход программе подается ровно одна строка, она должна вернуть результат в виде одной строки, получившейся после обработки.

Помогите Пете справиться с этим несложным заданием.

Входные данные Первая строка представляет собой входные данные для Петиной программы. Эта строка состоит только из прописных и строчных латинских букв и имеет длину от 1 до 100 включительно.

Выходные данные Выведите получившуюся строку. Гарантируется, что эта строка не пуста.

Примеры
входные 
tour
выходные 
.t.r
входные 
Codeforces
выходные 
.c.d.f.r.c.s
входные 
aBAcAba
выходные
.b.c.b

мой код:

t = []
n = str(input())
for i in n:
    t.append(i)
for i in t:
    if i.lower() == "a" or i.lower() == "o" or i.lower() == "y" or i.lower() == "e" or i.lower() == "u" or i.lower() == "i":
        t.remove(i)
    if i == "u" or i == "U":
        t.remove(i)
for i in t:
    i = i.lower()
print("." + (".".join([str(i) for i in t])))

Ответы (4 шт):

Автор решения: Zhihar

Не работает программа, тупа не могу понять почему так

for i in t:
    if i.lower() == "a" or i.lower() == "o" or i.lower() == "y" or i.lower() == "e" or i.lower() == "u" or i.lower() == "i":
        t.remove(i)
    if i == "u" or i == "U":
        t.remove(i)
for i in t:
    i = i.lower()

вы не меняете массив - вы меняете лишь значения переменных в которые были записаны данные из массива

если вам надо менять массив - вам надо работать с индексами массива

и кстати удалять элементы массива наживую... последовательно... так вообще делать нельзя - можно очень много ошибок словить

Зачем так сильно усложнять код?

text = input("Введите текст: ")

res = "." + ".".join([letter for letter in text.lower() if letter not in {'a', 'o', 'y', 'e', 'u', 'i'}])

print(*res, sep='')

правда тут не учитывается, что в слове все гласные могли быть - но это дело 1 проверки :)

Что надо:

  1. удалить гласные

  2. перевести согласные в нижний регистр

  3. перед каждой согласной поставить точку

Но

  1. после удаления гласных и так останутся одни согласные, значит можно сразу перевести текст в нижний регистр - так легче будет искать гласные

  2. поскольку остались только согласные - ставь точки вообще перед всеми буквами :)

А вот так код учитывает и то, что одни гласные в тексте были:

text = input("Введите текст: ")

res = filter(lambda letter: letter not in {'a', 'o', 'y', 'e', 'u', 'i'}, text.lower())

print('', *res, sep='.')
→ Ссылка
Автор решения: JohnyDoe
for i in t:
    i = i.lower()

Здесь ты изменяешь переменную i, но список не меняется - там так и остаются заглавные. Сделай их сразу все маленькими:

t = [i.lower() for i in input()]

Можешь сразу откинуть гласные:

t = [i.lower() for i in input() if i.lower() not in ("a", "o", "y", "e", "u", "i")]

Таким образом будет список из маленьких согласных

→ Ссылка
Автор решения: Александр
vowel_big = ["A", "O", "Y", "E", "U", "I"]
vowel_small = ["a", "o", "y", "e", "u", "i"]
vowel = vowel_big + vowel_small


def main():
    string = str(input('Введите данные:'))
    result = "." + ".".join([i.lower() for  i in string if i not in vowel])
    print(result)
if __name__ == '__main__':
    main()
→ Ссылка
Автор решения: Арман Меликбекян
glassnye_small = ["a", "e", "y", "u", "i", "o"]
glassnye_big = ["A", "E", "Y", "U", "I", "O"] 
glassnye = glassnye small + glassnye_big
text = input() 
for i in range(len(text):
    if i in glassnye:
        text - = text[i] 
    else:
        text[i] = ";" + text[i]
# Если что тут не реализовано замена прописных согласных на строчные
→ Ссылка