初始化提交

This commit is contained in:
王立帮
2024-07-19 10:16:00 +08:00
parent 4c7b571f20
commit 4a2d56dcc4
7084 changed files with 741212 additions and 63 deletions

View File

@@ -0,0 +1,163 @@
export const AI_ChooseAndGet = function (_, generator) {
var type = this.getFieldValue('TYPE');
generator.definitions_['import_FileDialog'] = 'import FileDialog';
var code = 'FileDialog.' + type + '()';
return [code, generator.ORDER_ATOMIC];
}
export const AI_client = function (_, generator) {
var ctype = this.getFieldValue('CTYPE');
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_' + ctype] = 'from aip import '+ ctype;
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var api_key = generator.valueToCode(this, 'API_KEY', generator.ORDER_ATOMIC);
var secret_key = generator.valueToCode(this, 'SECRET_KEY', generator.ORDER_ATOMIC);
var code = v + ' = ' + 'aip.' + ctype + '(' + api_key + ', ' + secret_key + ')\n';
return code;
}
export const AI_Speech_synthesis = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.synthesis(' + s + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Speech_asr = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
//var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var fn = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC) || '""';
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
//var code = v + '.'+ f +'(' + fn + ', options=' + attr + ')';
var code = v + '.asr(' + fn + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_ImageClassify = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipImageClassify'] = 'from aip import AipImageClassify';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + addr + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Face_match = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_AipSpeech'] = 'from aip import AipSpeech';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.match(' + s + ',' + s2 + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Ocr = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Ocr'] = 'from aip import Ocr';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + addr + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + s + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Sim = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
var f = generator.valueToCode(this, 'FUNC', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.' + f + '(' + s1 + ',' + s2 + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Topic = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
var s2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
var code = v + '.topic(' + s1 + ',' + s2 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_newsSummary = function (_, generator) {
generator.definitions_['import_aip'] = 'import aip';
//generator.definitions_['import_aip_Nlp'] = 'from aip import Nlp';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
var n = generator.valueToCode(this, 'LEN', generator.ORDER_ATOMIC);
var attr = generator.valueToCode(this, 'ATTR', generator.ORDER_ATOMIC) || '{}';
var code = v + '.newsSummary(' + s + ',' + n + ', options=' + attr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const AI_ImageClassify_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Ocr_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Func = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_Nlp_Func_sim = function (_, generator) {
var code = this.getFieldValue('TYPE');
return [code, generator.ORDER_ATOMIC];
}
export const AI_audio = function (_, generator) {
generator.definitions_['import_audio'] = 'import audio';
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var num = generator.valueToCode(this, 'TIME', generator.ORDER_ATOMIC) || '0';
var code = "audio.audio_record(" + str + ',' + num + ")\n";
return code;
}
export const AI_photo = function (_, generator) {
generator.definitions_['import_audio'] = 'import cam';
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var button = generator.valueToCode(this, 'BUT', generator.ORDER_ATOMIC) || '""';
var code = "cam.photo_capture(" + str + ',' + button + ")\n";
return code;
}
export const AI_result = function (_, generator) {
var varName = generator.valueToCode(this, 'AI', generator.ORDER_ASSIGNMENT) || '0';
var ctype = this.getFieldValue('CTYPE');
if (ctype == 'Image') { var code = varName + '["result"][0]["keyword"]' }
if (ctype == 'Speech') { var code = varName + '["result"][0]' }
if (ctype == 'Face' || ctype == 'OcrSimilarity') { var code = varName + '["score"]' }
if (ctype == 'Ocr') { var code = varName + '["words_result"]' }
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,929 @@
// sub_algorithm_1
export const algorithm_prepare = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,1,0,0,0], [0,1,1,0,1,1,0,0,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,0,1,0,0,1,1,0,0], [0,0,1,0,0,1,0,1,0,0], [0,0,0,0,1,1,1,0,0,0]]\n';
var line2 = 'mark = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]\n';
var code = line1 + line2 + "vis = [0,1,0,0,0,0,0,0,0]\n";
code += `position = [[0, 0], [200, 200], [250, 60], [320, 200], [280, 380], [470, 250], [670, 90], [650, 340]]
sprite.clearAllSprites()
sprite.createBackground('map_xuexiao')
house = [ sprite.Sprite('mark', 150, 380),
sprite.Sprite('School', 115, 195),
sprite.Sprite('House25', 264, 67),
sprite.Sprite('House36', 320, 200),
sprite.Sprite('House47', 290, 371),
sprite.Sprite('House25', 479, 233),
sprite.Sprite('House36', 674, 96),
sprite.Sprite('House47', 642, 318)
]
for i in house:
i.hide()\n`;
return code;
}
export const algorithm_add_school = function () {
// var code = "path = [1]\n"
// + "list1 = [0,1,2,3,4,5,6]\n"
// + "list2 = [3,1,0,4,5,6,2]\n";
var code = "path = [1]\n"
+ "car = sprite.Sprite('car', position[1][0], position[1][1])\nhouse[1].show()\n"
+ `car.nowPos = 1
def drive(n):
if g[car.nowPos][n]==1:
car.slideTo(position[n][0], position[n][1], 1)
car.nowPos = n
else:
print('移动失败!程序有误!')
exit()\n`;
return code;
}
export const algorithm_find_path = function (_, generator) {
generator.definitions_.import_random = "import random";
// var line1 = 'if random.choice([0,1]) == 0:\n'
// + ' list = list1\n'
// + 'else:\n'
// + ' list = list2\n'
// + 'f = path[(len(path) - 1)]\n'
// + 'flag = 0\n'
// + 'for _my_variable in range(7):\n'
// + ' if vis[_my_variable+1] == 0 and g[f][_my_variable+1] == 1:\n'
// + ' if mark[f][_my_variable+1] == 0:\n'
// + ' flag = 1\n'
// + ' break\n';
var line1 = 'f = path[(len(path) - 1)]\n'
+ 'flag = 0\n'
+ 'for _my_variable in [6,5,4,3,2,1,0]:\n'
+ ' if vis[_my_variable+1] == 0 and g[f][_my_variable+1] == 1:\n'
+ ' if mark[f][_my_variable+1] == 0:\n'
+ ' flag = 1\n'
+ ' break\n';
var code = line1;
return code;
}
export const algorithm_new_path = function (_, generator) {
var code = "flag == 1";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_set_path = function () {
var code = "mark[f][_my_variable+1] = 1\nvis[_my_variable+1] = 1\n";
return code;
}
export const algorithm_add_path = function () {
var code = "path.append(_my_variable+1)\n";
code += `drive(path[len(path) - 1])\nhouse[_my_variable+1].show()\n`;
return code;
}
export const algorithm_del_path = function (_, generator) {
generator.definitions_.import_time = "import time";
var code = "del path[len(path) - 1]\n";
code += `house[0].show()\ntime.sleep(0.5)\nhouse[0].hide()\n`;
return code;
}
export const algorithm_return_path = function () {
var code = 'for i in range(7):\n' + ' mark[f][i+1] = 0\n' + ' vis[f] = 0\n';
code = `house[f].hide()\ndrive(path[len(path) - 1])\n` + code;
return code;
}
export const algorithm_no_left = function (_, generator) {
var code = "len(path) == 7";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_path = function () {
var code = 'name = ["","学校","小智家","小欣家","小思家","小科家","贝贝家","乐乐家"]\nres = ""\nfor i in path:\n res = res + name[i] + "-"\nprint(res[:-1])\n';
return code;
}
// sub_algorithm_2
export const algorithm_prepare2 = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,1,0,0,0], [0,1,1,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,0,1,0,0,0,1,0,0], [0,0,1,0,0,0,0,1,0,0], [0,0,0,0,1,1,1,0,0,0]]\n';
var line2 = 'mark = [[0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]\n';
var code = line1 + line2 + "vis = [0,1,0,0,0,0,0,0,0]\n";
code += `position = [[0, 0], [200, 200], [250, 60], [320, 200], [280, 380], [470, 250], [670, 90], [650, 340]]
sprite.clearAllSprites()
sprite.createBackground('map_xuexiao')
house = [ sprite.Sprite('mark', 150, 380),
sprite.Sprite('School', 115, 195),
sprite.Sprite('House25', 264, 67),
sprite.Sprite('House36', 320, 200),
sprite.Sprite('House47', 290, 371),
sprite.Sprite('House25', 479, 233),
sprite.Sprite('House36', 674, 96),
sprite.Sprite('House47', 642, 318)
]
barricade = sprite.Sprite('barricade', 570, 170)
barricade.enlargeTo(100)
for i in house:
i.hide()\n`;
return code;
}
export const algorithm_current_school = function (_, generator) {
var code = "f == 1";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_no_path = function () {
var code = "print('没有符合条件的路线')\n";
return code;
}
// sub_algorithm_3
export const algorithm_prepare_2_1 = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g = [[10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000],[10000,10000,500,300,10000,10000,10000,10000,10000,10000,10000],[10000,500,10000,10000,100,10000,10000,10000,10000,10000,10000],[10000,300,10000,10000,400,300,10000,10000,10000,10000,10000],[10000,10000,100,400,10000,10000,200,10000,10000,10000,10000],[10000,10000,10000,300,10000,10000,100,200,10000,10000,10000],[10000,10000,10000,10000,200,100,10000,10000,100,10000,10000],[10000,10000,10000,10000,10000,200,10000,10000,100,10000,10000],[10000,10000,10000,10000,10000,10000,100,100,10000,10000,10000]]\n';
var line2 = 'now=1\n';
var code = line1 + line2 + "last=1\npath=[]\npath.append(1)\n";
code += `name = ["","小思家","银行","邮局","餐厅","书店","医院","超市","小科家"]
position = [[0, 0], [60, 320], [510, 390], [240, 200], [750, 330], [410, 90], [540, 190], [550, 30], [720, 120]]
sprite.clearAllSprites()
sprite.createBackground('map_si_ke')
stu = sprite.Sprite('girl', 60, 320)
stu.enlargeTo(100)
time.sleep(1)\n
`
return code;
}
export const algorithm_prepare_2_2 = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'g =[[10000,10000,10000,10000,10000,10000,10000],[10000,10000,300,500,10000,10000,10000],[10000,300,10000,10000,300,700,10000],[10000,500,10000,10000,10000,100,10000],[10000,10000,300,10000,10000,10000,200],[10000,10000,700,100,10000,10000,100],[10000,10000,10000,10000,200,100,10000]]\n';
var line2 = 'now=1\n';
var code = line1 + line2 + "last=1\npath=[]\npath.append(1)\n";
code += `name = ["","小智家","邮局","银行","书店","餐厅","学校"]
position = [[0, 0], [70, 340], [70, 90], [550, 310], [420, 70], [730, 250], [650, 130]]
sprite.clearAllSprites()
sprite.createBackground('map_zhi_xue')
stu = sprite.Sprite('boy', 70, 340)
stu.enlargeTo(100)
time.sleep(1)\n
`
return code;
}
export const algorithm_move_recent = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'tmp=10000\nfor i in range(0, len(g), 1):\n' + ' if g[now][i]<tmp and i!=last:\n' + ' next=i\n' + ' tmp=g[now][i]\n'
+ 'stu.slideTo(position[next][0], position[next][1], 1)\ntime.sleep(0.5)\n'
+ 'path.append(next)\n' + 'last=now\n' + 'now=next\n'
+ 'if len(path)>6:\n print("路线错乱!程序有误!")\n exit()\n';
var code = line1;
return code;
}
export const algorithm_not_home = function (_, generator) {
var code = "name[now] != '小科家'";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_not_school = function (_, generator) {
var code = "name[now] != '学校'";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_path2 = function () {
var code = `res = ""
for i in path:
res = res + name[i] + "→"
print(res[:-1])\n`;
return code;
}
// sub_algorithm_4 hanoi
export const hanoi_init = function (_, generator) {
// generator.definitions_.import_turtle = "import turtle";
// generator.definitions_.import_time = "import time";
// generator.definitions_.import_math = "import math";
// function randomHexColor() {
// //随机生成十六进制颜色
// var hex = Math.floor(Math.random() * 16777216).toString(16);
// //生成ffffff以内16进制数
// while (hex.length < 6) {
// //while循环判断hex位数少于6位前面加0凑够6位
// hex = '0' + hex;
// }
// return '#' + hex; //返回‘#'开头16进制颜色
// }
// var num = this.getFieldValue('NUM');
// let colorList = [];
// let i = 0;
// while (i < num) {
// i++;
// colorList.push('"' + randomHexColor() + '"');
// }
// generator.setups_['init_Hanoi'] = `
// def init_Hanoi():
// pen = turtle.Turtle()
// pen.hideturtle()
// pen.speed(0)
// for i in range(0, 3, 1):
// pen.penup()
// pen.setheading(0)
// pen.goto(150 * i - 200,-100)
// pen.pendown()
// pen.pensize(5)
// pen.forward(100)
// pen.goto(150 * i - 150,-100)
// pen.setheading(90)
// pen.forward(200)`;
// generator.setups_['begin'] = `
// def begin():
// s = turtle.Turtle()
// s.hideturtle()
// s.penup()
// s.speed(0)
// s.goto(0,-150)
// s.write('3')
// time.sleep(1)
// s.clear()
// s.write('2')
// time.sleep(1)
// s.clear()
// s.write('1')
// time.sleep(1)
// s.clear()
// s.write('Start!')
// time.sleep(1)
// s.clear()\n`;
// generator.setups_['move'] = `
// def move(x, y):
// try:
// t = tower[x].pop(-1)
// a = tower_num[x].pop(-1)
// if tower_num[y]!=[]:
// b = tower_num[y][-1]
// if a<b:
// print('非法移动,不能将大盘放置在小盘上')
// exit()
// t.goto(150 * y - 150,20 * len(tower[y]) - 90)
// tower[y].append(t)
// tower_num[y].append(a)
// except IndexError:
// print('非法移动,未找到可移动的圆盘')
// exit()\n`;
// var code = `num = ${num}
// tower = [[], [], []]
// tower_num = [[], [], []]
// A,B,C=0,1,2
// total_num=[0]
// color= (${colorList.join(', ')})
// init_Hanoi()
// for i in range(0, num, 1):
// tina = turtle.Turtle()
// tina.penup()
// tina.shape('square')
// tina.color("#000000",color[i])
// tina.goto(-150,20 * i - 90)
// tower[0].append(tina)
// tower_num[0].append(i)
// count_turtle=turtle.Turtle()
// count_turtle.hideturtle()
// count_turtle.penup()
// count_turtle.goto(0,150)
// count_turtle.write('总步数0')
// begin()\n`;
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var num = this.getFieldValue('NUM');
if (num >= 7) var code = `print('层数过高不得高于6层')\nexit()\n`;
else {
var code = `sprite.clearAllSprites()
_Hanoicolor = ['blue', 'red', 'yellow', 'green', 'purple', 'black']
_Hanoi = [[], [], []]
A = 0
B = 1
C = 2
_n = `+ num + `
_HanoiColumn = [
sprite.Sprite('HanoiColumn', 200, 320),
sprite.Sprite('HanoiColumn', 400, 320),
sprite.Sprite('HanoiColumn', 600, 320)
]
_HanoiColumnNumber = [
sprite.Text('A', 190, 120),
sprite.Text('B', 390, 120),
sprite.Text('C', 590, 120)
]
_HanoiBlock = []
for i in range(0, _n, 1):
_HanoiBlock.append(sprite.Sprite(_Hanoicolor[i], 200, 400-(_n-i-1)*27))
_HanoiBlock[i].setScale(25, 30*i+30)
_Hanoi[0].insert(0, _HanoiBlock[i])
_steptext = sprite.Text('步数0', 30, 30)
_steps = {'steps' : 0}
time.sleep(1)\n`
}
return code;
}
export const hanoi_move = function (_, generator) {
var fromNum = generator.valueToCode(this, 'FROM_NUM', generator.ORDER_ATOMIC) || '0';
var toNum = generator.valueToCode(this, 'TO_NUM', generator.ORDER_ATOMIC) || '0';
// var code = `move(${fromNum}, ${toNum})\ntotal_num[0]+=1\ncount_turtle.clear()\ncount_turtle.write('总步数:'+str(total_num[0]))\n`;
var code = `if len(_Hanoi[${fromNum}])>0 :
_HanoiBlockMoved = _Hanoi[${fromNum}].pop()
if len(_Hanoi[${toNum}]) > 0 :
_HanoiBlockSuppressed = _Hanoi[${toNum}].pop()
if _HanoiBlock.index(_HanoiBlockMoved) > _HanoiBlock.index(_HanoiBlockSuppressed):
print('非法移动!程序有误!')
exit()
else:
_Hanoi[${toNum}].append(_HanoiBlockSuppressed)
_HanoiBlockMoved.slideTo(${fromNum}*200+200, 180, 0.2)
_HanoiBlockMoved.slideTo(${toNum}*200+200, 180, 0.5)
_HanoiBlockMoved.slideTo(${toNum}*200+200, 400-len(_Hanoi[${toNum}])*27, 0.2)
_Hanoi[${toNum}].append(_HanoiBlockMoved)
_steps['steps'] += 1
_steptext.changeText('步数:'+str(_steps['steps']))
else :
print('非法移动!程序有误!')
exit()
`
return code;
}
// sub_algorithm_5
export const algorithm_all_books_sequence = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `if 'mode' not in globals() or mode == 0:
sprite.clearAllSprites()
ring=[0,0,0,0,0,0,0,0,0,0]
mode=1
n=5
ring[5]=1
name=['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(1, 11, 1):
Books.append(sprite.Sprite('books/book'+str(i), (130*i-650) if i>5 else 130*i, 320 if i>5 else 120))
else:
mode=2
n=len(ring)-1\nring[n]=1
time.sleep(1)\n`;
return code;
}
export const algorithm_all_books = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `if 'mode' not in globals() or mode == 0:
sprite.clearAllSprites()
ring=[0,0,0,0,0,0,0,0,0,0]
mode=2
n=5
name=['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(1, 11, 1):
Books.append(sprite.Sprite('books/book'+str(i), (130*i-650) if i>5 else 130*i, 320 if i>5 else 120))
else:
mode=1
n=len(ring)-1
ring[n]=n
list=ring
temp=Books
time.sleep(1)\n`;
return code;
}
export const algorithm_first_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var line1 = 'res=0\n';
var code = line1 + "flag=ring[res]\n";
code += `Books[res].filterBrighter()\ntime.sleep(0.1)\nBooks[res].filterOrigin()\n`;
return code;
}
// export const algorithm_no_ring = function() {
// var code = "ring[i]==0";
// return [code, generator.ORDER_ATOMIC];
// };
export const algorithm_no_ring2 = function (_, generator) {
var code = "(('mode' not in globals())or(mode==1 and flag==0)or(mode==2 and not any(value > 0 for value in qian))or(mode==0))";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_yes_ring2 = function (_, generator) {
var code = "(('mode' in globals())and((mode==1 and flag!=0)or(mode==2 and any(value > 0 for value in qian))))";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_next_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = "res+=1\nflag=ring[res]\n";
code += `Books[res].filterBrighter()\ntime.sleep(0.1)\nBooks[res].filterOrigin()\n`;
code = `Books[res].filterGray()\ntime.sleep(0.3)\n` + code;
return code;
}
export const algorithm_two_left = function (_, generator) {
var code = "len(list)>=2";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_divide_books = function () {
var code = `mid = int(len(list)/2)
qian = list[0:mid]
hou = list[mid:]
qiantemp = temp[0:mid]
houtemp = temp[mid:]\n`;
return code;
}
export const algorithm_get_half_books = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `quchu = qian
list = hou
quchutemp = qiantemp
temp = houtemp
for i in qiantemp:
i.filterBrighter()
time.sleep(0.5)
for i in qiantemp:
i.filterGray()
time.sleep(0.5)\n`;
return code;
}
// export const algorithm_check_half_books = function() {
// var code = "while ring[i]==0:\n if i==mid:\n flag=0\n break\n i+=1\n";
// return code;
// };
export const algorithm_delete_book = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `list = quchu
temp = quchutemp
for i in qiantemp:
i.filterBrighter()
time.sleep(0.5)
for i in qiantemp:
i.filterOrigin()
for i in houtemp:
i.filterBrighter()
time.sleep(0.5)
for i in houtemp:
i.filterGray()
time.sleep(0.5)\n`;
return code;
}
// export const algorithm_print_book = function() {
// var code = "print(i)\n";
// return code;
// };
export const algorithm_print_book2 = function () {
var code = `if 'list' in globals():
res = list[0]
Books[res].filterBrighter()
print('未消磁的书籍是第'+str(res+1)+'本《'+name[res%10]+'》。')
if res!=n:
print('答案错误!请检查程序!')
mode=0\n`;
return code;
}
// sub_algorithm_6
export const algorithm_book_scale = function (_, generator) {
var FIELD_NUM = this.getFieldValue("NUM");
const pos = {
5: '130*i, 120',
10: '(130*i-650) if i>5 else 130*i, 320 if i>5 else 120',
20: '(65*i-650)+30 if i>10 else 65*i+30, 320 if i>10 else 120',
50: '(26*i-650)+50 if i>25 else 26*i+50, 320 if i>25 else 120'
}
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `sprite.clearAllSprites()
ring = []
name = ['小王子','海底两万里','荷花镇的早市','孔子的故事','夏洛的网','草房子','月下看猫头鹰','会唱歌的咖啡磨','父与子','城南旧事']
Books = []
for i in range(${FIELD_NUM}):
ring.append(0)
for i in range(1, ${FIELD_NUM}+1, 1):
Books.append(sprite.Sprite('books/book'+str(i%10 if i%10!=0 else 10), ${pos[FIELD_NUM]}))
time.sleep(1)
mode=3
`
return code;
}
export const algorithm_number_zero = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "cnt=0\n";
code += `cntText = sprite.Text('计数器0', 30, 200)\n`
return code;
}
export const algorithm_number_add = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "cnt+=1\n";
code += `cntText.changeText('计数器:'+str(cnt))\n`
return code;
}
export const algorithm_print_number = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = "print('计数器大小:'+str(cnt))\n";
return code;
}
// export const algorithm_get_book_num = function() {
// var code = 'n='+this.getFieldValue('NUM')+'\n';
// return code;
// };
// export const algorithm_print_sequence = function() {
// var code = 'print("顺序法查找次数为:",cnt)';
// return code;
// };
// export const algorithm_print_divide = function() {
// var code = 'print("二分法查找次数为:",cnt)';
// return code;
// };
// sub_algorithm_7
export const algorithm_init_jttl = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `sprite.clearAllSprites()
_head = 10
_foot = 32
_footText = sprite.Text('脚的数量:', 20, 10)
_sprite = []\n`;
return code;
}
export const algorithm_rabbit_zero = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_rabbit = 0\n`;
// code += `_sprite.append(sprite.Sprite('jttl/rabbit', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n`;
code += `time.sleep(1)\n`;
return code;
}
export const algorithm_rabbit_number_in_range = function (_, generator) {
var code = `_rabbit < _head`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_chick_calculate = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_chick = _head - _rabbit\n`;
code += `for i in range(0, _chick, 1):
_sprite.append(sprite.Sprite('jttl/chick', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n
time.sleep(0.5)
_footText.changeText('脚的数量:'+str(_rabbit*4 + _chick*2))
time.sleep(1)\n`
return code;
}
export const algorithm_check_feet = function (_, generator) {
var code = `_rabbit*4 + _chick*2 == _foot`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_print_jttl_answer = function (_, generator) {
generator.definitions_.import_sprite = "import sprite";
var code = `print('鸡的数量:'+str(_chick)+'只;\\n兔的数量'+str(_rabbit)+'只。')\n`;
return code;
}
export const algorithm_rabbit_add = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_rabbit += 1\n`;
code += `sprite.clearAllSprites()
_sprite = []
_footText = sprite.Text('脚的数量:', 20, 10)
for i in range(0, _rabbit, 1):
_sprite.append(sprite.Sprite('jttl/rabbit', len(_sprite)*130+130 if len(_sprite)<5 else len(_sprite)*130+130-650, 120 if len(_sprite)<5 else 320))\n`
code += `time.sleep(0.5)\n`;
return code;
}
// sub_algorithm_8
export const algorithm_init_fzsf = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `sprite.clearAllSprites()
sprite.createBackground('/fzsf/map_ck_xxjsjs')
_S1 = sprite.Sprite('/fzsf/S1',400,225,'S1')
_S2 = sprite.Sprite('/fzsf/S2',400,225,'S2')
_S3 = sprite.Sprite('/fzsf/S3',400,225,'S3')
_S4 = sprite.Sprite('/fzsf/S4',400,225,'S4')
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
_text_1 = sprite.Text('S1',0,0,'text')
_text_2 = sprite.Text('S2',0,30,'text2')
_text_3 = sprite.Text('S3',0,60,'text3')
_text_4 = sprite.Text('S4',0,90,'text4')
_position = [[60, 270], [240, 50], [260, 380], [440, 190], [730, 60], [700, 400]]
_Llen = [0, 170, 230, 100, 150, 10, 30, 50]
_Slen = [0, 0, 0, 0, 0]
_tag = [0, [0, 1, 3], [0, 2, 3], [3, 4, 5], [3, 5]]
bear = sprite.Sprite('mixbear',60,270,'bear')
bear.enlargeTo(80)
_pos = 0
time.sleep(1)\n`;
return code;
}
export const algorithm_fz_calc = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
const calc = [0, [1, 3], [2, 4], [5, 7], [6]]
var code = ``;
code += `_S${FIELD_PATHNAME}.show()
time.sleep(1)\n`;
if (FIELD_PATHNAME != 4) {
code += `_Slen[${FIELD_PATHNAME}] = _Llen[${calc[FIELD_PATHNAME][0]}] + _Llen[${calc[FIELD_PATHNAME][1]}]
_text_${FIELD_PATHNAME}.changeText('S${FIELD_PATHNAME}'+str(_Slen[${FIELD_PATHNAME}])+'m')
time.sleep(1)
_S${FIELD_PATHNAME}.hide()
time.sleep(1)\n`;
} else {
code += `_Slen[4] = _Llen[6]
_text_4.changeText('S4'+str(_Slen[4])+'m')
time.sleep(1)
_S4.hide()
time.sleep(1)\n`;
}
return code;
}
export const algorithm_fz_compare = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
var FIELD_PATHNAME2 = this.getFieldValue("PATHNAME2");
var code = ``;
code += `_Slen[${FIELD_PATHNAME}] < _Slen[${FIELD_PATHNAME2}]`;
return [code, generator.ORDER_ATOMIC];
// `if(_Slen[${FIELD_PATHNAME}]==0 or _Slen[${FIELD_PATHNAME2}]==0):
// print('请先计算出长度再比较!程序有误!')
// exit()
// _S${FIELD_PATHNAME}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME}.hide()
// time.sleep(0.5)
// _S${FIELD_PATHNAME}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.show()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.hide()
// time.sleep(0.5)
// _S${FIELD_PATHNAME2}.show()
// time.sleep(0.5)
// if(_Slen[${FIELD_PATHNAME}] < _Slen[${FIELD_PATHNAME2}]):
// _S${FIELD_PATHNAME2}.hide()
// _S${FIELD_PATHNAME}.show()
// else :
// _S${FIELD_PATHNAME}.hide()
// _S${FIELD_PATHNAME2}.show()
// time.sleep(1)
// _S${FIELD_PATHNAME}.hide()
// _S${FIELD_PATHNAME2}.hide()\n`;
// return code;
}
export const algorithm_fz_set_min = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_PATHNAME = this.getFieldValue("PATHNAME");
var code = ``;
code += `
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
_Smin = ${FIELD_PATHNAME}
_S${FIELD_PATHNAME}.show()
time.sleep(0.5)
_S${FIELD_PATHNAME}.hide()
time.sleep(0.5)
_S${FIELD_PATHNAME}.show()
time.sleep(1)\n`;
return code;
}
export const algorithm_fz_move = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `if(_pos == _tag[_Smin][0]):
for i in range(1, len(_tag[_Smin]), 1):
bear.slideTo(_position[_tag[_Smin][i]][0], _position[_tag[_Smin][i]][1], 1)
_pos = _tag[_Smin][len(_tag[_Smin])-1]
else:
print('移动错误!程序有误!')
exit()
_S1.hide()
_S2.hide()
_S3.hide()
_S4.hide()
if(_pos == 5):
print('成功抵达信息科技教室!')\n`;
return code;
}
// sub_algorithm_9
export const algorithm_init_hxdb = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = ``;
code += `sprite.clearAllSprites()
sprite.createBackground('/hxdb/hxdbbg')
_soldier = []
_num = sprite.Text('目前士兵数量0',0,0,'num')
_last = sprite.Text('剩余0',500,0,'last')
_line = 3\n`;
return code;
}
export const algorithm_hxdb_init_soldier = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NUM = this.getFieldValue("NUM");
var code = ``;
code += `for i in range(0, ${FIELD_NUM}, 1):
_soldier.append(sprite.Sprite('/hxdb/soldier', 30 + (len(_soldier)%_line)*50 + (len(_soldier)//(4*_line))*(_line+1)*50 +(len(_soldier)%3-2), 80+(len(_soldier)//_line)*100-(len(_soldier)//(4*_line))*4*100+(len(_soldier)%2)))
_num.changeText('目前士兵数量:'+str(len(_soldier)))\n`;
return code;
}
export const algorithm_hxdb_stand_in_line = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NAME = this.getFieldValue("NUM");
var code = `for i in range(0, len(_soldier), 1):
_soldier[i].slideTo(30 + (i%${FIELD_NAME})*50 + (i//(4*${FIELD_NAME}))*(${FIELD_NAME}+1)*50 +(i%3-2), 80+(i//${FIELD_NAME})*100-(i//(4*${FIELD_NAME}))*4*100+(i%2), 0.05)
_line = ${FIELD_NAME}
_last.changeText('剩余:'+str(len(_soldier)%_line))
time.sleep(2)\n`;
return code;
}
export const algorithm_hxdb_last_line = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var FIELD_NAME = this.getFieldValue("NUM");
var code = `len(_soldier)%_line == ${FIELD_NAME}`;
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_hxdb_add = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `_num.changeText('目前士兵数量:'+str(len(_soldier)+1))
_last.changeText('剩余:')
time.sleep(0.5)
_soldier.append(sprite.Sprite('/hxdb/soldier', 30 + (len(_soldier)%_line)*50 + (len(_soldier)//(4*_line))*(_line+1)*50 +(len(_soldier)%3-2), 80+(len(_soldier)//_line)*100-(len(_soldier)//(4*_line))*4*100+(len(_soldier)%2)))
time.sleep(1)\n`;
return code;
}
export const algorithm_hxdb_result = function (_, generator) {
generator.definitions_.import_time = "import time";
generator.definitions_.import_sprite = "import sprite";
var code = `print('符合要求的士兵数量为:'+str(len(_soldier)))\n`;
return code;
}
// others
export const hanoi_init_offline = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
generator.definitions_.import_time = "import time";
generator.definitions_.import_math = "import math";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var num = this.getFieldValue('NUM');
generator.setups_['init_Hanoi'] = `
def init_Hanoi():
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
for i in range(0, 3, 1):
pen.penup()
pen.setheading(0)
pen.goto(150 * i - 200,-100)
pen.pendown()
pen.pensize(5)
pen.forward(100)
pen.goto(150 * i - 150,-100)
pen.setheading(90)
pen.forward(200)`;
generator.setups_['begin'] = `
def begin():
s = turtle.Turtle()
s.hideturtle()
s.penup()
s.speed(0)
s.goto(0,-150)
s.write('3')
time.sleep(1)
s.clear()
s.write('2')
time.sleep(1)
s.clear()
s.write('1')
time.sleep(1)
s.clear()
s.write('Start!')
time.sleep(1)
s.clear()\n`;
generator.setups_['move'] = `
def move(x, y):
try:
t = tower[x].pop(-1)
a = tower_num[x].pop(-1)
if tower_num[y]!=[]:
b = tower_num[y][-1]
if a<b:
print('非法移动,不能将大盘放置在小盘上')
exit()
t.goto(150 * y - 150,20 * len(tower[y]) - 90)
tower[y].append(t)
tower_num[y].append(a)
except IndexError:
print('非法移动,未找到可移动的圆盘')
exit()\n`;
var code = `num = ${num}
tower = [[], [], []]
tower_num = [[], [], []]
A,B,C=0,1,2
total_num=[0]
color= (${color})
init_Hanoi()
for i in range(0, num, 1):
tina = turtle.Turtle()
tina.penup()
tina.shape('square')
if num == 1:
tina.shapesize(1,7,1)
else:
tina.shapesize(1,7 - (6 / (num - 1)) * i,1)
tina.color("#000000",color)
tina.speed(3)
tina.goto(-150,20 * i - 90)
tower[0].append(tina)
tower_num[0].append(i)
count_turtle=turtle.Turtle()
count_turtle.hideturtle()
count_turtle.penup()
count_turtle.goto(0,150)
count_turtle.write('总步数0')
begin()\n`;
return code;
}
export const algorithm_get_current_location = function () {
var line1 = 'f = path[(len(path) - 1)]\n';
var code = line1;
return code;
}
export const algorithm_void_path = function (_, generator) {
var code = "len(path)==0";
return [code, generator.ORDER_ATOMIC];
}
export const algorithm_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
var code = '"' + colour + '"'
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,43 @@
import * as Blockly from 'blockly/core';
export const requests_get_old = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
var code = varName + '= ' + 'requests.get(' + str + ')\n';
return code;
}
export const requests_get = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var dropdown_type = this.getFieldValue('TYPE');
var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
var code = 'requests.' + dropdown_type + '(' + str + ')';
return [code, generator.ORDER_ATOMIC];
}
export const requests_post = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var dropdown_type = this.getFieldValue('TYPE');
var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var code = 'requests.' + dropdown_type + '(' + str + ',data=' + data + ')';
return [code, generator.ORDER_ATOMIC];
}
export const requests_attribute = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
var attr = this.getFieldValue('ATTR');
var code = varName + "." + attr;
return [code, generator.ORDER_ATOMIC];
}
export const requests_method = function (_, generator) {
generator.definitions_.import_requests = "import requests";
var method = this.getFieldValue('DIR');
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "requests." + method + "(" + str + ')\n';
return code;
}

