H3LJA

Питон в 5-м классе
------------------

Пролистал российский учебник по Python для 6-8 классов (2015 г). Показался сложным. Так родилась идея этой заметки.

Программа на Питоне
...................

Программа записывается в текстовый файл с обязательным соблюдением всех установленых правил.

Из книг, газет, интернета мы привыкли к следующей структуре текста:

  Буква -> Слово -> Предложение -> Абзац -> Глава -> Том
  
Тексты программ на языке Питон пишутся похожим образом, но ошибки, опечатки не допускаются вовсе -- текст будет читать робот (интерпретатор Python) и переведет его в последовательность нулей и единиц -- единственный язык понятный компьютеру.

NB! Важно: 
..........

  I.   Чтобы быстрее начать создавать что-нибудь работоспособное на языке Python совсем не нужно знать весь язык. Младенец кричит только "мама", но мама его понимает:). Бегаем по форумам и впитываем "полюбившиеся выражения".
  
  II.  Не стоит начинать с нуля. Мы привыкли пользоваться своим смартофоном, но сотворить его в одиночку из песка на необитаемом острове не хватит ни времени (~1e+9 лет) ни знаний (прочитать ~1e+9 страниц технического текста). Возьмем работающую программу и начнем ее потихоньку править.
  
  III. Поверить в то, что правильно будет изучать именно в той последовательности, которую нам предлагают, не хочется, но есть ли выбор? Поверим, а если вскроется обман, останется только пожалеть о потерянном времени.. А вдруг и правда так можно, ведь миллионы, идя этой дорожкой, стали-таки программистами (а ведь это аргумент).

  IV. Правил в языке программирования бывает много, а самих языков еще больше. Поэтому, если в голову пришла интересная мысль, можно попробовать, а "вот так" работает? Если да -- __НЕОБХОДИМО__ убедиться что "это" по правилам, иначе в следующей версии программы или на другом компьютере оно не сработает. Иногда "убедиться" занимает уйму времени. Помогает то, что исправление "незаконного приема" обойдется еще дороже (имею опыт).

Python -- калькулятор
---------------------

Для начала нам понадобиться виртуальная машина LX1704 "Ubuntu-x64_86", которую нужно иметь в самой последней версии (Узнать на уроке, где лежит, у тех кто уже ее использует). Python-3 доступен по иконе Thonny, Python-2 по иконе IDLE. 

В Python-2 работает большинство людей (~95%), но дни его сочтены (TOD 2020, time of death). Для разжигания аппетита, в нашей виртуальной машине в него установлены дополнения 3D графики python-visual.

В Python-3 работает меньшинство людей (~5%), но за ним будущее. Для разжигания аппетита, в нашей виртуальной машине в него установлены дополнения для создания простых игр "Пижама" (PyGame).

Подсказка ">>>" позволяет немедленно что-либо посчитать. Например:

  >>> 583058039580358308530883485383045836383680383408635238563468262010
  1381310830138013813183136316391639163916391331163193636139136619136136
  193361963196 * 1234555555556789999999999999997680000042342395439534954
  3000450450435035035030530503050666677000707070788594392921719817541975
  9821045451537985429584613263814627220497742518584934997256418620697023
  0560215469843712245675157750949045795278923793725263156693500437009302
  0392956455759390180179236315717349349176613480456187515496421650711425
  78453317612601848174848956562364935516 =
  7198175419759821045451537985429584613263814627220497742518584934997256
  4186206970230560215469843712245675157750953242749327724477746135452264
  3807296514018609819250746913662262520154207655666452235273838343764550
  9864063541433964456706176709102068402839188315485399788956535541171069
  9692380745200721230931856527284269332884999089798591991395975051759031
  8730159765318820043177130317155328652426846892563709607490348313148690
  2922241755031566740775428212276386549765288971622487616722719048675286
  085147084936417515965705269136L

