2016-03-01 4 views
0

Я преподаю себе Python из книги, и у меня возникают проблемы с этим упражнением на две части. Я вчера опубликовал об этом, думая, что у меня была первая часть, но кто-то указал мне, что это неправильно, поэтому я переработал ее, и теперь я думаю, что у меня есть первая часть, но у меня все еще есть проблемы со второй частью.Передача списка функции, подлежащей изменению

Первая часть упражнения:

Составьте список имен мага. Передайте список функции, которая называется show_magicians(), которая печатает имя каждого волшебника в списке.

Мой код для первой части упражнения:

def show_magicians(names): 
    for name in names: 
     print(name) 

magicians_names = ['Marv', 'Wowzo', 'Trickster', 'Didlo'] 

show_magicians(magicians_names) 

Выход:

Marv 
Wowzo 
Trickster 
Didlo 

Вторая часть упражнения:

Начните с копии вашей программы из упражнения 8-9. Напишите функцию под названием make_great(), которая изменяет список магов, добавив фразу Великое к имени каждого мага. Вызовите show_magicians(), чтобы увидеть, что список на самом деле был изменен.

Мой код для второй части упражнения:

def show_magicians(names): 
    for name in names: 
     print(name) 

def make_great(): 


magicians_names = ['Marv', 'Wowzo', 'Trickster', 'Didlo'] 

show_magicians(magicians_names) 

Мой вопрос: Для начала мне нужно знать, если я сделал первую часть правильно. Я думаю, что сделал, но мог ошибаться. Что касается второй части, я пробовал несколько вещей для функции make_great, но я действительно в недоумении относительно того, что мне нужно сделать, чтобы заставить ее изменить список. Я думаю, что это имеет какое-то отношение к циклу while, но я действительно не уверен. Любая помощь будет принята с благодарностью

+1

Ваша первая функция делает то, что должно. 'make_great()' будет требовать прохождения каждого индекса списка и изменения списка в этом индексе. Подсказка: 'range()' является полезной функцией. :) – zondo

+0

Не обязательно использовать цикл while. Вы можете использовать цикл for и функцию «range», упомянутую выше. Я также предлагаю заглянуть в функцию 'len', чтобы вы могли получить размер списка программно. –

+0

Вы даже можете использовать понимание списка с помощью 'magicians_names' в качестве результирующего списка. – Jan

ответ

0

Вы должны делать что-то вроде этого:

def show_magicians(names): 
    for name in names: 
     print(name) 

def make_great(magicians_names): 
    return [ name + ' The Great' for name in magicians_names ] 

magicians_names = ['Marv', 'Wowzo', 'Trickster', 'Didlo'] 

magicians_names = make_great(magicians_names) 
show_magicians(magicians_names) 

Другой вариант, чтобы изменить список на месте:

def show_magicians(names): 
    for name in names: 
     print(name) 

def make_great(magicians_names): 
    for i in range(len(magicians_names)): 
     magicians_names[i] += ' The Great' 

magicians_names = ['Marv', 'Wowzo', 'Trickster', 'Didlo'] 

make_great(magicians_names) 
show_magicians(magicians_names) 
+0

Я считаю, что это решение, которое я искал. Благодаря! – iriejams

0

Если вы действительно хотите изменить в отличие от создания нового списка:

def make_great(magicians_names): 
    for j in range(len(magicians_names)): 
     magicians_names[j] = 'The Great ' + magicians_names[j] 
    return magicians_names  
Смежные вопросы