View File

@@ -0,0 +1,100 @@
export const cv_read_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imread(" + file + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_show_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imshow(" + data + ',' + file + ")\n";
return code;
}
export const cv_write_image = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.imwrite(" + data + ',' + file + ")\n";
return code;
}
export const cv_waitkey = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var code = "cv2.waitKey(" + data + ")\n";
return code;
}
export const cv_destroy_all = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var code = "cv2.destroyAllWindows()\n";
return code;
}
export const cv_line_rect = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
var y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
var thick = generator.valueToCode(this, 'thick', generator.ORDER_ATOMIC);
var color = this.getFieldValue('FIELDNAME');
var color1 = eval('0x' + color[1] + color[2])
var color2 = eval('0x' + color[3] + color[4])
var color3 = eval('0x' + color[5] + color[6])
var direction = this.getFieldValue('DIR');
var code = "cv2." + direction + "(" + file + ',(' + x1 + ',' + y1 + '),(' + x2 + ',' + y2 + '),(' + color3 + ',' + color2 + ',' + color1 + '),' + thick + ")\n";
return code;
}
export const cv_text = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
var thick = generator.valueToCode(this, 'thick', generator.ORDER_ATOMIC);
var color = this.getFieldValue('FIELDNAME');
var color1 = eval('0x' + color[1] + color[2])
var color2 = eval('0x' + color[3] + color[4])
var color3 = eval('0x' + color[5] + color[6])
var font = this.getFieldValue('font');
var code = "cv2.putText(" + file + ',' + data + ',(' + x1 + ',' + y1 + '),cv2.FONT_HERSHEY_' + font + ',' + size + ',(' + color3 + ',' + color2 + ',' + color1 + '),' + thick + ")\n";
return code;
}
export const cv_face_classifier = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "cv2.CascadeClassifier(" + file + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_face_detect = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var face = generator.valueToCode(this, 'FACE', generator.ORDER_ATOMIC);
var scale = generator.valueToCode(this, 'SCALE', generator.ORDER_ATOMIC);
var neighbor = generator.valueToCode(this, 'NEIGHBOR', generator.ORDER_ATOMIC);
var code = face + ".detectMultiScale(" + file + ',scaleFactor=' + scale + ',minNeighbors=' + neighbor + ")";
return [code, generator.ORDER_ATOMIC];
}
export const cv_face_detect_all = function (_, generator) {
generator.definitions_['import_cv2'] = 'import cv2';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var face = generator.valueToCode(this, 'FACE', generator.ORDER_ATOMIC);
var scale = generator.valueToCode(this, 'SCALE', generator.ORDER_ATOMIC);
var neighbor = generator.valueToCode(this, 'NEIGHBOR', generator.ORDER_ATOMIC);
var x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
var y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
var x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
var y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
var code = face + ".detectMultiScale(" + file + ',scaleFactor=' + scale + ',minNeighbors=' + neighbor + ',minSize=(' + x1 + ',' + y1 + '),maxSize=(' + x2 + ',' + y2 + "))";
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,647 @@
import * as Blockly from 'blockly/core';
export const series_create = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.Series(' + varName1 + ')\n';
return code;
}
export const series_create_from_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.Series(' + varName1 + ',' + 'index=' + varName2 + ')\n';
return code;
}
export const dataframe_create = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ')\n';
return code;
}
export const dataframe_create_from_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX_COLUMN', generator.ORDER_ATOMIC) || '\'\'';
var varName3 = generator.valueToCode(this, 'INDEX_RAW', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ',' + 'columns=' + varName2 + ',index=' + varName3 + ')\n';
return code;
}
export const dataframe_create_from_one_index = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var name = this.getFieldValue('COLUMN_RAW');
var varName1 = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'INDEX', generator.ORDER_ATOMIC) || '\'\'';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + 'pandas.DataFrame(' + varName1 + ',' + name + '=' + varName2 + ')\n';
return code;
}
export const series_create_from_text = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var text = this.getFieldValue('TEXT');
var code = varName + ' = ' + 'pandas.Series([' + text + '])\n';
return code;
}
export const series_index_value = function (_, generator) {
generator.definitions_.import_pandas = "import pandas";
var varName = generator.valueToCode(this, 'SERIES', generator.ORDER_ASSIGNMENT) || '0';
var name = this.getFieldValue('INDEX_VALUE');
var code = varName + '.' + name;
return [code, generator.ORDER_ATOMIC];
}
export const series_get_num = function (_, generator) {
// Indexing into a list is the same as indexing into a string.
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var argument0 = generator.valueToCode(this, 'AT',
generator.ORDER_ADDITIVE) || '1';
var code = varName + '[' + argument0 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const pl_show = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var code = 'pylab.show()\n';
return code;
}
export const pl_axes = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var code = 'pylab.axes(aspect=1)\n';
return code;
}
export const pl_plot_easy = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'pylab.plot(' + varName + ")\n";
return code;
}
export const pl_plot = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'pylab.plot(' + varName + ",'" + dot + line + color + "')\n";
return code;
}
export const pl_legend = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
generator.definitions_.import_matplotlib_font_manager = "import matplotlib.font_manager";
var code = 'pylab.legend(' + 'prop=matplotlib.font_manager.FontProperties("' + "STSong" + '")' + ')\n';
return code;
}
export const pl_title = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var code = 'pylab.title(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const pl_label = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'LABEL', generator.ORDER_ATOMIC);
var code = 'pylab.' + direction + 'label(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const array_create = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "FROM", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "TO", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "STEP", generator.ORDER_NONE) || "1";
var code = "numpy.arange(" + from + ", " + end + ", " + step + ")";
return [code, generator.ORDER_ATOMIC];
}
export const pl_plot_bar = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.' + direction + '(' + a + ',' + b + ")\n";
return code;
}
export const pl_plot_scatter = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var s = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC) || '\'\'';
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.scatter(' + a + ',' + b + ",s=" + s + ",c='" + color + "',marker='" + dot + "',label=" + tag + ")\n";
return code;
}
export const pl_plot_xy = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.plot(' + a + ',' + b + ",'" + dot + line + color + "'" + ',label=' + tag + ")\n";
return code;
}
export const pl_bar = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var width = generator.valueToCode(this, 'WIDTH', generator.ORDER_RELATIONAL) || '0';
var color = this.getFieldValue('COLOR')
var align = this.getFieldValue('ALIGN');
var code = 'pylab.bar(' + a + ',' + b + ',align="' + align + '",color="' + color + '",width=' + width + ',label=' + tag + ")\n";
return code;
}
export const pl_pie = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var explode = generator.valueToCode(this, 'EXPLODE', generator.ORDER_ATOMIC) || '\'\'';
var shadow = this.getFieldValue('SHADOW');
var autopct = this.getFieldValue('autopct');
if (autopct != 'None') { autopct = "'" + autopct + "'" }
var code = 'pylab.pie(' + a + ',explode=' + explode + ',labels=' + b + ',autopct=' + autopct + ',shadow=' + shadow + ")\n";
return code;
}
export const pl_hist = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.hist(' + a + ',' + b + ")\n";
return code;
}
export const pl_ticks = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'pylab.' + direction + 'ticks(' + a + ',' + b + ",fontproperties = '" + "STSong" + "')\n";
return code;
}
export const numpy_trig = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var argument0 = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';
var operator = this.getFieldValue('OP');
var code = "";
code = "numpy." + operator + '(' + argument0 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pl_subplot = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var code = "pylab.subplot(" + from + ", " + end + ", " + step + ")\n";
return code
}
export const pandas_readcsv = function (_, generator) {
// For each loop.
generator.definitions_.import_pandas = "import pandas";
var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);
var mode = this.getFieldValue('MODE');
var code = 'pandas.read_csv(' + fn + ', header=' + mode + ')';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_get = function (_, generator) {
var mode = this.getFieldValue('MODE');
var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
if (mode == "column") {
var code = varName + "[" + text + "]";
}
else if (mode == 'raw') {
var code = varName + ".loc[" + text + "]";
}
return [code, generator.ORDER_ATOMIC];
}
export const pl_savefig = function (_, generator) {
generator.definitions_.import_pylab = "import pylab";
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = "pylab.savefig(" + file + ")\n";
return code;
}
export const pl_text = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var halign = this.getFieldValue('HALIGN');
var valign = this.getFieldValue('VALIGN');
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var code = "pylab.text(" + from + ", " + end + ", " + step + ", ha='" + halign + "', va='" + valign + "', fontsize=" + fontnum + ")\n";
return code
}
export const array_toarray = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0';
generator.definitions_['import_numpy'] = 'import numpy';
var code = 'numpy.array(' + str + ')';
return [code, generator.ORDER_ATOMIC];
}
export const plot_show = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var code = 'matplotlib.pyplot.show()\n';
return code;
}
export const plot_axes = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var code = 'matplotlib.pyplot.axes(aspect=1)\n';
return code;
}
export const plot_plot_easy = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'matplotlib.pyplot.plot(' + varName + ")\n";
return code;
}
export const plot_plot = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var varName = generator.valueToCode(this, 'SER', generator.ORDER_ASSIGNMENT) || '0';
var code = 'matplotlib.pyplot.plot(' + varName + ",'" + dot + line + color + "')\n";
return code;
}
export const plot_legend = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
generator.definitions_.import_matplotlib_font_manager = "import matplotlib.font_manager";
var code = 'matplotlib.pyplot.legend(' + 'prop=matplotlib.font_manager.FontProperties("' + "STSong" + '")' + ')\n';
return code;
}
export const plot_title = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var code = 'matplotlib.pyplot.title(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const plot_label = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'LABEL', generator.ORDER_ATOMIC);
var code = 'matplotlib.pyplot.' + direction + 'label(' + a + ', fontproperties = "' + "STSong" + '")\n';
return code;
}
export const plot_plot_bar = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'matplotlib.pyplot.' + direction + '(' + a + ',' + b + ")\n";
return code;
}
export const plot_plot_scatter = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var s = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC) || '\'\'';
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'matplotlib.pyplot.scatter(' + a + ',' + b + ",s=" + s + ",c='" + color + "',marker='" + dot + "',label=" + tag + ")\n";
return code;
}
export const plot_plot_xy = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var line = this.getFieldValue('LINE');
var color = this.getFieldValue('COLOR');
var dot = this.getFieldValue('DOT');
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var code = 'matplotlib.pyplot.plot(' + a + ',' + b + ",'" + dot + line + color + "'" + ',label=' + tag + ")\n";
return code;
}
export const plot_bar = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var tag = generator.valueToCode(this, 'TAG', generator.ORDER_ATOMIC) || '\'\'';
var width = generator.valueToCode(this, 'WIDTH', generator.ORDER_RELATIONAL) || '0';
var color = this.getFieldValue('COLOR')
var align = this.getFieldValue('ALIGN');
var code = 'matplotlib.pyplot.bar(' + a + ',' + b + ',align="' + align + '",color="' + color + '",width=' + width + ',label=' + tag + ")\n";
return code;
}
export const plot_pie = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var explode = generator.valueToCode(this, 'EXPLODE', generator.ORDER_ATOMIC) || '\'\'';
var shadow = this.getFieldValue('SHADOW');
var autopct = this.getFieldValue('autopct');
if (autopct != 'None') { autopct = "'" + autopct + "'" }
var code = 'matplotlib.pyplot.pie(' + a + ',explode=' + explode + ',labels=' + b + ',autopct=' + autopct + ',shadow=' + shadow + ")\n";
return code;
}
export const plot_hist = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'matplotlib.pyplot.hist(' + a + ',' + b + ")\n";
return code;
}
export const plot_ticks = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var direction = this.getFieldValue('DIR');
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
var code = 'matplotlib.pyplot.' + direction + 'ticks(' + a + ',' + b + ",fontproperties = '" + "STSong" + "')\n";
return code;
}
export const plot_subplot = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var code = "matplotlib.pyplot.subplot(" + from + ", " + end + ", " + step + ")\n";
return code
}
export const plot_savefig = function (_, generator) {
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var code = "matplotlib.pyplot.savefig('1.png')\n";
return code;
}
export const plot_text = function (_, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_matplotlib_pyplot = "import matplotlib.pyplot";
var from = generator.valueToCode(this, "VET", generator.ORDER_NONE) || "0";
var end = generator.valueToCode(this, "HOR", generator.ORDER_NONE) || "0";
var step = generator.valueToCode(this, "NUM", generator.ORDER_NONE) || "0";
var halign = this.getFieldValue('HALIGN');
var valign = this.getFieldValue('VALIGN');
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var code = "matplotlib.pyplot.text(" + from + ", " + end + ", " + step + ", ha='" + halign + "', va='" + valign + "', fontsize=" + fontnum + ")\n";
return code
}
export const numpy_shape = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.shape(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_reshape = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var dimensions = generator.valueToCode(block, 'DIMENSIONS', generator.ORDER_ATOMIC) || '(1, -1)';
var code = 'numpy.reshape(' + array + ', ' + dimensions + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_astype = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var dtype = block.getFieldValue('TYPE');
var code = array + '.astype(' + dtype + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pylab_imshow = function (block, generator) {
generator.definitions_.import_pylab = "import pylab";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var colormap = block.getFieldValue('COLORMAP') || 'gray';
var code = 'pylab.imshow(' + array + ', cmap="' + colormap + '")\n';
return code;
}
export const numpy_mean_digit = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var X = generator.valueToCode(block, 'X', generator.ORDER_ATOMIC) || '[]';
var y = generator.valueToCode(block, 'Y', generator.ORDER_ATOMIC) || '[]';
var digit = generator.valueToCode(block, 'DIGIT', generator.ORDER_ATOMIC) || '0';
var code = 'numpy.mean(' + X + '[' + y + ' == ' + digit + '], axis=0)';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_argmin_template_match = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_cv2 = "import cv2";
var image = generator.valueToCode(block, 'IMAGE', generator.ORDER_ATOMIC) || '[]';
var templates = generator.valueToCode(block, 'TEMPLATES', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.argmin([numpy.sum(cv2.absdiff(' + image + ', template)) for template in ' + templates + '])';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_mean = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
if (axis === 'NONE') {
var code = 'numpy.mean(' + array + ')';
} else {
var code = 'numpy.mean(' + array + ', axis=' + axis + ')';
}
return [code, generator.ORDER_ATOMIC];
}
export const numpy_std = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
if (axis === 'NONE') {
var code = 'numpy.std(' + array + ')';
} else {
var code = 'numpy.std(' + array + ', axis=' + axis + ')';
}
return [code, generator.ORDER_ATOMIC];
}
export const pandas_dropna = function (block, generator) {
generator.definitions_.import_pandas = "import pandas";
var df = generator.valueToCode(block, 'DF', generator.ORDER_ATOMIC) || 'df';
var code = df + '.dropna()';
return [code, generator.ORDER_MEMBER];
}
export const pandas_drop_columns = function (block, generator) {
generator.definitions_.import_pandas = "import pandas";
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var columns = generator.valueToCode(block, 'COLUMNS', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS') || '0';
var code = dataframe + '.drop(columns=' + columns + ', axis=' + axis + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_ones = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var num = generator.valueToCode(block, 'NUM', generator.ORDER_ATOMIC) || '1';
var code = 'numpy.ones(' + num + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_c_ = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array1 = generator.valueToCode(block, 'ARRAY1', generator.ORDER_ATOMIC) || '[]';
var array2 = generator.valueToCode(block, 'ARRAY2', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.c_[' + array1 + ', ' + array2 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_linalg_det = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_linalg = "import numpy.linalg";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.linalg.det(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const matrix_transpose = function (block, generator) {
var matrix = generator.valueToCode(block, 'MATRIX', generator.ORDER_ATOMIC) || '[]';
var code = matrix + '.T';
return [code, generator.ORDER_ATOMIC];
}
export const matrix_multiplication = function (block, generator) {
var matrix1 = generator.valueToCode(block, 'MATRIX1', generator.ORDER_ATOMIC) || '[]';
var matrix2 = generator.valueToCode(block, 'MATRIX2', generator.ORDER_ATOMIC) || '[]';
var code = matrix1 + ' @ ' + matrix2;
return [code, generator.ORDER_ATOMIC];
}
export const numpy_linalg_inv = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
generator.definitions_.import_linalg = "import numpy.linalg";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.linalg.inv(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_median = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var code = dataframe + '.median()';
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_fillna = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var value = generator.valueToCode(block, 'VALUE', generator.ORDER_ATOMIC) || '0';
var inplace = block.getFieldValue('INPLACE') || 'False';
var code = dataframe + '.fillna(value=' + value + ', inplace=' + inplace + ')\n';
return code;
}
export const dataframe_info = function (block, generator) {
var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df';
var code = dataframe + '.info()';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_min = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
var code = (axis === 'None') ? 'numpy.min(' + array + ')' : 'numpy.min(' + array + ', axis=' + axis + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_max = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var axis = block.getFieldValue('AXIS');
var code = (axis === 'None') ? 'numpy.max(' + array + ')' : 'numpy.max(' + array + ', axis=' + axis + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_size = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = array + '.size';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_dot = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array1 = generator.valueToCode(block, 'ARRAY1', generator.ORDER_ATOMIC) || '[]';
var array2 = generator.valueToCode(block, 'ARRAY2', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.dot(' + array1 + ', ' + array2 + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_square = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.square(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_sum = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'numpy.sum(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}
export const numpy_random_random = function (block, generator) {
generator.definitions_.import_numpy = "import numpy";
var size = generator.valueToCode(block, 'SIZE', generator.ORDER_ATOMIC) || '1';
var code = 'numpy.random.random(' + size + ')';
return [code, generator.ORDER_ATOMIC];
}
export const py_sum = function (block, generator) {
var array = generator.valueToCode(block, 'ARRAY', generator.ORDER_ATOMIC) || '[]';
var code = 'sum(' + array + ')';
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,176 @@
import * as Blockly from 'blockly/core';
export const ds_create_linkedlist = function (_, generator) {
// Create a list with any number of elements of any type.
//var dropdown_type = this.getFieldValue('TYPE');
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = 'class ' + typeName + ":\n";
code += ' def __init__(self):\n';
var attr = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
var keyName = this.getFieldValue('KEY' + n);
attr[n] = ' self.' + keyName + " = " + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);
}
code += attr.join('\n') + '\n';
code += ' self.next = None\n';
code += varName + ' = ' + typeName + '()\n'
return code;
}
export const ds_create_node = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = varName + ' = ' + typeName + '()\n';
return code;
}
export const ds_get_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = varName + '.' + typeName;
return [code, generator.ORDER_ATOMIC];
}
export const ds_set_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.' + typeName + ' = ' + argument + '\n';
return code;
}
export const ds_add_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
return code;
}
export const ds_add_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now.' + typeName + ' != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + "and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
return code;
}
export const ds_del_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定名称的节点")\n';
return code;
}
export const ds_del_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定的节点")\n';
return code;
}
export const ds_reverse_linkedlist = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'ptr = ' + varName + '\n';
code += 'before = None\n';
code += 'while ptr != None:\n'
code += ' last = before\n';
code += ' before = ptr\n';
code += ' ptr = ptr.next\n';
code += ' before.next = last\n'
code += varName2 + ' = before\n';
return code;
}

