Преобразование строки с заменой по условию
Упражнение на строки
ограничение по времени на тест - 2 seconds
ограничение по памяти на тест - 256 megabytes
ввод: стандартный ввод
вывод: стандартный вывод
Петя записался в кружок по программированию. На первом занятии Пете задали написать простую программу. Программа должна делать следующее: в заданной строке, которая состоит из прописных и строчных латинских букв, она:
- удаляет все гласные буквы,
- перед каждой согласной буквой ставит символ ".",
- все прописные согласные буквы заменяет на строчные.
Гласными буквами считаются буквы "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 шт):
Не работает программа, тупа не могу понять почему так
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 проверки :)
Что надо:
удалить гласные
перевести согласные в нижний регистр
перед каждой согласной поставить точку
Но
после удаления гласных и так останутся одни согласные, значит можно сразу перевести текст в нижний регистр - так легче будет искать гласные
поскольку остались только согласные - ставь точки вообще перед всеми буквами :)
А вот так код учитывает и то, что одни гласные в тексте были:
text = input("Введите текст: ")
res = filter(lambda letter: letter not in {'a', 'o', 'y', 'e', 'u', 'i'}, text.lower())
print('', *res, sep='.')
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]
# Если что тут не реализовано замена прописных согласных на строчные