Форум сайта python.su
Большое спасибо, особенно за подсказку с функцией
passantзаодно поподробнее ознакомлюсь с принципом ее работы
for i, name in enumerate(fokuses):
fokuses = “Great ”+name
Офлайн
Я тоже прохожу этот учебник и вот мое решение на основе пройденного в учебнике
def show_magician(names, great): """List of magicians""" while names: current_name = names.pop() great.append(current_name) def make_great(great): """Great """ for greatness in great: print('Great ' + greatness) names = ['Hoodini', 'Harry Potter', "Newt Salamander"] great = [] show_magician(names, great) make_great(great)
Офлайн
Boomix вы отошли от условия: ‘которая изменяет список фокусников, добавляя к имени каждого фокусника’ в вашем коде список не изменяется а только выводит новую строку
def show_magician(names): '''выводит имя каждого фокусника в списке''' for name in names: print(name) def make_great(names): '''изменяет список фокусников''' for index,name in enumerate(names): names[index] = 'Great ' + name names = ['Hoodini', 'Harry Potter', "Newt Salamander"] show_magician(names) make_great(names) print(names)
Офлайн
И я застрял на этом упражнении. Я пытался решить так:
def show_magicians(magicians):
for name in magicians:
print(name.title())
def make_great(magicians):
great_magicians = []
for name in magicians:
g_name = magicians.pop() + " the Great"
great_magicians.append(g_name)
for name in great_magicians:
magicians.append(name)
magicians11111 = ['chip', 'dayl', 'ponka']
show_magicians(magicians11111)
make_great(magicians11111)
show_magicians(magicians11111)
Сhip
Dayl
Ponka
Сhip
Ponka The Great
Dayl The Great
def show_magicians(magicians):
for name in magicians:
print(name.title())
def make_great(magicians):
great_magicians = []
while magicians:
g_name = magicians.pop() + " the Great"
great_magicians.append(g_name)
for name in great_magicians:
magicians.append(name)
magicians11111 = ['chip', 'dayl', 'ponka']
show_magicians(magicians11111)
make_great(magicians11111)
print("\n")
show_magicians(magicians11111)
Сhip
Dayl
Ponka
Ponka The Great
Dayl The Great
Сhip The Great
Офлайн
shelterКакая Понка? Гайка. Понка - это из утиных историй.magicians11111 = ['chip', 'dayl', 'ponka']
shelterПотому что цикл for идёт не по фиксированному списку. Нельзя в цикле for по списку менять этот же список. Это приводит к трудноуловимым ошибкам.
Не могу понять почему при использовании цикла for метод pop() при переборе
>>> lst = [1, 2, 3] >>> for i in lst: ... print(i) ... _ = lst.pop() ... 1 2 >>>
Офлайн
py.user.next))) точно
Какая Понка? Гайка. Понка - это из утиных историй.
py.user.nextСпасибо, теперь понятно частично, но понять бы как он именно идёт. Автор книги ни об этом не говорит, ни о том что вы прояснили, по крайней мере на том этапе до чего я дошел. Кажется, что хорошо бы автору объяснить досконально принцип работы циклов прежде чем давать такие упражнения. Но возможно это я что то упустил, буду разбираться дальше.
Потому что цикл for идёт не по фиксированному списку. Нельзя в цикле for по списку менять этот же список. Это приводит к трудноуловимым ошибкам.
Офлайн
shelterЦикл делает только два шага, а не три. Чтобы просматривать, как работает любой цикл, можно вставить отладочные принты, также можно использовать дебаггер для пошагового прохода (более профессиональный способ, которому следует обучиться).
Спасибо, теперь понятно частично, но понять бы как он именно идёт.
>>> def show_magicians(magicians): ... for name in magicians: ... print(name.title()) ... >>> def make_great(magicians): ... great_magicians = [] ... for name in magicians: ... print('name', name) ... print('before', magicians) ... g_name = magicians.pop() + " the Great" ... great_magicians.append(g_name) ... print('after', magicians) ... ... for name in great_magicians: ... magicians.append(name) ... >>> magicians11111 = ['chip', 'dayl', 'ponka'] >>> >>> show_magicians(magicians11111) Chip Dayl Ponka >>> >>> make_great(magicians11111) name chip before ['chip', 'dayl', 'ponka'] after ['chip', 'dayl'] name dayl before ['chip', 'dayl'] after ['chip'] >>> >>> show_magicians(magicians11111) Chip Ponka The Great Dayl The Great >>>
Отредактировано py.user.next (Март 22, 2019 12:23:11)
Офлайн
py.user.nextПонял. Большое спасибо!
Почему он делает только два шага, а не три, - потому что цикл при каждом витке переходит на следующий элемент, уходя с предыдущего элемента. Поэтому когда ты там что-то удаляешь, то складывается ситуация, что цикл ищет следующий элемент, чтобы на него перейти, а его там нет, потому что он удалён в теле цикла. Из-за этого он считает, что все элементы закончились.
Офлайн
shelter
И я застрял на этом упражнении. Я пытался решить так:
def show_magicians(names): for name in names: print('Hello ' + name.title() + '!') def make_gread(name_magicians): while name_magicians: gread_name = name_magicians.pop() name_1 = 'Great ' + gread_name.title() new_magicians.append(name_1) while new_magicians: name_gread = new_magicians.pop() magicians.append(name_gread) magicians = ['petya', 'vasya', 'oleg'] new_magicians = [] make_gread(magicians) show_magicians(magicians)
Отредактировано danielly2541 (Май 10, 2020 22:24:02)
Офлайн
shelterА это решение следующего задания. Чутка меняешь, передаешь только копию списка и удаляешь часть функции make_gread.
И я застрял на этом упражнении. Я пытался решить так:
def show_magicians(names): for name in names: print('Hello ' + name.title() + '!') def make_gread(name_magicians): while name_magicians: gread_name = name_magicians.pop() name_1 = 'Great ' + gread_name.title() new_magicians.append(name_1) magicians = ['petya', 'vasya', 'oleg'] new_magicians = [] make_gread(magicians[:]) show_magicians(magicians) show_magicians(new_magicians)
Отредактировано danielly2541 (Май 10, 2020 22:31:47)
Офлайн