Функции

In [3]:
def sign(x):
    """
    Вернуть знак числа
    """
    if x > 0:
        y = 1
    elif x < 0:
        y = -1
    else: 
        y = 0
    return y
In [4]:
help(sign)
Help on function sign in module __main__:

sign(x)
    Вернуть знак числа

In [9]:
sign?
In [8]:
print(sign(-10), sign(0), sign(100))
-1 0 1
In [2]:
sign() #
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-342abfdca878> in <module>()
----> 1 sign() #

NameError: name 'sign' is not defined

Задача. Определим функцию 'list_max(L)', которая возращает максимальный элемент непустого списка.

решение

In [36]:
def list_max(L):
    maxim = -99999
    for i in range(len(L)):
        if L[i-1]>maxim:
                maxim = L[i-1]
                return maxim
In [37]:
L = [1,2,9,5,2,19,5,7]
print(list_max(L))
7
In [42]:
max(3,8,-3,12,9) 
Out[42]:
12
In [43]:
a = [8,-11,4,2,-5] 
max(a,key=abs) 
Out[43]:
-11
In [7]:
def dict_getitem(d, key, default=None):
    """
    Вернуть из словаря 'd' элемент с заданным ключем 'key'
    Если элемента с таким ключом нет в словаре, то вернуть 'default'.
    """
    if key in d:
        return d[key]
    else:
        return default
In [18]:
d = {'a':1, 'b':2, 'c':3}
print(dict_getitem(d, 'e'))
print(dict_getitem(d, 'e', 'no'))
print(dict_getitem(d, 'e', default='no'))
None
no
no

Задача. Определить функцию 'max_negative' для нахождения наибольшего отрицательного значения в списке. Если отрицательных значений нет, то вернуть 'None'.

Решение

In [75]:
def max_negative(L):
    minim = -99999 
    for i in range(len(L)):
        if L[i-1]>minim:
            if L[i-1]<0:
                minim = L[i-1]
                if minim == -99999:
                    return "none"
                else:
                    return minim
print (list_max(L))
print (max_negative(L))
7
-19
In [73]:
L = [1,2,9,5,2,-19,5,7]
print(max_negative(L))
-19

Классы

In [47]:
class Node: #(object):
    #
    def __init__(self, label, value):
        self.label = label
        self.value = value
    #
    def __repr__(self):
        return "Node(%r,%r)" % (self.label, self.value)
    #
    def update_value(self, val):
        self.value = val
#
#
#
In [21]:
repr(Node)
Out[21]:
"<class '__main__.Node'>"
In [22]:
nd1 = Node('a', 1.0)
print (nd1)
Node('a',1.0)
In [23]:
nd2 = eval(repr(nd1))
print (nd2)
Node('a',1.0)
In [24]:
nd1.update_value(-1.0)
print (nd1)
Node('a',-1.0)
In [25]:
vars(nd1)
Out[25]:
{'label': 'a', 'value': -1.0}

Задача. Расширить класс Node, добавив в него дочерние узлы. Для этого используем атрибут 'children'. Определить метод 'append'для добавления в список дочерних узлов заданного узла. Определить метод 'delete' для удаления дочернего узла с индексом 'i'.

Решение

In [62]:
class NestedNode: #(object):
    #
     def __init__(self,  label, value, children):
        self.label = label
        self.value = value
        self.children = children
        children = []
    #
     def __repr__(self):
        return "NestedNode(%r,%r,%r)" % (self.label, self.value, self.children)
    #
     def update_value(self, val):
        self.value = val
    #
     def append (self, child):
        self.children.append(child)
    #
     def delete (self, i):
        self.children.pop(i)
    #
    #
    #
In [63]:
repr(NestedNode)
Out[63]:
"<class '__main__.NestedNode'>"
In [64]:
nd1 = NestedNode ('a', 1.0, [])
print (nd1)
NestedNode('a',1.0,[])
In [65]:
nd2 = NestedNode('a', 2.0, [])
print (nd2)
NestedNode('a',2.0,[])
In [66]:
nd3 = NestedNode('a', 3.0, [])
print (nd3)
NestedNode('a',3.0,[])
In [67]:
nd3.append (nd2)
print (nd3)
NestedNode('a',3.0,[NestedNode('a',2.0,[])])
In [68]:
nd3.delete (0)
print (nd3)
NestedNode('a',3.0,[])
In [ ]: