diff --git a/boards/default_src/python/blocks/math.js b/boards/default_src/python/blocks/math.js index 4b4e9cc3..64002e29 100644 --- a/boards/default_src/python/blocks/math.js +++ b/boards/default_src/python/blocks/math.js @@ -489,7 +489,7 @@ export const math_round = { export const text_to_number = { init: function () { 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.appendValueInput('VAR') .appendField(new Blockly.FieldDropdown(TO_INT_FLOAT), 'TOWHAT'); @@ -533,7 +533,7 @@ export const turn_to_int = { init: function () { this.setColour(MATH_HUE); 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.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX) } @@ -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'); } } }, diff --git a/boards/default_src/python/generators/math.js b/boards/default_src/python/generators/math.js index bbb12984..ae212315 100644 --- a/boards/default_src/python/generators/math.js +++ b/boards/default_src/python/generators/math.js @@ -50,15 +50,15 @@ export const math_bit = function (_, generator) { export const math_arithmetic = function (a, generator) { var b = { - ADD: [" + ", generator.ORDER_ADDITIVE], - MINUS: [" - ", generator.ORDER_ADDITIVE], - MULTIPLY: [" * ", generator.ORDER_MULTIPLICATIVE], - DIVIDE: [" / ", generator.ORDER_MULTIPLICATIVE], - QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作 - ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作 - POWER: [" ** ", generator.ORDER_EXPONENTIATION] - }[a.getFieldValue("OP")], - c = b[0], + ADD: [" + ", generator.ORDER_ADDITIVE], + MINUS: [" - ", generator.ORDER_ADDITIVE], + MULTIPLY: [" * ", generator.ORDER_MULTIPLICATIVE], + DIVIDE: [" / ", generator.ORDER_MULTIPLICATIVE], + QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作 + ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作 + POWER: [" ** ", generator.ORDER_EXPONENTIATION] + }[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]; } \ No newline at end of file diff --git a/boards/default_src/python_pyodide/template.xml b/boards/default_src/python_pyodide/template.xml index ddde0520..e315702e 100644 --- a/boards/default_src/python_pyodide/template.xml +++ b/boards/default_src/python_pyodide/template.xml @@ -390,7 +390,7 @@ - + 2