freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../basic-javascript/counting-cards/index.md

5.8 KiB
Raw Blame History

title localeTitle
Counting Cards 计数卡

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

在赌场游戏Blackjack中 ,玩家可以通过跟踪牌组中剩余的高牌和低牌的相对数量来获得优势。这称为卡片计数。

在牌组中剩下更多高牌有利于玩家。根据下表为每张卡分配一个值。当计数为正数时,玩家应该下注。当计数为零或负数时,玩家应该下注低。

价值|牌
----- | -------------------
+1 | 2,3,4,5,6
0 | 7,8,9
-1 | 10'J''Q''K''A'

你会写一个卡计数功能。它将接收一个参数,并根据卡的值递增或递减全局计数变量(参见表格)。然后,该函数将返回一个包含当前计数的字符串,如果计数为正则返回字符串Bet ,如果计数为零或为负,则返回Hold 。当前计数和玩家的决定( BetHold )应该由一个空格分隔。

  • 更改下面的代码// Only change code below this line ,最多为// Only change code above this line
  • 确保您正在编辑cc函数的内部。
  • 使用您学到的知识来检查传递给函数的每个参数的值。
  • 保持该数字的运行计数。
  • 如果最终计数为1或更大则返回**#Hold** 。
  • 如果最终计数为0或更少则返回**#Bet** 。

示例输出:

  • -3保持
  • 5投注

:speech_balloon:提示1

使用switch (或else if )语句计算每张卡的值。

现在尝试解决问题

:speech_balloon:提示2

将每张卡的值加/减到变量计数 。如果卡值为0请不要做任何事情。

现在尝试解决问题

:speech_balloon:提示3

在计算卡片后,使用if语句检查计数值 。另外,请确保您的return在数字和字符串之间有空格。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

    function cc(card) { 
      // Only change code below this line 
      switch(card){ 
        case 2: 
        case 3: 
        case 4: 
        case 5: 
        case 6: 
          count++; 
          break; 
        case 10: 
        case "J": 
        case "Q": 
        case "K": 
        case "A": 
          count--; 
          break; 
      } 
      if (count > 0){ 
        return count + " Bet"; 
      } else { 
        return count + " Hold"; 
      } 
      // Only change code above this line 
    } 

代码说明:

  • 通过switch语句检查每张卡的值。
  • 变量计数
    • 如果卡是2,3,4,5或6则增加1。
    • 由于7,8和9不值得我们在switch语句中忽略了这些卡。
    • 如果卡是10'J''Q''K'或'A'则减1。
  • 检查count的值并返回相应的响应。

示例运行

  • cc(2);运行。
  • switch语句命中case 2 ,跳转并将变量count
  • 然后switch语句命中了breakcc(3);运行。
  • 这个循环一直持续到最后的呼叫为止, cc('A');
  • switch语句之后, if语句检查count 现在为0。
  • 然后这将下降到else语句,该语句将返回0 Hold

注意 :如前所述, switch语句也可能是else if语句。

附加代码解决方案

function cc(card) { 
  // Only change code below this line 
  var regex = /[JQKA]/; 
  if (card > 1 && card < 7){count++;} 
  else if (card === 10 || String(card).match(regex)){count--;} 
 
  if (count > 0) return count + " Bet"; 
  return count + " Hold"; 
 
  // Only change code above this line 
 } 

·在repl.it上运行代码。

代码说明

·该功能首先评估if条件card是一个大于1且小于7 ,在这种情况下它递增count由一个。 ·然后,如果卡10或更高的IT递减count由一个。 ·变量regex是表示较高卡的值(字母)的正则表达式 。 · else语句使用|| (logical OR)检查这些值|| (logical OR)运算符;首先是10 ,然后是使用String.match匹配正则表达式的任何字符串。

资源