我正在研究我的单身汉工作,我正在建立像翻译一样的东西。我想将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++"
答案 0 :(得分:1)
答案 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/
它基本上使用正则表达式来做魔术。它涵盖了大多数情况,但不是全部。