Форум сайта python.su
Ситуация такова, мой учитель по информатике задала домашнее задание по 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'
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
def counter(n):
while True:
yield n
n += 1
squares = [i*i for i in counter(1)][0:10]
x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print x
Отредактировано (Июль 10, 2011 16:51:18)
Офлайн
Или, если совсем сложно, хотя бы подскажите в каком направлении мне нужно копать.
Офлайн
№1. Напечатает
done
2 1 0
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Отредактировано (Июль 10, 2011 17:03:58)
Офлайн
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 будет выполнятся вечно.
Офлайн
kachayevМожет у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.
№1. Напечатает
4.Почему?[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
операция []*3 сделает список из трех элементов, ссылающихся на один объект.
соответственно все три операции append “отобразятся” на всех элементах.
а вот переприсваивание изменит только элемент с индексом 0.
Офлайн
Правильный ответ на 3й? Тут как бы несовсем ясно что считать “правильным” - логики то в работе counter сейчас нет… Можно убрать извлечение среза и перенести его “на плечи” функции counter, можно сделать как-нибудь так:
def counter(min, max):
while min<=max:
yield min
min += 1
print [i*i for i in counter(1,10)]
Офлайн
kachayevВы мне здорово помогли, спасибо!
Правильный ответ на 3й? Тут как бы несовсем ясно что считать “правильным” - логики то в работе counter сейчас нет… Можно убрать извлечение среза и перенести его “на плечи” функции counter, можно сделать как-нибудь так:в этом случае for будет итерировать по значениям от min до max.def counter(min, max):
while min<=max:
yield min
min += 1
print [i*i for i in counter(1,10)]
и т.д.
Офлайн
Apollo46покажите версию Python и код, который вы выполняете.
Может у меня python кривой, а может я кривой, но я прогонял это задание у меня получилось то, что в топике указано.
Офлайн
Здравствуйте.У меня есть задание в котором нужно написать программу, заполняющую список из 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]
Офлайн