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

134 lines
5.8 KiB
Markdown
Raw Normal View History

---
title: Counting Cards
localeTitle: 计数卡
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post")如果卡住,请记得使用**`Read-Search-Ask`** 。尝试配对程序![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 "busts_in_silhouette")并编写自己的代码![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":铅笔:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 "checkered_flag")问题说明:
在赌场游戏**Blackjack中** ,玩家可以通过跟踪牌组中剩余的高牌和低牌的相对数量来获得优势。这称为卡片计数。
在牌组中剩下更多高牌有利于玩家。根据下表为每张卡分配一个值。当计数为正数时,玩家应该下注。当计数为零或负数时,玩家应该下注低。
价值|牌
\----- | -------------------
+1 | 2,3,4,5,6
0 | 7,8,9
\-1 | 10'J''Q''K''A'
你会写一个卡计数功能。它将接收一个**卡**参数,并根据卡的值递增或递减全局**计数**变量(参见表格)。然后,该函数将返回一个包含当前计数的字符串,如果计数为正则返回字符串`Bet` ,如果计数为零或为负,则返回`Hold` 。当前计数和玩家的决定( `Bet`或`Hold` )应该由一个空格分隔。
* 更改下面的代码`// Only change code below this line` ,最多为`// Only change code above this line`
* 确保您正在编辑`cc`函数的内部。
* 使用您学到的知识来检查传递给函数的每个**卡**参数的值。
* 保持该数字的运行计数。
* 如果最终计数为1或更大则返回**#Hold** 。
* 如果最终计数为0或更少则返回**#Bet** 。
**示例输出:**
* \-3保持
* 5投注
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示1
使用`switch` (或`else if` )语句计算每张卡的值。
> _现在尝试解决问题_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示2
将每张卡的值加/减到变量**计数** 。如果卡值为0请不要做任何事情。
> _现在尝试解决问题_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示3
在计算卡片后,使用`if`语句检查**计数值** 。另外,请确保您的`return`在数字和字符串之间有空格。
> _现在尝试解决问题_
## 扰流警报!
![警告牌](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**提前解决!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":初学者:")基本代码解决方案
```javascript
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`语句命中了`break`和`cc(3);`运行。
* 这个循环一直持续到最后的呼叫为止, `cc('A');`
* 在`switch`语句之后, `if`语句检查`count` 现在为0。
* 然后这将下降到`else`语句,该语句将返回**0 Hold** 。
**_注意_** :如前所述, `switch`语句也可能是`else if`语句。
## 附加代码解决方案
```javascript
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上](https://repl.it/@AdrianSkar/Basic-JS-Counting-cards)运行代码。
### 代码说明
·该功能首先评估`if`条件`card`是一个大于`1`且小于`7` ,在这种情况下它递增`count`由一个。 ·然后,如果卡`10`或更高的IT递减`count`由一个。 ·变量`regex`是表示较高卡的值(字母)的[正则表达式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) 。 · `else`语句使用`|| (logical OR)`检查这些值`|| (logical OR)`运算符;首先是`10` ,然后是使用[String.match](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match)匹配正则表达式的任何字符串。
#### 资源
* [卡计数在维基百科](https://en.wikipedia.org/wiki/Card_counting)
* [挑战:使用切换语句从多个选项中进行选择](http://www.freecodecamp.com/challenges/selecting-from-many-options-with-switch-statements)
* [挑战:链接如果其他声明](http://www.freecodecamp.com/challenges/chaining-if-else-statements)
* [挑战使用Javascript增加数字](http://www.freecodecamp.com/challenges/increment-a-number-with-javascript)