Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2019 18:14:53

PrinseSasuke
Зарегистрирован: 2019-04-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка с методом .pop()

Код:

 magicans = [ "Fred", "Mike", "Freddy"]
 def show_magicans(people):
	for magican in people:
		print(magican.title() + " showed a trick")	
def make_great(people):
	for magican in people:
		magican = "Great " + magicans.pop(0) 
		people.append(magican)
	return people
simply_magicans = magicans.copy()
simply_magicans = make_great(simply_magicans) 
show_magicans(magicans)
show_magicans(simply_magicans)
Задание:
Фокусники без изменений: начните с программы из упражнения 8-10 . Вызовите функцию make_great() и передайте ей копию списка имен фокусников . Поскольку исходный список остался неизменным, верните новый список и сохраните его в отдельном списке . Вызовите функцию show_magicians() с каждым списком, чтобы показать, что в одном списке остались исходные имена, а в другом к имени каждого фокусника добавилась приставка «Great»

Ошибка: в строке с simply_magicans = make_great(simply_magicans). Пишет, что .pop работает с пустым списком, хотя список является копией.

Отредактировано FishHook (Апрель 4, 2019 18:52:05)

Офлайн

#2 Апрель 4, 2019 19:00:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка с методом .pop()

Это потому что вы предполагаете, будто списки people и magicans одинаковой длины. Ясен пень, они же копии. Прикол в том, что в цикле for magican in people, вы удлинняте список people - people.append(magican), то есть он становится длиннее. И в какой-то момент magicans опустел, а перебор по people еще не закончился, ведь он же стал длиннее вдвое.



Офлайн

#3 Апрель 5, 2019 19:26:38

PrinseSasuke
Зарегистрирован: 2019-04-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка с методом .pop()

FishHook
Это потому что вы предполагаете, будто списки people и magicans одинаковой длины. Ясен пень, они же копии. Прикол в том, что в цикле for magican in people, вы удлинняте список people - people.append(magican), то есть он становится длиннее. И в какой-то момент magicans опустел, а перебор по people еще не закончился, ведь он же стал длиннее вдвое.
Спасибо за помощь. Больше не буду работать с глобальными переменными в функциях.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version