逻辑错误:将Python转换为JavaScript.代码运行,但给出错误的答案



我4天前开始学习JavaScript,我正在尝试将我的python项目转换为JavaScript进行练习。

这是我的工作python代码:

def shuffle(l):
for shuffles in range(numPerformed):
heads = 0
#tails = 0 
toss = []
for card in range(numCards):
x = np.random.randint(2)
toss.append(x)
if x == 0:
heads += 1
#else:
#tails += 1

left = l[:heads] #left hand
right = l[heads:] #right hand
shuffled = []   #shuffled deck

for card in range(numCards):
if toss[card] == 0:
shuffled.append(left.pop(0))
if toss[card] == 1:
shuffled.append(right.pop(0))
l = shuffled
return l
numCards = int(input("Enter number of cards in deck: "))
l = list(range(numCards))
numPerformed = int(input("Enter number of shuffles to perform on deck: "))
print(shuffle(l))

我用掷硬币的方法来做即兴洗牌。这是我的JS代码,但有些东西导致它给出了错误的答案:

const list = (numCards) => {
var newList = []
var i = 0;
while (i < numCards){
newList.push(i);
i++;
}
return newList
}
function shuffle(l, numPerformed){
for (var shuffles = 0; shuffles < numPerformed; shuffles++){
var heads = 0;
var tails = 0;
var toss = [];
for (var card = 0; card < l.length; card++){
var x = Math.floor(Math.random() * 2);
toss.push(x);
if (x == 0){
heads++;
}else{
tails++;
}
}
var left = []; //l[:heads]
var right = []; //l[heads:]
for (var i = 0; i < l.length; i++){
i < heads ? left.push(i) : right.push(i);
}
var shuffled = [];
for (var card = 0; card < numCards; card++){
if (toss[card] == 0){
shuffled.push(left.shift());
}else if (toss[card] == 1){
shuffled.push(right.shift());
}
}
l = shuffled;
}
return l
}
var numCards = parseInt(prompt("Enter number of cards in deck: "))
var l = list(numCards)
var numPerformed = parseInt(prompt("Enter number of shuffles to perform on deck: "));
console.log(shuffle(l))

我做错了什么?我认为这个错误是由于我对JavaScript语法缺乏经验造成的。

我认为,您的代码应该相当于这个

const numCards = 52;
const l = new Array(numCards).fill().map((_, idx) => idx);
const numPerformed = 10;
const shuffle = (l, numPerformed) => {
new Array(numPerformed)
.fill()
.map((_, idx) => idx)
.forEach(_ => {
const toss =
new Array(numCards)
.fill()
.map(el => Math.random() > 0.5 ? 1 : 0);
const heads = numCards - toss.reduce((acc, el) => acc + el, 0);
const left = l.slice(0, heads);
const right = l.slice(heads);
const shuffled = [];

new Array(numCards)
.fill()
.map((_, idx) => idx)
.forEach(card => {
if (toss[card] == 0) {
shuffled.push(left.shift());
}
if (toss[card] == 1) {
shuffled.push(right.shift());
}
})
l = shuffled;
});
return l;
}
console.log(shuffle(l, numPerformed))

最新更新