Можете проверить.

        "Алгебра -- это объекты и действия над ними". 

  + Объекты: True и False

    Действия: and, or, not   # Жегалкинское "xor" позиционируется 
                             # как bitwise. Про Кена Томпсона (!)
                             # вспомнят позже, хотя:
      >>> True == 1
      True
      >>> False == 0
      True

Тут Эллочка-людоедка из 12-ти стульев сказала бы "Жуть!" (или "Блеск!"). Хотя всему виной скрытые преобразования типов (было в курсе информатики в яслях). К слову, ("полюбившееся выражение"):

  >>> import sys
  >>> sys.getsizeof(True)
  14

  + Объекты: целые числа -- помещаются в 32 бита. Python-2 был здесь исключительно общительным:
    
  >>> import sys
  >>> sys.maxint
  2147483647

Целесообразно минимально допустимым числом целого типа сделать -sys.maxint, а двоичное значение 11111111 11111111 11111111 11111111 (-2147483648 в дополнительном коде) зарезервировать как NaN (not a number -- не число). Вот только Python тут не причем, просто автору так нравится. Целые числа можно складывать, вычитать, умножать, делить нацело, брать остаток (+ - * / %) сравнивать (< <= == >= >). "Огласите весь список, пожалуйста!" (Операция "Ы", 1965, 0:05:09):

  https://www.tutorialspoint.com/python3/python_basic_operators.htm

  + Объекты: большие целые числа
  
  >>> sys.getsizeof(9999999999999999999999999999999999999)
  30
  
  + Объекты: числа c плавающей точкой (float)

  >>> import sys
  >>> sys.getsizeof(-3.14e+15)
  16
  
  + Объекты: строки
  
  >>> "one" + "two"
  'onetwo'

Переменные
..........

Память компьютера, как длинная цепочка, в каждое звено которой можно записать 0 или 1. Все звенья пронумерованы (если в вашем компьютере 32 гигабайта памяти, то адреса отдельных битов (0 или 1) от 0 до 274877906943). Чаще нумерация более сложная -- байты, слова, страницы, сегменты, смещения.. Питон берет на себя заботу о размещении и перемещении данных, так что вам не нужно знать, где лежит ваш объект или даже сколько места он занимает, размещен ли одним куском или поделен на фрагменты (сектора, кластеры..) и многое другое.

Нужно только сообщить Питону имя переменной, имя, по которому Питон найдет ваши данные.

Пример.

  >>> alpha = 5
  >>> beta = 6.78
  >>> gamma = ' gamma'
  >>> delta = True
  >>> x = 'hello' + gamma
  'hello gamma'
  >>> beta * (3 - 1)
  13.56
  >>> alpha > 7
  False
  
Последовательность изучения
...........................

 + # Комментарии 
 
 + Переменные
 
 + Операции и выражения. Продолжение строки  \
   и несколько предложений в одной строке    ;
   
 + функции, аргументы и возвращаемые значения,
   соглашение об именах переменных (naming convention).
   область видимости и время жизни переменной.
   
 + поток управления: if, while, for, break, return
 
 + структуры данных: список, кортеж (tuple), словарь
   последовательность, множество, строка
   
 + модули: операция "точка", from, import
 
 + исключения: try, except, finally, raise

 + классы: инкапсуляция, наследование, полиморфизм

Ну вот, теперь мы готовы читать учебник для шестого класса. "I hope so.." (Yes Acoustic, Guaranteed No Hiss, 2004, 05. Soundcheck, 1:56)

Приложение А. A tons of samples
-------------------------------

Тема Питон-Калькулятор
......................

  1. type

    >>> type(555)
    <class 'int'>
    >>> type(True)
    <class 'bool'>
    >>> type(5555555555555555555555555555555555555)
    <class 'int'>
    >>> type(5e3)
    <class 'float'>
    >>> type('bye')
    <class 'str'>

  2. Приведение типов

    >>> bool(5) ^ bool(0)
    True

Тема python-visual
..................

1. Начинаем

  from visual import *
  s = sphere()
  s.color = color.blue
  
