如何使用javascript获得相同的结果?

时间:2018-01-06 10:11:34

标签: javascript python

来自中级python背景,我刚开始学习javascript,我发现很难弄清楚我的代码有什么问题。我用python获得了预期的结果,但没有使用javascript。

问题

编写一个使用console.log打印1到100之间所有数字的程序,但有两个例外。对于可被3整除的数字,请打印“Fizz”而不是数字,对于可被5整除(而不是3)的数字,请打印“Buzz”。

如果你有这个工作,修改你的程序打印“FizzBu​​zz”,对于可以被3和5整除的数字(并且仍然打印“Fizz”或“Buzz”表示只能被其中一个整除的数字)。 / p>

python中的代码

for x in range(100):
    if x % 3 == (x % 5) == 0:
        print('FuzzBazz')
    if x % 3 == 0:
        print('Fizz')
        continue
    if x % 5 == 0:
        print('Buzz')
        continue
    print(x)

JS中的代码

for (var x = 0; x < 100; x++) {
  if (x % 3 === x % 5 === 0) {
    console.log("FizzBuzz");
  }
  if (x % 3 === 0) {
    console.log("Fizz");
    continue;
  }
  if (x % 5 === 0) {
    console.log("Buzz");
    continue;
  }
  console.log(x);
}

4 个答案:

答案 0 :(得分:3)

2个错误,都在同一行:

  1. 您在第一次比较后忘记了0 x%3

  2. 您忘记在行

  3. 中加入AND运算符&&

    因此

    if(x%3===x%5===0)

    实际应该是:

    if(x%3===0 && x%5===0)

    另外,值得指出else可以代替continue使用,如下所示:

    if (x%3===0 && x%5===0) {
        console.log("fizzbuzz");
    } else if (x%3===0) {
        console.log("fizz");
    } else if (x%5===0) {
        console.log("buzz");
    } else {
        console.log(x);
    }
    

答案 1 :(得分:1)

2个错误是

  1. 您使用了if(x%3===x%5===0)这是错误的,因为x%3 === x%5为真而不是0,这将与0进行比较,这将始终为false,因此将其修改为(x%3===0 && x%5===0)
  2. 因为3和5的倍数都应该替换为FizzBu​​zz,所以对于eg : 15 it will print FIZZBUZZ and FIZZ and BUZZ which is wrong.
  3. 来说,它应该在if else循环中

    我修改了代码,请看一下。

    for (var x=0; x<100; x++){
    if(x%3===0 && x%5===0){
      console.log("FizzBuzz");
    }else{
      if(x%3===0){
      console.log("Fizz"); 
      }if(x%5===0){
        console.log("Buzz");
      }
      console.log(x);
     }
    }
    

答案 2 :(得分:1)

尝试以下代码

for (var x=0; x<10; x++){
if(x%3===0 && x%5===0){
  console.log("FizzBuzz");
}
if(x%3===0){
  console.log("Fizz"); continue;
}
if(x%5===0){
  console.log("Buzz");continue;
}
 console.log(x);
}

答案 3 :(得分:1)

您的困惑来自于JavaScript处理比较与Python略有不同的事实。

当您运行x%3===x%5===0时,您希望JS将x%50x%3x%5进行比较,就像Python一样。但是,JS会将x%3x%5进行比较,从而生成truefalse,然后将其与0进行比较。由于truefalse都不等于0,因此该表达式将始终评估为false

直接翻译为JS的比较表达式看起来像x%3 == 0 && x%5 == 0。但是,由于1535的最低公倍数,因此该表达式与x % 15 == 0相同。

在评论和其他答案中也有一些关于continue在JS中是否必要或甚至合法的讨论。两者的答案是&#34;是的,它是&#34;但是有一种更简单的方法。

而不是使用continue,如下面的代码所示:

for (var x = 0; x < 100; x++) {
  if (x % 15 == 0) {
    console.log("FizzBuzz");
    continue;
  }
  if (x % 3 == 0) {
    console.log("Fizz");
    continue;
  }
  if (x % 5 == 0) {
    console.log("Buzz");
    continue;
  }
  console.log(x);
}

可以在此代码中使用else if

for (var x = 0; x < 100; x++) {
  if (x % 15 == 0) {
    console.log("FizzBuzz");
  } else if (x % 3 == 0) {
    console.log("Fizz");
  } else if (x % 5 == 0) {
    console.log("Buzz");
  } else {
    console.log(x);
  }
}

最后一段代码就是我如何在JavaScript中实现fizzbuzz。