Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2011 16:28:34

Apollo46
От:
Зарегистрирован: 2011-07-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

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

Задания:

№1 Что напечатает программа и почему?

class A:
def __init__(self, name):
self.name = name
def __del__(self):
print self.name,

aa = [A(str(i)) for i in range(3)]
for a in aa:
del a

print 'done'
Мой ответ - done, потому что объекты в цикле не удаляются.

№2 Что произойдет при выполнении программы?
class A:
def __init__( self ):
self.__value = 1
def getvalue( self ):
return self.__value

class B( A ):
def __init__( self ):
A.__init__( self )
self.__value = 2

b = B()
print b.getvalue() == b.__value
Мой ответ - программа выдаст exception, потому что нет доступа к __value вне класса.

№3 Найдите ошибку, если она есть.
def counter(n):
while True:
yield n
n += 1

squares = [i*i for i in counter(1)][0:10]
Мой ответ - не хватит памяти, но она еще просит указать как можно исправить. Короче аргументировать ответ нужно, я не знаю как.

№4 Что напечатает программа? Почему?
x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']

print x
Мой ответ - программа выведет [ , , ] а вот почему я не понимаю.

Хрен знает, где она таких заданий понабрала, но у меня уже голова кругом идет…



Отредактировано (Июль 10, 2011 16:51:18)

Офлайн

#2 Июль 10, 2011 16:34:07

Apollo46
От:
Зарегистрирован: 2011-07-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

Или, если совсем сложно, хотя бы подскажите в каком направлении мне нужно копать.



Офлайн

#3 Июль 10, 2011 16:53:40

kachayev
От:
Зарегистрирован: 2011-07-08
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

№1. Напечатает

done
2 1 0
Обратить внимание на:
1. del прямо не вызывает __del__ (http://docs.python.org/reference/datamodel.html#object.__del__)
2. вывод print будет совершен в одну строку, а не на разных, потому что в self.name, разделитель не указан

№2. AttributeError
b.__value нельзя получить извне.

№3. Бесконечный генератор. Цикл for будет выполнятся вечно.

4.
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Почему?
операция []*3 сделает список из трех элементов, ссылающихся на один объект.
соответственно все три операции append “отобразятся” на всех элементах.
а вот переприсваивание изменит только элемент с индексом 0.



Отредактировано (Июль 10, 2011 17:03:58)

Офлайн

#4 Июль 10, 2011 17:02:35

Apollo46
От:
Зарегистрирован: 2011-07-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

kachayev
№1. Напечатает
done
2 1 0
Обратить внимание на:
1. del прямо не вызывает __del__ (http://docs.python.org/reference/datamodel.html#object.__del__)
2. вывод print будет совершен в одну строку, а не на разных, потому что в self.name, разделитель не указан

№2. AttributeError
b.__value нельзя получить извне.

№3. Бесконечный генератор. Цикл for будет выполнятся вечно.
Спасибо огромное за Ваш ответ. Не могли бы ли Вы подсказать мне вариант исправления третьего задания.



Офлайн

#5 Июль 10, 2011 17:06:49

Apollo46
От:
Зарегистрирован: 2011-07-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

kachayev
№1. Напечатает
4.
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Почему?
операция []*3 сделает список из трех элементов, ссылающихся на один объект.
соответственно все три операции append “отобразятся” на всех элементах.
а вот переприсваивание изменит только элемент с индексом 0.
Может у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.



Офлайн

#6 Июль 10, 2011 17:11:48

kachayev
От:
Зарегистрирован: 2011-07-08
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

Правильный ответ на 3й? Тут как бы несовсем ясно что считать “правильным” - логики то в работе counter сейчас нет… Можно убрать извлечение среза и перенести его “на плечи” функции counter, можно сделать как-нибудь так:

def counter(min, max):
while min<=max:
yield min
min += 1

print [i*i for i in counter(1,10)]
в этом случае for будет итерировать по значениям от min до max.
и т.д.



Офлайн

#7 Июль 10, 2011 17:15:02

Apollo46
От:
Зарегистрирован: 2011-07-10
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

kachayev
Правильный ответ на 3й? Тут как бы несовсем ясно что считать “правильным” - логики то в работе counter сейчас нет… Можно убрать извлечение среза и перенести его “на плечи” функции counter, можно сделать как-нибудь так:

def counter(min, max):
while min<=max:
yield min
min += 1

print [i*i for i in counter(1,10)]
в этом случае for будет итерировать по значениям от min до max.
и т.д.
Вы мне здорово помогли, спасибо!



Офлайн

#8 Июль 10, 2011 17:15:24

kachayev
От:
Зарегистрирован: 2011-07-08
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

Apollo46
Может у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.
покажите версию Python и код, который вы выполняете.



Офлайн

#9 Апрель 18, 2018 18:02:39

Kuk
Зарегистрирован: 2017-07-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ДЗ, пожалуйста.

Здравствуйте.У меня есть задание в котором нужно написать программу, заполняющую список из N элементов случайными целыми числами, находящимися в интервале от 1 до 30. Заменить нулями элементы между максимальным и минимальными значениями кроме
них самих.Я написал что смог,а как заменить нулями между максимальным и минимальными значениями ума не приложу.Кто знает,подскажите пожалуйста.

 [code python]import random
n=int(input("Введите кол-во элементов списка "))
spisok=random.sample(range(1,30),n)
print(spisok)
min(spisok)
max(spisok)
print("Наибольший элемент списка",max(spisok))
print("Наименьший элемент списка",min(spisok))[/code]

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version