Создайте функцию, которая на вход получает строку и заменяет в ней все буквы на символ "*". А затем выводит полученную строку
Подскажите пожалуйста, что в функции не корректно? А, так же буквы/цифры/знаки препинания нужно оставить без изменения.
def my_fun(s="Машинное обучение"):
sl =""
i =0
for i in s:
if s == 'Mашинное обучение':
s = "*"
i += 1
sl+=s
print(sl)
print(i)
my_fun()
Ответы (4 шт):
Вы не сформулировали, что функция хочет делать, так что ответ относительно предполагаемого желания иметь вывод каждой буквы на новой строке с пробельными строками для любого слова и строками со *, если на входе нет ничего.
Детальный разбор см.в комментариях ниже.
# Исправлены отступы относительно первоначального кода в вопросе, иначе не работает
# Кавычки и апостроф - разные знаки, в условии равенства не будет
def my_fun(s="Машинное обучение"):
sl = ""
# Переменная i не используется в виде int - инициализация и итерация не нужны тогда
# i = 0
# Цикл выполняет одно и то же, идя по каждой букве, можно сделать проще, вынеся if из цикла
for i in s:
# Код выполняет действия только если на входе ничего нет, в остальных случаях
# - простая печать буквы и пробела много раз
if s == 'Mашинное обучение':
s = "*"
# Переменная i не используется в виде int - инициализация и итерация не нужны тогда
#i += 1
sl += s
print(sl)
print(i)
my_fun()
Как вариант, решения
def my_fun(s="Машинное обучение", rep="*"):
ns = list(("").join(s))
for i in range(len(ns)):
if ns[i].isalpha():
ns[i] = rep
ns = ("").join(ns)
print(f"Input word {s}")
print(f"Output word {ns}")
return ns
my_fun()
Если задание сформулировано также как и в вопросе то можно и такое решение применить.
"""Меняю каждый символ строки на знак звёздочка"""
def change_each_symbol_line_to_sign_asterisk(input_line):
return "*" * len(input_line)
def main():
input_line = input("Enter line: ")
print(change_each_symbol_line_to_sign_asterisk(input_line))
if __name__ == "__main__":
main()
Сделаем из строки список, чтобы мы могли менять элементы по индексу (в Python ,в отличии от других языков менять элементы строки по индексу невозможно). Дальше пробежимся и, используя строковой метод isalpha() будем проверять, является ли элемент списка буквой, если да, то заменим его на '*'. В конце объединим список в строку с помощью строкового метода join и вернём это строку.
def replace_letters(string: str) -> str:
string = list(string)
for index in range(len(string)):
if string[index].isalpha():
string[index] = "*"
string = "".join(string)
return string