воскресенье, 22 декабря 2019 г.

4-A. Базовые конструкции алгоритмов

4-A. Базовые конструкции (виды) алгоритмов - обзор

1.4.1 - Линейные алгоритмы

Пусть имеется ученик Миша, которого мы хотим наделить способностями Черепахи:
import turtle as Миша
После чего, Миша будет способен выполнять команды:
вперед на x шагов - forward(x)
повернись влево на x градусов - left(n)
 и другие ...
In [1]:
import turtle as Миша # Да прибудет с Мишей черепашья сила
Миша.forward(200)     # Миша - вперед на 200 шагов
Миша.left(90)         # Миша повернись влево на 90 градусов
Миша.mainloop()# Не закрывай окно выполнения (мы сами нажмем крестик)
В окне выполнения Миша был представлен стрелочкой, что не симпатично. 
Облачим Мишу в костюм Черепахи - shape('turtle')




In [1]:
import turtle as Миша
Миша.shape('turtle')
Миша.forward(200)
Миша.left(90)
Миша.mainloop()
В обоих программах все команды были записаны друг за другом - в одну линию.
В таких программах (алгоритмах) команды будут выполняться в том порядке, в котором они записаны.
В этом случае говорят, что это линейные алгоритмы

1.4.2 - Вспомогательные алгоритмы

Если мы хотим научить исполнителя новой команде, то мы должны описать вспомогательный алгоритм:
  • с помощью команды def определить для него имя
  • в скобках указать параметры, от которых он будет зависеть (или оставить их пустыми)
  • поставить знак ":"
  • далее, с красной строки написать то, как будет реализована новая команда

Когда исполнитель встретит такое описание - он научиться новой команде, а выполнять ее будет только тогда, когда произойдет вызов по ее имени. Затем вернется в место, следующее после ее вызова.
Научим нашего Мишу прходить один круг по квадратному стадиону. Благодаря вспомогательному алгоритму сторона(), у нас сократится количество записанных команд.
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
сторона()
сторона()
сторона()
сторона()

1.4.3 - Ветвления

  • Сокращенное ветвление:  if (ответвление)
  • Разветвление:  if - else:
  • Множественное ветвление:  if - elif - ... - elif - else:
Научим Мишу менять цвет, оставляемого им следа
pencolor() - узнать текущий цвет
pencolor('цвет') - поменять на 'цвет'
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Сокращенное ветвление if (ответвление):
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
сторона()
сторона()
сторона()
сторона()
In [1]:



import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Разветвление if - else:
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
    else:
        Миша.pencolor('black')
сторона()
сторона()
сторона()
сторона()
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Множественное ветвление if - elif - ... - elif - else:
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
    elif Миша.pencolor()=='red':
        Миша.pencolor('blue')
    elif Миша.pencolor()=='blue':
        Миша.pencolor('green')
    elif Миша.pencolor()=='green':
        Миша.pencolor('gray')
    else:
        Миша.pencolor('black')
сторона()
сторона()
сторона()
сторона()

1.4.4 - Циклические

с многократно повторяющимися подряд командами
ТЦ - тело цикла (команды, которые надо повторять)
Цикл for - повторяет ТЦ, для каждого значения в объекте
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
 Миша.forward(200)
 Миша.left(90)
 if Миша.pencolor()=='black':
  Миша.pencolor('red')
 elif Миша.pencolor()=='red':
  Миша.pencolor('blue')
 elif Миша.pencolor()=='blue':
  Миша.pencolor('green')
 elif Миша.pencolor()=='green':
  Миша.pencolor('gray')
 else:
  Миша.pencolor('black')
for __ in '1234': # будет выполнять ТЦ для каждого (1,2,3,4) из строки '1234'
    сторона()     # ТЦ
Миша.mainloop()
Цикл while - повторяет ТЦ (после двоеточия, с красной строки), пока истинно высказывание, записанное между while и двоеточием
In [ ]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
 Миша.forward(200)
 Миша.left(90)
 if Миша.pencolor()=='black':
  Миша.pencolor('red')
 elif Миша.pencolor()=='red':
  Миша.pencolor('blue')
 elif Миша.pencolor()=='blue':
  Миша.pencolor('green')
 elif Миша.pencolor()=='green':
  Миша.pencolor('gray')
 else:
  Миша.pencolor('black')
Круг=6
while Круг:
 for __ in 1,2,3,4:
  сторона()
 Круг = Круг - 1 
Миша.mainloop()


Урок 3-A. Python 3

пятница, 20 декабря 2019 г.

Урок 3-А (Уроки Python3)

3-A. Объекты и свойства. Типы объектов

Типы объектов.

Python3 умеет многое. Но, и он не всесилен, и по умолчанию, может работать не с любыми объектами, которые нам могут прийти в голову. Выясним, с какими типами объектов может работать Python3. Например, с помощью функции type(), узнаем какого типа объекты мы использовали на прошлом уроке.
In [ ]:
x, y, z = 2, 5, '25'
print(type(x),type(y),type(z))
<class 'int'> <class 'int'> <class 'str'>
Как мы видим x и y оказались представителями класса int - целые числа (сокращение от integer - целое), а z - str - строка символов. Как Python определил это? Если он видит, что объект состоит только из цифр, значит это число. Если заключен в кавычки - строка символов. Над объектами разных типов, как было видно и ранее на предыдущем уроке, python обращается по разному:
In [ ]:
x, y, z = 2, 5, '25'
print(x+y,z+z)
7 2525
Будут ли объекты 5 и 2.5, именнованые x-м и y-м, одного типа? И то, и другое числа. Но, как известно из темы "представление чисел в памяти компьютера", эти числа по разному храняться и обрабатываюся.
In [ ]:
x,y = 5, 2.5
print(type(x),type(y)) 
<class 'int'> <class 'float'>
Как мы видим у представитель другого класса - типа float.
Интересно, а какого типа объект Маша из предыдущего урока?
In [ ]:
Маша = {
    'пол':'ж',
    'гр':2005,
    'рост':165,
    'волос':'рыжий',
    'фото':''}
print(type(Маша))
<class 'dict'>
Итак, Маша - dictсловарь (dict - сокращение от dictionary). Что не удивительно, т.к. мы види последовательность пар - слово:значение

Принудительная типизация

До сих пор python сам определял тип объектов. Но, что если мы хотим сами задать или сменить тип. Для этого нужно его поместить, как аргумент, внутрь функции, которая будет иметь такое же название как и название типа, который нам нужен. Например, создадим из числовых x и y - строковые a и b.
In [ ]:
x, y = 2, 5
a, b = str(x), str(y)
print(x+y)
print(a+b)
7
25

AI