Простой Python — страница 58 из 66

>> def get_odds():

…·····for number in range(1, 10, 2):

…·········yield number

>>> for count, number in enumerate(get_odds(), 1):

…·····if count == 3:

…·········print("The third odd number is", number)

…·········break

Третье нечетное число равно 5.

10. Определите декоратор test, который выводит строку 'start', когда вызывается функция, и строку 'end', когда функция завершает свою работу:

>>> def test(func):

…·····def new_func(*args, **kwargs):

…·········print('start')

…·········result = func(*args, **kwargs)

…·········print('end')

…·········return result

…·····return new_func

>>>

>>> @test

… def greeting():

…·····print("Greetings, Earthling")

>>> greeting()

start

Greetings, Earthling

end

11. Определите исключение, которое называется OopsException. Сгенерируйте его, чтобы увидеть, что произойдет. Затем напишите код, позволяющий поймать это исключение и вывести строку 'Caught an oops':

>>> class OopsException(Exception):

…·····pass

>>> raise OopsException()

Traceback (most recent call last):

··File "", line 1, in 

__main__.OopsException

>>>

>>> try:

…·····raise OopsException

… except OopsException:

…·····print('Caught an oops')

Caught an oops

12. Используйте функцию zip(), чтобы создать словарь movies, который объединяет в пары эти списки: titles = ['Creature of Habit', 'Crewel Fate'] и plots = ['A nun turns into a monster', 'A haunted yarn shop']:

>>> titles = ['Creature of Habit', 'Crewel Fate']

>>> plots = ['A nun turns into a monster', 'A haunted yarn shop']

>>> movies = dict(zip(titles, plots))

>>> movies

{'Crewel Fate': 'A haunted yarn shop', 'Creature of Habit': 'A nun turns into a monster'}

Глава 5. Py Boxes: модули, пакеты и программы

1. Создайте файл, который называется zoo.py. В этом файле объявите функцию hours(), которая выводит на экран строку 'Open 9–5 daily'. Далее используйте интерактивный интерпретатор, чтобы импортировать модуль zoo и вызвать его функцию hours().

Так выглядит файл zoo.py:

def hours():

····print('Open 9–5 daily')

А теперь импортируем его интерактивно:

>>> import zoo

>>> zoo.hours()

Open 9–5 daily

2. В интерактивном интерпретаторе импортируйте модуль zoo под именем menagerie и вызовите его функцию hours():

>>> import zoo as menagerie

>>> menagerie.hours()

Open 9–5 daily

3. Оставаясь в интерпретаторе, импортируйте непосредственно функцию hours() из модуля zoo и вызовите ее.

>>> from zoo import hours

>>> hours()

Open 9–5 daily

4. Импортируйте функцию hours() под именем info и вызовите ее:

>>> from zoo import hours as info

>>> info()

Open 9–5 daily

5. Создайте словарь с именем plain, содержащий пары «ключ — значение» 'a': 1, 'b': 2 и 'c':3, а затем выведите его на экран:

>>> plain = {'a': 1, 'b': 2, 'c': 3}

>>> plain

{'a': 1, 'c': 3, 'b': 2}

6. Создайте OrderedDict с именем fancy из пар «ключ — значение», приведенных в упражнении 5, и выведите его на экран. Изменился ли порядок ключей?

>>> from collections import OrderedDict

>>> fancy = OrderedDict([('a', 1), ('b', 2), ('c', 3)])

>>> fancy

OrderedDict([('a', 1), ('b', 2), ('c', 3)])

7. Создайте defaultdict с именем dict_of_lists и передайте ему аргумент list. Создайте список dict_of_lists['a'] и присоедините к нему значение 'something for a' за одну операцию. Выведите на экран dict_of_lists['a']:

>>> from collections import defaultdict

>>> dict_of_lists = defaultdict(list)

>>> dict_of_lists['a'].append('something for a')

>>> dict_of_lists['a']

['something for a']

Глава 6. Ой-ой-ой: объекты и классы

1. Создайте класс, который называется Thing, не имеющий содержимого, и выведите его на экран. Затем создайте объект example этого класса и также выведите его. Совпадают ли выведенные значения?

>>> class Thing:

…·····pass

>>> print(Thing)

>>> example = Thing()

>>> print(example)

<__main__.Thing object at 0x1006f3fd0>

2. Создайте новый класс с именем Thing2 и присвойте его атрибуту letters значение 'abc'. Выведите на экран значение атрибута letters:

>>> class Thing2:

…·····letters = 'abc'

>>> print(Thing2.letters)

abc

3. Создайте еще один класс, который, конечно же, называется Thing3. В этот раз присвойте значение 'xyz' атрибуту объекта, который называется letters. Выведите на экран значение атрибута letters. Понадобилось ли вам создавать объект класса, чтобы сделать это?

>>> class Thing3:

…·····def __init__(self):

…·········self.letters = 'xyz'

Переменная letters принадлежит любому объекту класса Thing3, но не самому классу Thing3:

>>> print(Thing3.letters)

Traceback (most recent call last):

··File "", line 1, in 

AttributeError: type object 'Thing3' has no attribute 'letters'

>>> something = Thing3()

>>> print(something.letters)

xyz

4. Создайте класс, который называется Element, имеющий атрибуты объекта name, symbol и number. Создайте объект этого класса со значениями 'Hydrogen', 'H' и 1:

>>> class Element:

…·····def __init__(self, name, symbol, number):

…·········self.name = name

…·········self.symbol = symbol

…·········self.number = number

>>> hydrogen = Element('Hydrogen', 'H', 1)

5. Создайте словарь со следующими ключами и значениями: 'name': 'Hydrogen', 'symbol': 'H', 'number': 1. Далее создайте объект с именем hydrogen класса Element с помощью этого словаря.

Начнем со словаря:

>>> el_dict = {'name': 'Hydrogen', 'symbol': 'H', 'number': 1}

Это работает, однако необходимо напечатать много текста:

>>> hydrogen = Element(el_dict['name'], el_dict['symbol'], el_dict['number'])

Убедимся, что это работает:

>>> hydrogen.name

'Hydrogen'