Автоматизация и боты

 Помощь      Поиск      Пользователи

 

Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): [1] 2 »   

> Описание: Возможность писать и выполнять скрипты для Питона в редакторе Кибор паралельно с выполнением скрипта Кибор. Директивы __python и __end_python
Kibor
Отправлено: 08 Августа, 2020 - 16:16:12
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




В этой версии появились директивы
__python, __python_sync и __end_python
С их помощью можно писать и выполнять чистые Питон скрипты непосредственно в самом коде Кибор, параллельно с его выполнением.

В этих блоках допускаются любые скрипты, функции, вызов функций Питона.
Выполнение блоков в Питоне начавшихся с __python идет не синхронно с выполнением кода Кибор.
Для синхроннгого выполнения надо использовать директиву __python_sync

При выполнение Питоном инструкции input, выводится диалоговое окно.

Пример:

Асинхронное выполнение:
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python
import time
time.sleep(5)
__end_python

messagebox ("Верхний скрипт Питона выполняется. Он должен сделать паузу 5 секунд.^nНо скрипт Кибор ее не будет ждать.");
closepython();

er:;


Синхронное выполнение:
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python_sync
import time
time.sleep(5)
__end_python

messagebox ("Ждали паузу 5 секунд.");
closepython();

er:;


Загрузка функции Питона и ее использование в Кибор по необходимости. Не забываем про правила отступа. Пустая строка = нажатию Ентер
 Цитата:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

//Загружаем функцию Питона
__python
import difflib

def similarity(s1, s2):
(отступ) normalized1 = s1.lower()
(отступ) normalized2 = s2.lower()
(отступ) matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
(отступ) return matcher.ratio()

__end_python

sleep(100);

//Вызываем когда понадобится с параметрами
messagebox (sendgetpython("similarity('мыло', 'мало')"));//0.75

closepython();

er:;



 Цитата:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}
load_fen_python();//Загружаем все функции Питона

sleep(100);

//Вызываем когда понадобится с параметрами
messagebox (sendgetpython("similarity('мыло', 'мало')"));//0.75

closepython();

er:;


//Загружаем все функции Питона
function load_fen_python()
{
__python
import difflib

def similarity(s1, s2):
(отступ) normalized1 = s1.lower()
(отступ) normalized2 = s2.lower()
(отступ) matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
(отступ) return matcher.ratio()

__end_python
}

------------------------------------------------------------------------------------

На блоки Питон скриптов в __python и __end_python не распространяется форматирование блоков.

Можно так писать
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python print('qwert')__end_python

sleep(100);

messagebox (getpython());

closepython();

er:;


Как передать в функцию Питона большой объем данных и получить ответ после того как она что то с ними сделает
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}
load_fen_python();//Загружаем все функции Питона

sleep(100);
string ss="";
for(int a=0; a<1000; a++)ss=ss+format(rand(0, 250))+",";
ss=ss+"]";

messagebox("Сейчас вызовем функцию Python и передадим ему 1000 чисел и получим ответ.");
//Вызываем когда понадобится с параметрами

// my_function([1, 2, 3, 4, 5])
messagebox (sendgetpython("my_function(["+ss+")"));

closepython();

er:;


//Загружаем все функции Питона
function load_fen_python()
{
//Тут что то полезное делаем в питоне с этими числами
__python
def my_function(some_list):
(отступ) print(some_list[257]+some_list[22]) #Сложим 2 числа и вернем результат

__end_python
}


MessageBox python
CODE:
enableconsolepython(1, 1, 50, 50, 800, 200);
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python_sync
import ctypes
MessageBox = ctypes.windll.user32.MessageBoxW
MessageBox(None, 'Hello', 'Window title', 0)
__end_python


er:;
disableconsolepython();
 
 Top
Kibor
Отправлено: 29 Августа, 2020 - 16:02:47
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




Немного поправил.
Убрал удаление пробелов Перед скриптом.
Из за удаления пробелов невозможно было писать скрипт Питона в разных блоках, если в них необходимо было ставить отступы в начале.

Пример:

Такой скрипт выполнялся провильно
 Цитата:
__python
a = 5
b = 10
c = 1
if a > b:
(4 отступа)print("A больше B")
else:
(4 отступа)print("B больше или равно A")
(4 отступа)if c == 0:
(8 отступов)print("c равно 0")
(4 отступа)else:
(8 отступов)print("c не равно 0")

