我想使用transcrypt将python脚本转换为javascript。该脚本在python'random'模块中使用'shuffle'。
我把问题归结为这个例子:
l = [ '1', '2' ]
from random import shuffle
while True:
thing = input( 'thing' )
print( 'before: {}'.format( ' '.join( l )))
shuffle( l )
print( 'after: {}'.format( ' '.join( l )))
这失败了 - 如果我注释掉'shuffle(l)'行,那么它运行正常。
不支持随机播放吗?
示例已编辑,因此python有效 - 即使之前的无效python生成的javascript运行&用“随机”
显示问题我可以看到错误的javascript输出:
var _random_integer = function () {
if (_index == 0) {
_fill_array ();
}
var y = _array [_index];
y ^= y >> 11;
y ^= y << 7 & 2636928640;
y ^= y << 15 & 4022730752;
y ^= y >> 18;
_index = __mod__ (_index + 1, 624);
return y;
};
...
var random = function () {
return _random_integer () / _bitmask3;
};
...
(function () {
var __name__ = '__main__';
var l = list (['1', '2']);
var shuffle = __init__ (__world__.random).shuffle;
while (true) {
var thing = input ('thing');
print ('before: {}'.format (' '.join (l)));
shuffle (l);
print ('after: {}'.format (' '.join (l)));
}
我不是javascript专家,但我似乎很清楚这一行:
var shuffle = __init__ (__world__.random).shuffle;
当'random'被发现是一个简单的函数时,会产生运行时错误。
编辑 我通过实现自己的shuffle函数解决了这个问题(好吧,我从python库中删除它并将其破解直到它起作用):
l = [ '1', '2', '3', '4' ]
from random import randint
def shuffle( l ):
n = len( l )
for i in reversed( range( n )):
if i == n - 1: continue
# pick an element in x[:i+1] with which to exchange x[i]
j = randint( i + 1, n - 1 )
l[i], l[j] = l[j], l[i]
while True:
thing = input( '>' )
shuffle( l )
print( ' '.join( l ))
答案 0 :(得分:0)
您只需更改print
即可使其正常运行:
l = [1, 2]
from random import shuffle
while True:
thing = input( 'thing' )
print( 'before:', l)
shuffle( l )
print( 'after:', l)
方法join()
需要一个字符串列表,而不是整数。
但是print()
已经为你的输出做了你想做的事。
答案 1 :(得分:0)
如果我运行您的代码,我会收到错误TypeError: sequence item 0: expected str instance, int found
,无论我是否注释掉shuffle()
的来电,我都会收到错误。我不会说那“运行正常”。它根本不运行。那是因为您正在尝试join()
整数列表,join()
想要一个字符串列表。您的问题与shuffle()
无关。
将列表定义更改为:
l = ["1", "2"]
并且其余代码确实可以正常运行。