试图做一个二十一点游戏
Posted
技术标签:
【中文标题】试图做一个二十一点游戏【英文标题】:Trying to make a blackjack game kind of 【发布时间】:2022-01-19 19:50:24 【问题描述】:总结问题
我正在尝试制作一个简单的二十一点程序,该程序为庄家 1-11 选择两个数字,同时为玩家 1-11 选择两个数字。我想制作一个循环,根据玩家输入、击中或停留的内容来检查玩家是否击中或停留。如果他们击中,我希望它在玩家牌组中添加一张牌,并让他们选择再次击中或留下。
如果他们留下,我希望经销商检查一组规则,这些规则是:
1: 庄家是否少于 17 且是否少于玩家 1a:如果它确实有小于 17 并且小于玩家,它将绘制一个新的数字 1-11 并将其添加到庄家手中 1b:然后会运行检查是否有以下条件的循环
2: 庄家有 17-21 有没有多于闲家 2a:如果它有任何数字 17-21 并且它比玩家多,那么它将打印一条获胜消息
3:庄家是否有超过 21 3a:如果超过 21 则打印房屋破灭消息
4:庄家是否比玩家拥有更多 4a:如果庄家比玩家多(但由于之前的检查而少于 21),那么它会打印一个房子赢消息
这就是我尝试使用stay 命令完成的任务,到目前为止我还没有发现任何问题。
我的命中命令不会注册,即使我不输入stay..我试图通过让它打印一条消息并在我输入hit时结束循环来调试它,但它仍然通过stay命令运行无论如何,我认为这可能是我的输入转换为字符串的问题。
不要对我太苛刻,我上周才自学了如何编码,然后从 python 开始。
这是我遇到问题的代码:
'''
else:
hitstay = True
while hitstay:
action = str(input("hit or stay? "))
dealer = sum(dealer_cards)
player = sum(player_cards)
if action == 'stay' or 'Stay':
if dealer < 17 and dealer < player:
dealer_cards.append(random.randint(1, 11))
dealer = sum(dealer_cards)
print(f"Dealer pulls dealer_cards[-1]\n"
f"Dealer now has sum(dealer_cards)")
if 17 <= dealer <= 21 and dealer > player:
print(f"House won! Dealer cards: dealer_cards, sum(dealer_cards)\n"
f"Player cards: player_cards, sum(player_cards)")
playing = False
hitstay = False
elif dealer > 21:
print(f'House busted! Dealer cards: dealer_cards')
playing = False
hitstay = False
elif dealer > player:
print(f'House wins, Dealer cards dealer_cards, sum(dealer_cards)\n'
f'Player cards: player_cards, sum(player_cards)')
playing = False
hitstay = False
if action == 'hit' or 'Hit':
print('command hit')
playing = False
hitstay = False
'''
【问题讨论】:
因此,我还尝试将 if 语句用于扫描单词 hit 或 Hit 在 stay 之前,并且我尝试将 stay 命令设置为 if 和 elif 语句,并且出于某种原因,无论您键入什么它通过保持命令而不是命中命令。我想知道将整个事情变成一个函数并在循环中调用它是否更容易,但我还是太新了,无法完全理解。 【参考方案1】:代替:
if action == 'stay' or 'Stay':
做:
if action == 'stay' or action == 'Stay':
或:
if action in ('stay', 'Stay'):
或者最好的:
if action.lower() == 'stay':
第一个版本不起作用,因为它被解释为:
if (action == 'stay') or 'Stay':
等同于:
if (action == 'stay') or True:
等同于:
if True:
【讨论】:
谢谢!这行得通。我不明白它将输入视为布尔值。 任何类型的值都可以在if
语句中使用,它会被有效地转换为布尔值——空字符串是“假的”(即被认为是假的,即使它不是字面上的@ 987654329@),任何其他字符串都是“真实的”。这里的主要问题是运算符优先级,即== a or b
被解释为(== a) or (b)
而不是== (a or b)
的事实——尽管如果你在(a or b)
周围添加括号你不会得到你想要的结果,因为(a or b)
将评估为这些值中的一个或另一个,而不是两者的集合!以上是关于试图做一个二十一点游戏的主要内容,如果未能解决你的问题,请参考以下文章