Python Blackjack Game如何在while循环中携带变量

时间:2014-08-02 18:20:52

标签: python python-3.4

我仍然深入研究Python中的Blackjack游戏,我的目标是让计算机“扭曲”。 (拿另一张卡片),直到总值大于15.从那时起我想要它,以便随着卡片总数的增加,计算机拿另一张卡片的机会变小,就像人类一样(冒风险,如果数字不太大。在计算机处理了两个值后出现以下代码。

if (computerCardValueTotal < 15): print ("The computer has decided to twist") ranCompCard3 = random.choice(availableCards) computerCardValueTotal = ranCompCard + ranCompCard2 + ranCompCard3 if (computerCardValueTotal < 15): print ("The computer has chosen to twist again")

我的目标是如果总值小于15则让这段代码循环,以便计算机扭曲直到它超过15.我考虑使用while循环但我不确定如何携带循环开始时的当前总数,以便将下一个卡值添加到当前总计。有没有人有解决方案可以帮助我?

另外,其次,它不是这个问题中两个问题中最大的一个,但是你会怎么建议做电脑,以便随着卡的总价值变大,它再次扭曲的可能性会更小?例如,如果卡的总值为17,则计算机扭转的概率为1/10,但如果卡的总值为19,则计算机扭曲的几率为1/20。

所有有价值的帮助将一如既往地投票,谢谢! :)

2 个答案:

答案 0 :(得分:3)

你自己蹒跚而行ranCompCardranCompCard2ranCompCard3,...... list会让生活变得更轻松:

compCards = [ranCompCard, ranCompCard2]
while sum(compCards) < 15:
    compCards.append(random.choice(availableCards))

为了调整选择另一张卡的概率,您可以执行以下操作:

while True:
    gap = 21 - sum(compCards)
    if gap > 0 and random.random() < (1 / (40 / float(gap))):
        compCards.append(random.choice(availableCards))
    else:
        break

请注意,这是gap与选择另一张卡的概率之间的线性关系:

>>> for card_sum in range(15, 21):
    print card_sum, 1 / (40 / float(21 - card_sum))


15 0.15
16 0.125
17 0.1
18 0.075
19 0.05
20 0.025

但您可以根据需要调整等式。


在您编辑代码时,请查看(并考虑遵循)official style guide;变量名称应为lowercase_with_underscores

答案 1 :(得分:0)

只需在值发生变化时重新分配值。

while computerCardValueTotal < 15:
  # other code
  computerCardValueTotal = <new value>