Update: 调整 生成笛卡尔积 图形块

This commit is contained in:
王立帮
2024-10-15 16:32:13 +08:00
parent a3b3ae6cc5
commit aace9dc80e
3 changed files with 37 additions and 37 deletions

View File

@@ -547,16 +547,18 @@ export const generate_cartesian_product = {
init: function () {
this.setColour(MATH_HUE);
this.itemCount_ = 1;
this.updateShape_();
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);
this.appendDummyInput()
.appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);
this.setPreviousStatement(false)
this.setNextStatement(false)
this.setOutput(true)
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setOutput(true);
this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
this.updateShape_();
},
/**
* Create XML to represent list inputs.
@@ -617,7 +619,7 @@ export const generate_cartesian_product = {
// Reconnect any child blocks.
for (var i = 0; i < this.itemCount_; 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 i = 0;
while (itemBlock) {
var input = this.getInput('ADD' + i);
var input = this.getInput(`ADD${i}`);
itemBlock.valueConnection_ = input && input.connection.targetConnection;
i++;
itemBlock = itemBlock.nextConnection &&
@@ -647,9 +649,9 @@ export const generate_cartesian_product = {
if (this.getInput('EMPTY')) {
this.removeInput('EMPTY');
} else {
var i = 0;
while (this.getInput('ADD' + i)) {
this.removeInput('ADD' + i);
let i = 0;
while (this.getInput(`ADD${i}`)) {
this.removeInput(`ADD${i}`);
i++;
}
}
@@ -658,11 +660,9 @@ export const generate_cartesian_product = {
this.appendDummyInput('EMPTY')
.appendField(Blockly.Msg.MIXLY_EMPTY_REMINDER);
} else {
for (var i = 0; i < this.itemCount_; i++) {
var input = this.appendValueInput('ADD' + i);
if (i == 0) {
input.appendField(Blockly.Msg.MIXLY_PRODUCT+Blockly.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT);
}
for (let i = 0; i < this.itemCount_; i++) {
this.appendValueInput(`ADD${i}`);
this.moveInputBefore(`ADD${i}`, 'REPEAT');
}
}
},

View File

@@ -57,8 +57,8 @@ export const math_arithmetic = function (a, generator) {
QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作
ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作
POWER: [" ** ", generator.ORDER_EXPONENTIATION]
}[a.getFieldValue("OP")],
c = b[0],
}[a.getFieldValue("OP")];
var c = b[0],
b = b[1],
d = generator.valueToCode(a, "A", 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 str = generator.valueToCode(this, 'VAR', 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];
}
@@ -310,15 +310,15 @@ export const turn_to_int = function (_, generator) {
}
export const generate_cartesian_product = function (_, generator) {
generator.definitions_.import_itertools = "import itertools";
var re = generator.valueToCode(this, 'repeat', generator.ORDER_ATOMIC);
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;
generator.definitions_.import_itertools = 'import itertools';
let re = generator.valueToCode(this, 'REPEAT', generator.ORDER_ATOMIC);
let items = new Array(this.itemCount_);
for (let n = 0; n < this.itemCount_; n++) {
items[n] = generator.valueToCode(this, `ADD${n}`, generator.ORDER_NONE) || '0';
}
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];
}

View File

@@ -390,7 +390,7 @@
</value>
</block>
<block type="generate_cartesian_product">
<value name="repeat">
<value name="REPEAT">
<shadow type="math_number">
<field name="NUM">2</field>
</shadow>