【发布时间】:2021-11-29 20:07:29
【问题描述】:
为二十一点游戏编写代码。构建了一个“if”语句来评估拼出卡片的字符串的第一个字符,因此我可以为卡片分配一个“int”值。前任。 '[0]' 索引应该是 'k' 对于 king 并且值应该增加 10。
#face cards
if card_1_split[0] == 'k' or 'q' or 'j':
card_value += 10
elif card_1_split[0] == 'a':
#determining ace
ace_value = input('Do you want the Ace to be an 11 or 1?>>')
if ace_value == '11':
card_value += 11
else:
card_value +=1
#number cards
else:
card_value += int(card_1_split[0])
但由于某种原因,第一个 if 语句总是返回 true(即使它不是)并且卡值增加 10。
这是从牌组中随机抽取两张牌的输出
''' 2_of_hearts 8_of_clubs
2 #我打印出第一张卡片的索引[0],表明索引正确。
你的总分是:20 '''
卡值应该先增加 2,然后再增加 8,但它总是增加 10。总数是 20,因为我将上面的第一个代码块运行了两次(每张卡一个),但只包括第一张卡的代码因为它们是同一个东西。
【问题讨论】:
-
or语句通过短路工作,类似于 java 中的||。所以在java中你会在上面的if stmnt中说:if x == 'k' || 'q' (is truthy) || 'j' (is truthy),它总是评估为真,因为值q是真的。 -
在这种情况下,您可能需要 if card in ('k', 'q', 'j'):
-
看Operator precedence。
==的优先级高于or,因此card_1_split[0] == 'k'首先被解析,其结果成为两个or测试的第一个值。
标签: python if-statement boolean blackjack