View File

@@ -0,0 +1,86 @@
export const factory_from_import = function (_, generator) {
var path = this.getFieldValue('path');
var module = this.getFieldValue('module');
generator.definitions_['import_' + path + '_' + module] = 'from ' + path + ' import ' + module;
return '';
}
export const factory_import = function (_, generator) {
var module = this.getFieldValue('module');
generator.definitions_['import_' + module] = 'import ' + module;
return '';
}
export const factory_function_noreturn = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return NAME + '(' + code.join(', ') + ')\n';
}
export const factory_function_return = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return [NAME + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
}
export const factory_declare = function () {
var TYPE = this.getFieldValue('TYPE');
var NAME = this.getFieldValue('NAME');
return NAME + ' = ' + TYPE + '()\n';
}
export const factory_callMethod_noreturn = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var METHOD = this.getFieldValue('METHOD');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return NAME + '.' + METHOD + '(' + code.join(', ') + ')\n';
}
export const factory_callMethod_return = function (_, generator) {
var NAME = this.getFieldValue('NAME');
var METHOD = this.getFieldValue('METHOD');
var code = new Array(this.itemCount_);
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || '';
}
return [NAME + '.' + METHOD + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
}
export const factory_block = function () {
var VALUE = this.getFieldValue('VALUE');
//if(!(VALUE.charAt(VALUE.length-1)==";")){
//VALUE=VALUE+';';
//}
return VALUE + '\n';
}
export const factory_block_return = function (_, generator) {
var VALUE = this.getFieldValue('VALUE');
return [VALUE, generator.ORDER_ATOMIC];
}
export const factory_block_with_textarea = function () {
var VALUE = this.getFieldValue('VALUE');
//if(!(VALUE.charAt(VALUE.length-1)==";")){
//VALUE=VALUE+';';
//}
return VALUE + '\n';
}
export const factory_block_return_with_textarea = function (_, generator) {
var VALUE = this.getFieldValue('VALUE');
return [VALUE, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,53 @@
import { JSFuncs } from 'mixly';
export const hardware_arduino_start = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
// var code= v + '.start()\n';
var code = v + ' = s4alib.s4a_start("' + JSFuncs.getCom() + '")\n';
return code;
}
export const inout_highlow = function (_, generator) {
// Boolean values HIGH and LOW.
var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_digital_write = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
var code = "";
code += '' + v + '.digital_write(' + dropdown_pin + ',' + dropdown_stat + ')\n'
return code;
}
export const hardware_arduino_digital_read = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = "";
code = '' + v + '.digital_read(' + dropdown_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_analog_read = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = "";
code = '' + v + '.analog_read(' + dropdown_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const hardware_arduino_analog_write = function (_, generator) {
generator.definitions_['import_s4alib'] = 'import s4alib';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
var code = "";
code += '' + v + '.analog_write(' + dropdown_pin + ',' + value_num + ')\n'
return code;
}

View File

@@ -0,0 +1,55 @@
export const inout_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
return ['input(' + str + ')', generator.ORDER_ATOMIC];
}
export const inout_print = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ")\n";
return code;
}
export const inout_print_inline = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ',end ="")\n';
return code;
}
export const inout_print_end = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var end = generator.valueToCode(this, 'END', generator.ORDER_ATOMIC) || '""';
var code = "print(" + str + ',end =' + end + ')\n';
return code;
}
export const inout_type_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var type = this.getFieldValue('DIR');
if (type == 'str') { var code = 'input(' + str + ')' }
else if (type == 'int') { var code = 'int(input(' + str + '))' }
else if (type == 'float') { var code = 'float(input(' + str + '))' }
//var code=varname+"." + type + "(" + ')';
return [code, generator.ORDER_ATOMIC];
}
export const pyinout_type_input = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var type = this.getFieldValue('DIR');
generator.definitions_['import_pyinput'] = 'import pyinput';
if (type == 'str') { var code = 'pyinput.input(' + str + ')' }
else if (type == 'int') { var code = 'int(pyinput.input(' + str + '))' }
else if (type == 'float') { var code = 'float(pyinput.input(' + str + '))' }
//var code=varname+"." + type + "(" + ')';
return [code, generator.ORDER_ATOMIC];
}
export const inout_print_many = function (_, generator) {
var code = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || default_value;
}
var code = 'print(' + code.join(', ') + ')\n';
return code;
}

