初始化提交
This commit is contained in:
243
boards/default_src/python/converters/lists.js
Normal file
243
boards/default_src/python/converters/lists.js
Normal file
@@ -0,0 +1,243 @@
|
||||
'use strict';
|
||||
|
||||
pbc.assignD.get('List')['check_assign'] = function (py2block, node, targets, value) {
|
||||
if (value._astname === "List")
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('List')['create_block'] = function (py2block, node, targets, value) {
|
||||
return block("lists_create_with", node.lineno, {
|
||||
'VAR': py2block.Name_str(targets[0])
|
||||
},
|
||||
py2block.convertElements("ADD", value.elts), {
|
||||
"inline": elts.length < 4 ? "false" : "true",
|
||||
}, {
|
||||
"@items": value.elts.length
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//mylist[0]在python_to_blockly.js中实现
|
||||
//mylist[0:2]在python_to_blockly.js中实现
|
||||
|
||||
|
||||
function listTrig(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("list_trig", func.lineno, {
|
||||
'OP':mode
|
||||
}, {
|
||||
"data": argblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
};
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.globalFunctionD['sum'] = listTrig('SUM');
|
||||
pbc.globalFunctionD['math_mean'] = listTrig('AVERAGE');
|
||||
pbc.globalFunctionD['math_median'] = listTrig('MEDIAN');
|
||||
pbc.globalFunctionD['math_modes'] = listTrig('MODE');
|
||||
pbc.globalFunctionD['math_standard_deviation'] = listTrig('STD_DEV');
|
||||
|
||||
|
||||
//mylist[0] = 0在python_to_blockly.js中实现
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('insert')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var atblock = py2block.convert(args[0]);
|
||||
var valblock = py2block.convert(args[1]);
|
||||
return [block("lists_insert_value", func.lineno, {}, {
|
||||
"LIST": objblock,
|
||||
"AT": atblock,
|
||||
"VALUE": valblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
function listAppendExtend(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("lists_append_extend", func.lineno, {
|
||||
"OP":mode
|
||||
}, {
|
||||
"LIST": objblock,
|
||||
"DATA": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
return converter;
|
||||
}
|
||||
pbc.objectFunctionD.get('append')['List'] = listAppendExtend('append');
|
||||
pbc.objectFunctionD.get('extend')['List'] = listAppendExtend('extend');
|
||||
|
||||
|
||||
//del mylist[0]在python_to_blockly.js中实现
|
||||
|
||||
pbc.objectFunctionD.get('remove')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("lists_remove_at", func.lineno, {
|
||||
"OP":"remove"
|
||||
}, {
|
||||
"LIST": objblock,
|
||||
"DATA": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
|
||||
//mylist.pop(0)在set.js中实现
|
||||
//random.choice(mylist)在text.js中实现
|
||||
|
||||
function listFindCount(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("lists_find", func.lineno, {
|
||||
'OP':mode
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"data": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
};
|
||||
return converter;
|
||||
}
|
||||
pbc.objectFunctionD.get('index')['List'] = listFindCount('INDEX');
|
||||
pbc.objectFunctionD.get('count')['List'] = listFindCount('COUNT');
|
||||
|
||||
|
||||
pbc.globalFunctionD['lists_sort'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 3 && args[1]._astname === "Str"
|
||||
&& args[2]._astname === "Name") {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var argblock = py2block.convert(args[0]);
|
||||
var type = py2block.Str_value(args[1]);
|
||||
var reverse = py2block.Name_str(args[2]);
|
||||
if(reverse == "True"){
|
||||
reverse = '-1';
|
||||
}else if(reverse == "False"){
|
||||
reverse = '1';
|
||||
}else{
|
||||
throw new Error("not implement");
|
||||
}
|
||||
return block("lists_sort", func.lineno, {
|
||||
'TYPE': type,
|
||||
'DIRECTION':reverse
|
||||
}, {
|
||||
'LIST': argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('reverse')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("lists_reverse", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('clear')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("lists_clear", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
pbc.globalFunctionD['list'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length > 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length ==0){
|
||||
return block("lists_create_with_noreturn", node.lineno, {},{}
|
||||
, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items": 0
|
||||
});
|
||||
}
|
||||
if (args.length ==1){
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("list_tolist", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pbc.globalFunctionD['zip'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
|
||||
var d = py2block.convertElements("ADD", args);
|
||||
|
||||
return block("lists_zip", node.lineno, {
|
||||
}, d, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items":args.length
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('random')['sample'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var listname = py2block.convert(args[0]);
|
||||
var varblock = py2block.convert(args[1]);
|
||||
return block("lists_get_random_sublist", func.lineno, {}, {
|
||||
'LIST':listname,
|
||||
'VAR': varblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('tolist')['List'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("list_tolist2", func.lineno, {}, {
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user