Уведомления

Группа в Telegram: @pythonsu

#1 Май 19, 2016 17:55:25

timofmax
Зарегистрирован: 2016-05-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

Привет всем! Не могу понять как происоходит передача переменной ‘i’? и ЧТО вообще передается???
вот что имеем:
______________________________________________
def censor(text, word):
text = text.split(' ‘)
for i in range(0, len(text)):
print i,
ewq = ’is'
qwe = ‘that is very beautiful day’
censor(qwe, ewq)
_____________________________________________
вывод: 0 1 2 3 4

Смысл напечатать переменую word как таковую столько раз сколько она встречается, или сколько раз она встречается в цифровом эквиваленте.

Прикреплённый файлы:
attachment Untitled-1.png (50,4 KБ)

Офлайн

#2 Май 19, 2016 19:06:50

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

def censor(text, word):
    text = text.split()
    for i in text:
        if i == ewq:
            print i
ewq = 'is'
qwe = 'that is very beautiful day'
censor(qwe, ewq)
в твоем случае i принимает значение по ранжиру от 0 до числа равному длине списка text
поэтому и вывод соответственно числа. по умолчанию range начинает отсчет с нуля и и в твоем случае 0 в аргументе не нужен. другое дело когда значения нужно в интервале получить. почитай внимательно
Цикл for

Офлайн

#3 Май 20, 2016 11:13:30

timofmax
Зарегистрирован: 2016-05-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

marvellik
Привет, да спасибо за ответ.
А в твоем случае i принимает значения полученного списка text, после манипуляций со строкой методом split.

я пробовал разобраться пошагово с заданием codecademy.
задание было таким забанить *** - звездочками по количеству букв данное слово в строке.
Вот правильное решение:
_______________________________________________
def censor(text, word):
    text = ("this hack is wack hack")
    text = text.split(" ")
    for i in range(0, len(text)):
        if text[i] == word:
            print word
            text[i] = "*" * len(word)
    return " ".join(text)
print censor(“text”, “hack”)
______________________________________________

Отредактировано timofmax (Май 20, 2016 11:14:06)

Офлайн

#4 Май 20, 2016 11:55:12

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

Зачем вы передаете функции параметр text, а затем сразу же в теле функции его переопределяете?
Если вам необходим индекс элемента последовательности при проходе по ней в цикле, то надо использовать функцию enumerate()

def censor(text, censored):
    text = text.split(" ")
    for i, word in enumerate(text):
        if word == censored:
            print(censored)
            text[i] = "*" * len(censored)
    return " ".join(text)
Или так:
def censor(text, censored):
    return text.replace(censored, '*' * len(censored))

Отредактировано Stright (Май 20, 2016 12:11:08)

Офлайн

#5 Май 20, 2016 20:08:47

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

timofmax
Смысл напечатать переменую word как таковую столько раз сколько она встречается, или сколько раз она встречается в цифровом эквиваленте.

про звездочки и замену ничего поэтому и написал как просил
timofmax
def censor(text, word):
text = (“this hack is wack hack”)
text = text.split(“ ”)
обратите внимание на заметку Stright
Stright
Зачем вы передаете функции параметр text, а затем сразу же в теле функции его переопределяете?
переменная text у вас инициированна в теле кода под именем qwe( я про самый первый код в посте) и предается в функцию под именем text и когда вы в теле функции его переопределяете
text = (“this hack is wack hack”)(зачем со скобками?) то теряете значение определенное в теле кода
и кажется функция split() по умолчанию использует пробел и явно указывать его не нужно
def censor(text, word):
    text = text.split(" ") # функция split() по умолчанию использует пробел и явно указывать его не нужно
    for i in range(0, len(text)):# тут тоже 0 не нужен счет и так с нуля начинается 
        if text[i] == word:
            print word
            text[i] = "*" * len(word)
    return " ".join(text)
ewq = 'is'
qwe = 'that is very beautiful day'
print(censor(qwe, ewq))

ну а судя по условию со звездочками что позже написали то вам циклы в функции не нужны и самое лучшее решение замена
Stright
def censor(text, censored):
return text.replace(censored, ‘*’ * len(censored))

Отредактировано marvellik (Май 20, 2016 20:13:46)

Офлайн

#6 Май 22, 2016 00:21:59

timofmax
Зарегистрирован: 2016-05-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какое значение несет "i"???

marvellik
разобрался,
def censor(text, censored):
return text.replace(censored, ‘*’ * len(censored))
без вариантов, самое изящное решение.
Вопрос закрыт.

Спасибо marvellik и Stright за доходчивое пошаговое объяснение.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version