View File

@@ -0,0 +1,120 @@
export const iot_mixio_connect = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
var project = generator.valueToCode(this, 'PROJECT', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
//var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || '0';
var a = "f'python-mqtt-" + username.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO(' + server + ', 1883 ,' + username + ', ' + password + ', ' + project + ', ' + a + ')\n';
return code;
}
export const IOT_MIXIO_PUBLISH = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.publish(' + topic + ', ' + msg + ')\n';
return code;
}
export const IOT_MIXIO_SUBSCRIBE = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.subscribe_and_set_callback(' + topic + ',' + method + ')\n';
return code;
}
export const IOT_MIXIO_UNSUBSCRIBE = function (_, generator) {
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.unsubscribe(' + topic + ')\n';
return code;
}
export const iot_mixio_disconnect = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.disconnect()\n';
return code;
}
export const iot_mixio_connect_only = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.connect()\n';
return code;
}
export const iot_mixio_check = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.check_msg()\n';
return code;
}
export const iot_mixio_format_topic = function (_, generator) {
var code = 'mqtt_client.decode("utf-8").split("/")[-1]';
return [code, generator.ORDER_ATOMIC];
}
export const iot_mixio_format_msg = function (_, generator) {
var code = 'mqtt_client.decode("utf-8")';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_FORMATTING = function (_, generator) {
generator.definitions_['import_mixpy'] = "import mixpy";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = 'mixpy.format_content(' + v + ', mqtt_client.client_id)';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_FORMAT_STRING = function (_, generator) {
generator.definitions_['import_mixpy'] = "import mixpy";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = 'mixpy.format_str(' + v + ')';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var share_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
var a = "f'python-mqtt-" + share_code.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO.from_mixly_key(' + server + ', 1883 ,' + share_code + ', ' + a + ')\n';
return code;
}
export const iot_mixly_key = function (_, generator) {
var code = this.getFieldValue('VISITOR_ID');
return [code, generator.ORDER_ATOMIC];
}
export const iot_mixly_key_py = function (_, generator) {
var code = this.getFieldValue('VISITOR_ID');
return ["'" + code + "'", generator.ORDER_ATOMIC];
}
export const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
var mixly_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
var timestamp = Math.round(new Date()).toString();
var a = "f'python-mqtt-" + mixly_code.replace("'", "").replace("'", "") + timestamp.replace("'", "").replace("'", "") + "'";
var code = 'mqtt_client = mixiot.MixIO.from_share_key(' + server + ', 1883 ,' + mixly_code + ', ' + a + ')\n';
return code;
}
export const IOT_EMQX_PING = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var code = 'mqtt_client.pingSync()';
return [code, generator.ORDER_ATOMIC];
}
export const IOT_MIXIO_NTP = function (_, generator) {
generator.definitions_['import_mixiot'] = "import mixiot";
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
var code = 'mixiot.ntp(' + addr + ')';
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,9 @@
export const pins_digital = function (_, generator) {
var code = this.getFieldValue('PIN');
return [code, generator.ORDER_ATOMIC];
}
export const pins_digital_write = pins_digital;
export const pins_digital_read = pins_digital;
export const pins_analog_write = pins_digital;
export const pins_analog_read = pins_digital;

View File

@@ -0,0 +1,37 @@
import * as Blockly from 'blockly/core';
import { JSFuncs } from 'mixly';
export const serial_open = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var time = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
var varName = generator.variableDB_.getName(this.getFieldValue('SER'),
Blockly.Variables.NAME_TYPE);
var bps = this.getFieldValue('BPS');
// var code= v + '.start()\n';
var code = varName + ' = serial.Serial("' + JSFuncs.getCom() + '", ' + bps + ', timeout=' + time + ')\n';
return code;
}
export const serial_write = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var str = (generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""');
// var code= v + '.start()\n';
var code = ser + '.write(' + str + ')\n';
return code;
}
export const serial_read_b = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var len = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
var code = ser + '.read(' + len + ')';
return [code, generator.ORDER_ATOMIC];
}
export const serial_close = function (_, generator) {
generator.definitions_['import_serial'] = 'import serial';
var ser = generator.valueToCode(this, 'SER', generator.ORDER_ADDITIVE) || 'ser';
var code = ser + '.close()\n';
return code;
}

