Pythonize Javascript for循环

时间:2017-03-11 13:51:19

标签: javascript python

我正在研究我的单身汉工作,我正在建立像翻译一样的东西。我想将Javascript代码转换为Python。我发现我想将For Loop转换为Python,如下所示:

for(var x = 0; x < some_length; x++) {
}
在Python中

它看起来像这样:

for x in range(0, some_length):

问题是我想要涵盖所有可能发生的情况,例如像这样倒退:

for(var x = some_length - 1; x >= 0; x--) {
}

有人可以帮我编写一个将其转换为python的函数吗?

重要编辑!!!

作为将for循环转换为python的函数的输入是:

 function pythonize(firstAction, condition, action)

,其中

firstAction = "x = 0",

condition = "x < some_length"

action = "x++"

3 个答案:

答案 0 :(得分:1)

就像是,您可以查看range功能以了解更多详细用法:

for x in range(some_length - 1, -1, -1):

注意我将步骤从x++更改为减量,否则for循环不会终止。

答案 1 :(得分:1)

range接受start, end, step,因此您可以

for x in range(some_length-1, -1, -1)

另一种选择是

for x in reversed(range(some_length))

注意:我假设你的第二个例子是x--

答案 2 :(得分:0)

我已经创建了这个长函数来将javascript for循环转换为python for循环:

function pyt(c) {
  var cc = c.split('(')[1];
  cc = cc.substr(0,cc.length-1);
  pp = cc.split(';');
  var r1 = /[A-Za-z\$\_]{1}[A-Za-z0-9\_]* ?= ?(.*)/.exec(pp[0])[1];
  var r2 = '';
  if(pp[1].indexOf('<') > -1) {
    r2 = /[A-Za-z\$\_]{1}[A-Za-z0-9\_]* ?<=? ?(.*)/.exec(pp[1])[1]
  } else if(pp[1].indexOf('>') > -1) {
    r2 = /[A-Za-z\$\_]{1}[A-Za-z0-9\_]* ?>=? ?(.*)/.exec(pp[1])[1]
  }
  var delta = 0;
  if(pp[1].indexOf('>=')) {
    delta = -1;
    }
  if(pp[1].indexOf('<=')) {
    delta = 1;
  }
  var e2 = 0;
  if(!isNaN(r2)) {
     e2 = Number(r2) + delta;
  } else {
    if(delta !== 0) {
        e2 = r2 + (delta > 0 ? '+' : '-') + delta;
    } else {
        e2 = r2;
    }
  }

  var r3 = '';
  if(/[A-Za-z\$\_]{1}[A-Za-z0-9\_]*\+\+/.test(pp[2])) {
    r3 = '1';
  } else if(/[A-Za-z\$\_]{1}[A-Za-z0-9\_]*\-\-/.test(pp[2])) {
    r3 = '-1';
  } else {
    if(pp[2].indexOf('+=') > -1) {
        r3 = /[A-Za-z\$\_]{1}[A-Za-z0-9\_]* ?\+= ?(.*)/.exec(pp[2])[1];
    } else if(pp[2].indexOf('-=') > -1) {
        r3 = /[A-Za-z\$\_]{1}[A-Za-z0-9\_]* ?\-= ?(.*)/.exec(pp[2])[1];
    } else {
        if(/([A-Za-z\$\_]{1}[A-Za-z0-9\_]*) ?= ?\1 ?\+ ?(.*)/.test(pp[2])) {
            r3 = /([A-Za-z\$\_]{1}[A-Za-z0-9\_]*) ?= ?\1 ?\+ ?(.*)/.exec(pp[2])[2];
      } else {
        r3 = /([A-Za-z\$\_]{1}[A-Za-z0-9\_]*) ?= ?\1 ?\- ?(.*)/.exec(pp[2])[2];
      }
    }
  }
  p = 'for i in range(' + r1 + ', ' + e2 + ', ' + r3 + ')';
  return p;
}

var c = "for(i = 30 + y;i>=10 - 1; i = i + 0.1)";
console.log(pyt(c));

https://jsfiddle.net/x7uhxbua/12/

它基本上使用正则表达式来做魔术。它涵盖了大多数情况,但不是全部。