2. Система координат (pos(X,Y,Z))

  #    Y +                Height +
  #      |        size(X,Y,Z)    |      size(L,H,W)
  #      |                       |
  #      0----- + X (X-files)    0----- + Lenght 
  #     /                       /
  #  Z + (PetZold*)            Width +              
  #
  #  near -- far: press middle mouse button and drag
  #  view from other location: press right mouse button and drag

  from visual import *

  s = sphere()
  s.color = color.blue

  bx = box(pos=(2,0,0),length=5,height=.1,width=.1)
  by = box(pos=(0,2,0),length=.1,height=5,width=.1)
  bz = box(pos=(0,0,2),length=.1,height=.1,width=5)

  bx.color = (0.5,0.2,0.1) # brown
  by.color = color.white 
  bz.color = color.green
  
*) Со школы помнится: ось X cлева (-) направо (+) по горизонтали, ось y -- снизу (-) вверх (+) по вертикали. Активное окошко на столе компьютера перекрывает какие-то другие. Значит ось Z смотрит с экрана на юзера, а как же иначе? Что, математик рисует ее на бумаге как-то иначе? Ну так ведь то математик..
  
3. Подробности на http://vpython.org

      Documentation -> Full Documentation
      
      [ Choose a 3D object   | v ]
      [ Work with 3D objects | v ]
      [ Displays / Events    | v ]

Тема "Пижама" (Pygame)
......................

  https://pythonprogramming.net/pygame-python-3-part-1-intro/

Тема "Мост с Ардуино" (Serial Communication with Arduino)
.........................................................

SimutronQT v.1.0.1-SR1 Circuit simulation:

  MCU: ATMega328P 16MHz (Arduino Uno)
  Probe: PB5 (D13 Arduino Uno)
  AVR Serial Connection: Target_MCU="AVR MCU-1"     
                         Host_PTY="/tmp/simavr1-uart0"
  Firmware: SerialTest

Sketch Arduino 1.8.1 (Genuino Uno).
 
  // We need to build an .elf file (firmware)

  void setup() {
    Serial.begin( 9600);
    pinMode( 13, OUTPUT);
    // wait for serial port to connect. 
    // Needed for native USB port only.
    while ( !Serial); 
  }

  void loop() {
    if ( Serial.available() > 0) {
      int inByte = Serial.read();
      if ( inByte == 'Z') digitalWrite( 13, HIGH);
      if ( inByte == 'A') digitalWrite( 13, LOW);
    }
  }

Тема e-mail в TPT
-----------------

  s.replace('ä','a').replace('õ','o').replace('ü','u').replace('õ','o')
  s.replace('Ä','A').replace('Õ','O').replace('Ü','U').replace('Õ','O')
  s.replace('ž','z').replace('š','s').replace('Ž','Z').replace('Š','S')
  (sn, ss) = s.split
  e = sn.lower() + '.' + ss.lower() + '@' + 'tptlive.ee'

  s = "Äöüõ Žš"

Задача для PuTTY + Python
-------------------------

Размер cтороны ячейки 2**1.5R. Скорость падения постоянна для всех шариков.

Выяснить сканкоды, которые посылает Putty при нажатии на кнопки влево "<" вправо ">" вверх "^" вниз "v". Если нет идей, как это сделать, используем буквенные кнопки из vi:
 
     h   - влево, "а не в Хвост строки"
     j   - вниз, "а не Йог левитирующий"
     k   - вверх, "а не Копать" 
     l   - вправо, "a не наЛево"
     
  ^ подняться на один уровень
  v опуститься на один уровень
  < шаг влево
  < шаг вправо

Питон. чего не хватает:
-----------------------

  Конструктор класса только один.
  Нет инкапсуляции.
  Функции вызываются по имени а не по сигнатуре.
  Не вижу абстрактных классов и класс-методов.
  Разобраться с перегрузкой функций и операторов.
  Разобраться с мерами ограничения доступа.