View File

@@ -0,0 +1,238 @@
export const sklearn_make_classification = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '20';
var value_n_informative = generator.valueToCode(this, 'n_informative', generator.ORDER_ATOMIC) || '2';
var value_n_redundant = generator.valueToCode(this, 'n_redundant', generator.ORDER_ATOMIC) || '2';
var value_n_repeated = generator.valueToCode(this, 'n_repeated', generator.ORDER_ATOMIC) || '0';
var value_n_classes = generator.valueToCode(this, 'n_classes', generator.ORDER_ATOMIC) || '2';
var value_n_clusters_per_class = generator.valueToCode(this, 'n_clusters_per_class', generator.ORDER_ATOMIC) || '2';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_classification'] = 'from sklearn.datasets import make_classification';
var code = 'make_classification(n_samples=' + value_n_samples + ',n_features=' + value_n_features + ',n_informative=' + value_n_informative + ',n_redundant=' + value_n_redundant + ',n_repeated=' + value_n_repeated + ',n_classes=' + value_n_classes + ',n_clusters_per_class=' + value_n_clusters_per_class + ',random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 生成回归样本
export const sklearn_make_regression = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '100';
var value_n_informative = generator.valueToCode(this, 'n_informative', generator.ORDER_ATOMIC) || '10';
var value_n_targets = generator.valueToCode(this, 'n_targets', generator.ORDER_ATOMIC) || '1';
var value_bias = generator.valueToCode(this, 'bias', generator.ORDER_ATOMIC) || '0.0';
var value_noise = generator.valueToCode(this, 'noise', generator.ORDER_ATOMIC) || '0.0';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_regression'] = 'from sklearn.datasets import make_regression';
var code = 'make_regression(n_samples=' + value_n_samples + ',n_features=' + value_n_features + ',n_informative=' + value_n_informative + ',n_targets=' + value_n_targets + ',bias=' + value_bias + ',noise=' + value_noise + ',random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 生成聚类样本
export const sklearn_make_blobs = function (_, generator) {
var value_n_samples = generator.valueToCode(this, 'n_samples', generator.ORDER_ATOMIC) || '100';
var value_n_features = generator.valueToCode(this, 'n_features', generator.ORDER_ATOMIC) || '2';
var value_centers = generator.valueToCode(this, 'centers', generator.ORDER_ATOMIC) || 'None';
var value_cluster_std = generator.valueToCode(this, 'cluster_std', generator.ORDER_ATOMIC) || '1.0';
var value_center_box = generator.valueToCode(this, 'center_box', generator.ORDER_ATOMIC) || '(-10.0,10.0)';
var value_shuffle = generator.valueToCode(this, 'shuffle', generator.ORDER_ATOMIC) || 'True';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_make_blobs'] = 'from sklearn.datasets import make_blobs';
var code = 'make_blobs(n_samples=' + value_n_samples + ',n_features=' + value_n_features + ',centers=' + value_centers + ',cluster_std=' + value_cluster_std + ',center_box=' + value_center_box + ',shuffle=' + value_shuffle + ',random_state=' + value_random_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 加载数据集
export const sklearn_load = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var text_name = this.getFieldValue('name');
generator.definitions_['import_sklearn_datasets'] = 'from sklearn import datasets';
var code = text_name + ' = datasets.' + dropdown_type + '()\n';
return code;
}
// sklearn 获取特征值/标签值/标签/特征
export const sklearn_data_target = function (_, generator) {
var value_name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC) || 'iris';
var dropdown_type = this.getFieldValue('type');
var code = value_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn 数据集分割
export const sklearn_train_test_split = function (_, generator) {
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'iris_X';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'iris_y';
var value_test_size = generator.valueToCode(this, 'test_size', generator.ORDER_ATOMIC) || '0.3';
var value_rondom_state = generator.valueToCode(this, 'rondom_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_train_test_split'] = 'from sklearn.model_selection import train_test_split';
if (value_train_target == 'None')
var code = 'train_test_split(' + value_train_data + ',test_size = ' + value_test_size + ',random_state = ' + value_rondom_state + ')';
else
var code = 'train_test_split(' + value_train_data + ',' + value_train_target + ',test_size = ' + value_test_size + ',random_state = ' + value_rondom_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 数据集分割-无标签值
export const sklearn_train_test_split_no_target = function (_, generator) {
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'iris_X';
var value_test_size = generator.valueToCode(this, 'test_size', generator.ORDER_ATOMIC) || '0.3';
var value_rondom_state = generator.valueToCode(this, 'rondom_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_train_test_split'] = 'from sklearn.model_selection import train_test_split';
var code = 'train_test_split(' + value_train_data + ',test_size = ' + value_test_size + ',random_state = ' + value_rondom_state + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 初始化线性回归
export const sklearn_LinearRegression = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_fit_intercept = generator.valueToCode(this, 'fit_intercept', generator.ORDER_ATOMIC) || 'True';
var value_normalize = generator.valueToCode(this, 'normalize', generator.ORDER_ATOMIC) || 'False';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_linear_model'] = 'from sklearn.linear_model import LinearRegression';
var code = value_model_name + ' = LinearRegression(fit_intercept = ' + value_fit_intercept + ',normalize = ' + value_normalize + ',n_jobs = ' + value_n_jobs + ')\n';
return code;
}
// sklearn 初始化岭回归
export const sklearn_Ridge = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_alpha = generator.valueToCode(this, 'alpha', generator.ORDER_ATOMIC) || '1.0';
var value_fit_intercept = generator.valueToCode(this, 'fit_intercept', generator.ORDER_ATOMIC) || 'True';
var value_normalize = generator.valueToCode(this, 'normalize', generator.ORDER_ATOMIC) || 'False';
var value_max_iter = generator.valueToCode(this, 'max_iter', generator.ORDER_ATOMIC) || '300';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_linear_model'] = 'from sklearn.linear_model import Ridge';
var code = value_model_name + ' = Ridge(alpha = ' + value_alpha + ',fit_intercept = ' + value_fit_intercept + ',normalize = ' + value_normalize + ',max_iter = ' + value_max_iter + ',random_state = ' + value_random_state + ')\n';
return code;
}
// sklearn 初始化决策树 分类/回归算法
export const sklearn_DecisionTreeClassifier_Regressor = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var value_max_depth = generator.valueToCode(this, 'max_depth', generator.ORDER_ATOMIC) || 'None';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.tree import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(max_depth = ' + value_max_depth + ',random_state = ' + value_random_state + ')\n';
return code;
}
export const sklearn_RandomForestClassifier_Regressor = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'Model';
var value_n_estimators = generator.valueToCode(this, 'n_estimators', generator.ORDER_ATOMIC) || '100';
var value_max_depth = generator.valueToCode(this, 'max_depth', generator.ORDER_ATOMIC) || 'None';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.ensemble import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(n_estimators = ' + value_n_estimators + ',max_depth = ' + value_max_depth + ',n_jobs = ' + value_n_jobs + ',random_state = ' + value_random_state + ')\n';
return code;
}
// sklearn 初始化K近邻 分类/回归算法
export const sklearn_KNeighborsClassifier_Regressor = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_K = generator.valueToCode(this, 'K', generator.ORDER_ATOMIC) || '5';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_' + dropdown_type] = 'from sklearn.neighbors import ' + dropdown_type;
var code = value_model_name + ' = ' + dropdown_type + '(n_neighbors = ' + value_K + ',n_jobs = ' + value_n_jobs + ')\n';
return code;
}
// sklearn 初始化高斯贝叶斯分类算法
export const sklearn_GaussianNB = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
generator.definitions_['import_sklearn_GaussianNB'] = 'from sklearn.naive_bayes import GaussianNB';
var code = value_model_name + ' = GaussianNB()\n';
return code;
}
// sklearn 初始K-均值聚类
export const sklearn_KMeans = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_n_clusters = generator.valueToCode(this, 'n_clusters', generator.ORDER_ATOMIC) || '8';
var value_max_iter = generator.valueToCode(this, 'max_iter', generator.ORDER_ATOMIC) || '300';
var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None';
var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None';
generator.definitions_['import_sklearn_KMeans'] = 'from sklearn.cluster import KMeans';
var code = value_model_name + ' = KMeans(n_clusters = ' + value_n_clusters + ',max_iter = ' + value_max_iter + ',random_state = ' + value_random_state + ',n_jobs = ' + value_n_jobs + ')\n';
return code;
}
// sklearn 训练模型
export const sklearn_fit = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'y_train';
if (value_train_target == 'None')
var code = value_model_name + '.fit(' + value_train_data + ')\n';
else
var code = value_model_name + '.fit(' + value_train_data + ',' + value_train_target + ')\n';
return code;
}
// sklearn 训练模型-无标签值
export const sklearn_fit_no_target = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var code = value_model_name + '.fit(' + value_train_data + ')\n';
return code;
}
// sklearn 模型预测
export const sklearn_predict = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_test';
var code = value_model_name + '.predict(' + value_train_data + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 计算模型得分
export const sklearn_score = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var value_train_target = generator.valueToCode(this, 'train_target', generator.ORDER_ATOMIC) || 'y_train';
if (value_train_target == 'None')
var code = value_model_name + '.score(' + value_train_data + ')';
else
var code = value_model_name + '.score(' + value_train_data + ',' + value_train_target + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 计算模型得分-无标签值
export const sklearn_score_no_target = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var value_train_data = generator.valueToCode(this, 'train_data', generator.ORDER_ATOMIC) || 'X_train';
var code = value_model_name + '.score(' + value_train_data + ')';
return [code, generator.ORDER_ATOMIC];
}
// sklearn 线性回归 模型获取 斜率/截距
export const sklearn_coef_intercept = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var code = value_model_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn K-均值聚类 模型获取 簇中心坐标/聚类后的标签/所有点到对应簇中心的距离平方和
export const sklearn_cluster_centers_labels_inertia = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var code = value_model_name + '.' + dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// sklearn 保存/加载模型
export const sklearn_save_load_model = function (_, generator) {
var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model';
var dropdown_type = this.getFieldValue('type');
var value_address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC) || 'D:/mixly/test.pkl';
generator.definitions_['import_sklearn_joblib'] = 'import joblib';
var code = '';
if (dropdown_type == 'dump')
code = 'joblib.dump(' + value_model_name + ',' + value_address + ')\n';
else
code = value_model_name + ' = joblib.load(' + value_address + ')\n';
return code;
}

