5.8 KiB
title | localeTitle |
---|---|
Counting Cards | 计数卡 |
如果卡住,请记得使用**Read-Search-Ask
** 。尝试配对程序并编写自己的代码
问题说明:
在赌场游戏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投注
提示:1
使用switch
(或else if
)语句计算每张卡的值。
现在尝试解决问题
提示:2
将每张卡的值加/减到变量计数 。如果卡值为0,请不要做任何事情。
现在尝试解决问题
提示:3
在计算卡片后,使用if
语句检查计数值 。另外,请确保您的return
在数字和字符串之间有空格。
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
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
语句。
附加代码解决方案
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()匹配正则表达式的任何字符串。