__end_python



Если его разбить на части, то была ошибка, так как отступы обозначенные красным удалялись. Сейчас такой ошибки нет.
 Цитата:
__python
a = 5
b = 10
c = 1
if a > b:
(4 отступа)print("A больше B")
else:
(4 отступа)print("B больше или равно A")
__end_python

__python
(4 отступа)if c == 0:
(8 отступов)print("c равно 0")
(4 отступа)else:
(8 отступов)print("c не равно 0")

__end_python




CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

fyn(0);
fyn(1);


closepython();
er:;


function fyn(int p)
{
__python
a = 5
b = 10
c = 1
if a > b:
(4 отступа)print("A больше B")
else:
(4 отступа)print("B больше или равно A")
__end_python


//Продолжение Питон скрпта.
//Каким кодом продолжить Питон скрипт зависит от условия Кибор

if (p==1)//Условие Кибор if
{
__python
(4 отступа)if c == 0:
(8 отступов)print("c равно 0")
(4 отступа)else:
(8 отступов)print("c не равно 0")

__end_python
}
else//Условие Кибор else
{
__python
(4 отступа)if c == 1:
(8 отступов)print("c равно 1")
(4 отступа)else:
(8 отступов)print("c не равно 1")

__end_python
}


sleep(100);
messagebox (getpython());
}
 
 Top
Kibor
Отправлено: 30 Августа, 2020 - 20:01:49
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




Добавил директиву __python_sync

С ее помощью можно организовывать синхронное выполнение скриптов.
Однако если требуется считать результат работы скрипта, то необходимо вызывать для этого отдельную функцию sendgetpython
CODE:
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python_sync
import time
a=1
time.sleep(5)
a=a+2
__end_python

messagebox (sendgetpython("print(a)"));
closepython();

er:;
 
 Top
ivantu
Отправлено: 30 Августа, 2020 - 21:20:19
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 555
Дата рег-ции: Нояб. 2013  
Репутация: 9




__python_sync, достаточно один раз вызывать в начале скрипта я так понял?
 
 Top
Kibor
Отправлено: 30 Августа, 2020 - 21:29:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




 ivantu пишет:
__python_sync, достаточно один раз вызывать в начале скрипта я так понял?

Нет. Между
__python или __python_sync и __end_python вставляется код Python, когда его надо выполнить.

CODE:
enableconsolepython(1, 1, 50, 50, 400, 600);
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}

__python_sync
import time
a=1
time.sleep(2)
a=a+2
__end_python

messagebox (sendgetpython("print(a)"));

__python_sync
b=55
b=b+a+1
__end_python

messagebox (sendgetpython("print(b)"));
messagebox("");
er:;
disableconsolepython();
 
 Top
ivantu
Отправлено: 30 Августа, 2020 - 21:32:57
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 555
Дата рег-ции: Нояб. 2013  
Репутация: 9




Я чего то не понял... а сразу по умолчанию , чтоб это было не круто? Чтоб теги не писать постоянно ))
 
 Top
Kibor
Отправлено: 30 Августа, 2020 - 21:36:16
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




По умолчанию Кибор не Питон. По умолчанию он выполняет скрипт Кибор..
Ну если вы собираетесь выполнять только один Питон, то пишите один раз вверху. И закройте один раз внизу.
Эти директивы для того, что бы вставить Питон скрипт в код Кибор.
 
 Top
ivantu
Отправлено: 30 Августа, 2020 - 23:59:37
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 555
Дата рег-ции: Нояб. 2013  
Репутация: 9




Так я и говорил про то что код кибора, зачем указывать на питон, если по умолчанию кибор, пускай вставки питона будут по умолчанию...
 
 Top
Kibor
Отправлено: 31 Августа, 2020 - 00:06:22
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 6363
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 250




А как программа поймет что это строка скрипта Питона, а не набор символов, на которые выдаст ошибку о нарушение синтаксиса?
 
 Top
ivantu
Отправлено: 31 Августа, 2020 - 07:33:58
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 555
Дата рег-ции: Нояб. 2013  
Репутация: 9




Это моя не внимательность, я подумал , что тег __python_sync, должен быть внутри __python и end__python, а на самом деле он заменяет __python , тогда все четко.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by