Update: 调整 生成笛卡尔积 图形块
This commit is contained in:
@@ -489,7 +489,7 @@ export const math_round = {
|
|||||||
export const text_to_number = {
|
export const text_to_number = {
|
||||||
init: function () {
|
init: function () {
|
||||||
var TO_INT_FLOAT =
|
var TO_INT_FLOAT =
|
||||||
[[Blockly.Msg.MIXLY_TO_INT, 'int'], [Blockly.Msg.MIXLY_TO_FLOAT, 'float'], [Blockly.Msg.MIXLY_TO_BITES, 'b'],[Blockly.Msg.LANG_MATH_BYTE+Blockly.Msg.MIXLY_TO_INT,'bti']];
|
[[Blockly.Msg.MIXLY_TO_INT, 'int'], [Blockly.Msg.MIXLY_TO_FLOAT, 'float'], [Blockly.Msg.MIXLY_TO_BITES, 'b'], [Blockly.Msg.LANG_MATH_BYTE + Blockly.Msg.MIXLY_TO_INT, 'bti']];
|
||||||
this.setColour(MATH_HUE);
|
this.setColour(MATH_HUE);
|
||||||
this.appendValueInput('VAR')
|
this.appendValueInput('VAR')
|
||||||
.appendField(new Blockly.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');
|
.appendField(new Blockly.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');
|
||||||
@@ -533,7 +533,7 @@ export const turn_to_int = {
|
|||||||
init: function () {
|
init: function () {
|
||||||
this.setColour(MATH_HUE);
|
this.setColour(MATH_HUE);
|
||||||
this.appendValueInput('VAR')
|
this.appendValueInput('VAR')
|
||||||
.appendField(Blockly.Msg.LANG_MATH_BYTE+Blockly.Msg.MIXLY_TO_HEX);
|
.appendField(Blockly.Msg.LANG_MATH_BYTE + Blockly.Msg.MIXLY_TO_HEX);
|
||||||
this.setOutput(true, Number);
|
this.setOutput(true, Number);
|
||||||
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX)
|
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX)
|
||||||
}
|
}
|
||||||
@@ -547,16 +547,18 @@ export const generate_cartesian_product = {
|
|||||||
init: function () {
|
init: function () {
|
||||||
this.setColour(MATH_HUE);
|
this.setColour(MATH_HUE);
|
||||||
this.itemCount_ = 1;
|
this.itemCount_ = 1;
|
||||||
this.updateShape_();
|
|
||||||
this.setMutator(new Blockly.icons.MutatorIcon(['lists_create_with_item'], this));
|
this.setMutator(new Blockly.icons.MutatorIcon(['lists_create_with_item'], this));
|
||||||
this.appendValueInput('repeat')
|
this.appendDummyInput('DUMMY')
|
||||||
|
.appendField(Blockly.Msg.MIXLY_PRODUCT + Blockly.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT);
|
||||||
|
this.appendValueInput('REPEAT')
|
||||||
.appendField(Blockly.Msg.MIXLY_EVERY_PER_ELEPER_ELEMENT);
|
.appendField(Blockly.Msg.MIXLY_EVERY_PER_ELEPER_ELEMENT);
|
||||||
this.appendDummyInput()
|
this.appendDummyInput()
|
||||||
.appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);
|
.appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);
|
||||||
this.setPreviousStatement(false)
|
this.setPreviousStatement(false);
|
||||||
this.setNextStatement(false)
|
this.setNextStatement(false);
|
||||||
this.setOutput(true)
|
this.setOutput(true);
|
||||||
this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
|
this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
|
||||||
|
this.updateShape_();
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Create XML to represent list inputs.
|
* Create XML to represent list inputs.
|
||||||
@@ -617,7 +619,7 @@ export const generate_cartesian_product = {
|
|||||||
// Reconnect any child blocks.
|
// Reconnect any child blocks.
|
||||||
for (var i = 0; i < this.itemCount_; i++) {
|
for (var i = 0; i < this.itemCount_; i++) {
|
||||||
if (connections[i]) {
|
if (connections[i]) {
|
||||||
this.getInput('ADD' + i).connection.connect(connections[i]);
|
this.getInput(`ADD${i}`).connection.connect(connections[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -630,7 +632,7 @@ export const generate_cartesian_product = {
|
|||||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (itemBlock) {
|
while (itemBlock) {
|
||||||
var input = this.getInput('ADD' + i);
|
var input = this.getInput(`ADD${i}`);
|
||||||
itemBlock.valueConnection_ = input && input.connection.targetConnection;
|
itemBlock.valueConnection_ = input && input.connection.targetConnection;
|
||||||
i++;
|
i++;
|
||||||
itemBlock = itemBlock.nextConnection &&
|
itemBlock = itemBlock.nextConnection &&
|
||||||
@@ -647,9 +649,9 @@ export const generate_cartesian_product = {
|
|||||||
if (this.getInput('EMPTY')) {
|
if (this.getInput('EMPTY')) {
|
||||||
this.removeInput('EMPTY');
|
this.removeInput('EMPTY');
|
||||||
} else {
|
} else {
|
||||||
var i = 0;
|
let i = 0;
|
||||||
while (this.getInput('ADD' + i)) {
|
while (this.getInput(`ADD${i}`)) {
|
||||||
this.removeInput('ADD' + i);
|
this.removeInput(`ADD${i}`);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -658,11 +660,9 @@ export const generate_cartesian_product = {
|
|||||||
this.appendDummyInput('EMPTY')
|
this.appendDummyInput('EMPTY')
|
||||||
.appendField(Blockly.Msg.MIXLY_EMPTY_REMINDER);
|
.appendField(Blockly.Msg.MIXLY_EMPTY_REMINDER);
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0; i < this.itemCount_; i++) {
|
for (let i = 0; i < this.itemCount_; i++) {
|
||||||
var input = this.appendValueInput('ADD' + i);
|
this.appendValueInput(`ADD${i}`);
|
||||||
if (i == 0) {
|
this.moveInputBefore(`ADD${i}`, 'REPEAT');
|
||||||
input.appendField(Blockly.Msg.MIXLY_PRODUCT+Blockly.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -50,15 +50,15 @@ export const math_bit = function (_, generator) {
|
|||||||
|
|
||||||
export const math_arithmetic = function (a, generator) {
|
export const math_arithmetic = function (a, generator) {
|
||||||
var b = {
|
var b = {
|
||||||
ADD: [" + ", generator.ORDER_ADDITIVE],
|
ADD: [" + ", generator.ORDER_ADDITIVE],
|
||||||
MINUS: [" - ", generator.ORDER_ADDITIVE],
|
MINUS: [" - ", generator.ORDER_ADDITIVE],
|
||||||
MULTIPLY: [" * ", generator.ORDER_MULTIPLICATIVE],
|
MULTIPLY: [" * ", generator.ORDER_MULTIPLICATIVE],
|
||||||
DIVIDE: [" / ", generator.ORDER_MULTIPLICATIVE],
|
DIVIDE: [" / ", generator.ORDER_MULTIPLICATIVE],
|
||||||
QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作
|
QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作
|
||||||
ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作
|
ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作
|
||||||
POWER: [" ** ", generator.ORDER_EXPONENTIATION]
|
POWER: [" ** ", generator.ORDER_EXPONENTIATION]
|
||||||
}[a.getFieldValue("OP")],
|
}[a.getFieldValue("OP")];
|
||||||
c = b[0],
|
var c = b[0],
|
||||||
b = b[1],
|
b = b[1],
|
||||||
d = generator.valueToCode(a, "A", b) || "0";
|
d = generator.valueToCode(a, "A", b) || "0";
|
||||||
a = generator.valueToCode(a, "B", b) || "0";
|
a = generator.valueToCode(a, "B", b) || "0";
|
||||||
@@ -290,7 +290,7 @@ export const text_to_number = function (_, generator) {
|
|||||||
var towhat = this.getFieldValue('TOWHAT');
|
var towhat = this.getFieldValue('TOWHAT');
|
||||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||||
if (towhat == 'b') return ['' + str + '.encode("utf-8")', generator.ORDER_ATOMIC];
|
if (towhat == 'b') return ['' + str + '.encode("utf-8")', generator.ORDER_ATOMIC];
|
||||||
else if(towhat == 'bti') return['int.from_bytes('+str+',"big")',Blockly.Python.ORDER_ATOMIC];
|
else if (towhat == 'bti') return ['int.from_bytes(' + str + ',"big")', generator.ORDER_ATOMIC];
|
||||||
return [towhat + "(" + str + ')', generator.ORDER_ATOMIC];
|
return [towhat + "(" + str + ')', generator.ORDER_ATOMIC];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,15 +310,15 @@ export const turn_to_int = function (_, generator) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const generate_cartesian_product = function (_, generator) {
|
export const generate_cartesian_product = function (_, generator) {
|
||||||
generator.definitions_.import_itertools = "import itertools";
|
generator.definitions_.import_itertools = 'import itertools';
|
||||||
var re = generator.valueToCode(this, 'repeat', generator.ORDER_ATOMIC);
|
let re = generator.valueToCode(this, 'REPEAT', generator.ORDER_ATOMIC);
|
||||||
var code = new Array(this.itemCount_);
|
let items = new Array(this.itemCount_);
|
||||||
var default_value = '0';
|
for (let n = 0; n < this.itemCount_; n++) {
|
||||||
for (var n = 0; n < this.itemCount_; n++) {
|
items[n] = generator.valueToCode(this, `ADD${n}`, generator.ORDER_NONE) || '0';
|
||||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
}
|
||||||
generator.ORDER_NONE) || default_value;
|
let code = '';
|
||||||
|
if (this.itemCount_) {
|
||||||
|
code = `itertools.product(${items.join(', ')}, repeat=${re})`;
|
||||||
}
|
}
|
||||||
// var code = '[' + code.join(', ') + ']';
|
|
||||||
// var code = 'itertools.product('+'repeat='+re+')';
|
|
||||||
return [code, generator.ORDER_ATOMIC];
|
return [code, generator.ORDER_ATOMIC];
|
||||||
}
|
}
|
||||||
@@ -390,7 +390,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</block>
|
</block>
|
||||||
<block type="generate_cartesian_product">
|
<block type="generate_cartesian_product">
|
||||||
<value name="repeat">
|
<value name="REPEAT">
|
||||||
<shadow type="math_number">
|
<shadow type="math_number">
|
||||||
<field name="NUM">2</field>
|
<field name="NUM">2</field>
|
||||||
</shadow>
|
</shadow>
|
||||||
|
|||||||
Reference in New Issue
Block a user