逻辑错误:将python转换为javascript代码运行,但给出错误答案

6tdlim6h  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(428)

我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语法缺乏经验造成的。

e3bfsja2

e3bfsja21#

我想,你的代码应该和这个等价

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))

相关问题