View File

@@ -0,0 +1,22 @@
export const controls_millis = function (_, generator) {
generator.definitions_.import_time = "import time";
var code = 'time.time()';
return [code, generator.ORDER_ATOMIC];
}
export const controls_end_program = function () {
return 'exit()\n';
}
export const time_localtime = function (_, generator) {
generator.definitions_.import_time = "import time";
var op = this.getFieldValue('op');
var code = "time.localtime()[" + op + "]";
switch (op) {
case "all":
var code1 = "time.localtime()";
return [code1, generator.ORDER_ASSIGNMENT];
default:
return [code, generator.ORDER_ASSIGNMENT];
}
}

View File

@@ -0,0 +1,385 @@
import * as Blockly from 'blockly/core';
export const turtle_create = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
//generator.definitions_['var_declare'+varName] = varName+'= '+ 'turtle.Turtle()\n';
var code = varName + ' = ' + 'turtle.Turtle()\n';
return code;
// return '';
}
export const turtle_done = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.done()\n';
return code;
}
export const turtle_exitonclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var code = 'turtle.exitonclick()\n';
return code;
}
export const turtle_move = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_rotate = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + direction + "(" + num + ')\n';
return code;
}
export const turtle_setheading = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.setheading(' + argument + ')\n';
return code;
}
export const turtle_screen_delay = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.screen.delay(' + argument + ')\n';
return code;
}
export const turtle_goto = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xnum = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var ynum = generator.valueToCode(this, 'val', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.goto(' + xnum + ',' + ynum + ')\n';
return code;
}
export const turtle_pos_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var get = this.getFieldValue('DIR');
var code = varName + '.' + get + '()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_clear = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var clear = this.getFieldValue('DIR');
var code = varName + "." + clear + "(" + ')\n';
return code;
}
export const turtle_penup = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "(" + ')\n';
return code;
}
export const turtle_fill = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var penup = this.getFieldValue('DIR');
var code = varName + "." + penup + "_fill(" + ')\n';
return code;
}
export const turtle_size_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = this.getFieldValue('TUR');
var size = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + size + "(" + num + ')\n';
return code;
}
export const turtle_size = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.pensize(' + argument + ')\n';
return code;
}
export const turtle_speed = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.speed(' + argument + ')\n';
return code;
}
export const turtle_circle = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var circle = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + circle + "(" + num + ')\n';
return code;
}
export const turtle_setxy = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var xy = this.getFieldValue('DIR');
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".set" + xy + "(" + num + ')\n';
return code;
}
export const turtle_circle_advanced = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + ".circle (" + num + ',' + argument + ')\n';
return code;
}
export const turtle_visible = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var visible = this.getFieldValue('DIR');
var code = varName + "." + visible + "(" + ')\n';
return code;
}
export const turtle_bgcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = this.getFieldValue('FIELDNAME');
var code = "turtle." + 'bgcolor' + '("' + color + '")\n';
return code;
}
export const turtle_pencolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'pencolor' + '("' + color + '")\n';
return code;
}
export const turtle_fillcolor = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = this.getFieldValue('FIELDNAME');
var code = varName + "." + 'fillcolor' + '("' + color + '")\n';
return code;
}
export const turtle_clone = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.clone()';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_bgcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_bgcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "turtle." + 'bgcolor' + '(' + color + ')\n';
return code;
}
export const turtle_pencolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'pencolor' + '(' + color + ')\n';
return code;
}
export const turtle_fillcolor_hex_new = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'fillcolor' + '(' + color + ')\n';
return code;
}
export const turtle_color_hex = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
var color2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
var code = varName + "." + 'color' + '(' + color1 + ',' + color2 + ')\n';
return code;
}
export const turtle_color = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var color1 = this.getFieldValue('FIELDNAME');
var color2 = this.getFieldValue('FIELDNAME2');
var code = varName + "." + 'color' + '("' + color1 + '","' + color2 + '")\n';
return code;
}
export const turtle_shape = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
var code = varName + ".shape('" + direction + "')\n";
return code;
}
export const turtle_shapesize = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var argument1 = generator.valueToCode(this, 'WID', generator.ORDER_ASSIGNMENT) || '0';
var argument2 = generator.valueToCode(this, 'LEN', generator.ORDER_ASSIGNMENT) || '0';
var argument3 = generator.valueToCode(this, 'OUTLINE', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + ".shapesize(" + argument1 + ',' + argument2 + ',' + argument3 + ')\n';
return code;
}
export const turtle_textinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var code = "turtle.textinput" + '(' + title + ',' + prompt + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_numinput = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var title = generator.valueToCode(this, 'TITLE', generator.ORDER_ATOMIC);
var prompt = generator.valueToCode(this, 'PROMPT', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'DEFAULT', generator.ORDER_ATOMIC);
var min = generator.valueToCode(this, 'MIN', generator.ORDER_ATOMIC);
var max = generator.valueToCode(this, 'MAX', generator.ORDER_ATOMIC);
var code = "turtle.numinput" + '(' + title + ',' + prompt + "," + data + ',minval = ' + min + ',maxval = ' + max + ')';
return [code, generator.ORDER_ATOMIC];
}
export const turtle_write = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
//var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + "." + 'write' + '(' + write + ')\n';
return code;
}
export const turtle_write_format = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_write_format_skulpt = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var move = this.getFieldValue('MOVE');
var align = this.getFieldValue('ALIGN');
var fontname = generator.valueToCode(this, 'FONTNAME', generator.ORDER_ATOMIC);
var fontnum = generator.valueToCode(this, 'FONTNUM', generator.ORDER_ASSIGNMENT) || '0';
var fonttype = this.getFieldValue('FONTTYPE');
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var write = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = varName + "." + 'write' + '(' + write + ',' + move + ',align="' + align + '",font=(' + fontname + ',' + fontnum + ',"' + fonttype + '"))\n';
return code;
}
export const turtle_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
var code = '"' + colour + '"'
return [code, generator.ORDER_ATOMIC];
}
export const turtle_getscreen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var turName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var code = varName + ' = ' + turName + '.getscreen()\n';
return code;
}
export const turtle_onkey = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onkey(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_onclick = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".onclick(" + callback + ")\n";
return code;
}
export const turtle_ontimer = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
var code = varName + ".ontimer(" + callback + ", " + v + ")\n";
return code;
}
export const turtle_listen = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.listen()\n';
return code;
}
export const turtle_screen_savefig = function (_, generator) {
generator.definitions_.import_turtle = "import turtle";
var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0';
var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
var code = varName + ".getcanvas().postscript(file=" + file + ")\n";
return code;
}