Найти - Пользователи
Полная версия: Помогите с ДЗ, пожалуйста.
Начало » Центр помощи » Помогите с ДЗ, пожалуйста.
1
Apollo46
Ситуация такова, мой учитель по информатике задала домашнее задание по 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
Мой ответ - программа выведет [ , , ] а вот почему я не понимаю.

Хрен знает, где она таких заданий понабрала, но у меня уже голова кругом идет…
Apollo46
Или, если совсем сложно, хотя бы подскажите в каком направлении мне нужно копать.
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 будет выполнятся вечно.

4.
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Почему?
операция []*3 сделает список из трех элементов, ссылающихся на один объект.
соответственно все три операции append “отобразятся” на всех элементах.
а вот переприсваивание изменит только элемент с индексом 0.
Apollo46
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 будет выполнятся вечно.
Спасибо огромное за Ваш ответ. Не могли бы ли Вы подсказать мне вариант исправления третьего задания.
Apollo46
kachayev
№1. Напечатает
4.
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Почему?
операция []*3 сделает список из трех элементов, ссылающихся на один объект.
соответственно все три операции append “отобразятся” на всех элементах.
а вот переприсваивание изменит только элемент с индексом 0.
Может у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.
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.
и т.д.
Apollo46
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.
и т.д.
Вы мне здорово помогли, спасибо!
kachayev
Apollo46
Может у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.
покажите версию Python и код, который вы выполняете.
Kuk
Здравствуйте.У меня есть задание в котором нужно написать программу, заполняющую список из 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]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB