我正在尝试编写一个简单的BlackJack代码,以尝试了解如何使用if,elif,else和Blocking。问题如下:
#BLACKJACK:给定介于1和11之间的三个整数,如果它们的总和小于或等于21,则返回它们的总和。如果它们的总和超过21并且为11,则将总和减少10。最后,如果总和(即使经过调整)也超过21,则返回'BUST'
我写了这段代码:
a = int(input("a"))
b = int(input("b"))
c = int(input("c"))
sum = a + b + c
total = 0
if a in range(1, 12) and b in range(1, 12) and c in range(1, 12):
if sum <= 21:
print(sum)
elif (sum > 21) and (a or b or c == 11):
sum = sum - 10
print(sum)
if sum > 21:
print("Busted")
else:
print("One of which ain't in the range; range should be between 1-11")
我应该测试以下输入的结果
a b c : 5, 6, 7 --> 18
a b c : 9, 9, 9 --> "BUSTED"
a b c : 9, 9, 11. --> 19
对于第一个和最后一个,它给了我正确的结果。但是第二个给了我17个错误。由于某种原因,代码正在读取它> 21,并且变量之一是11。这不正确,因为所有的都是9
此外,我不确定此行中的条件是否正确
elif (sum > 21) and (a or b or c == 11):
最后一件事是写此行的更好/更短的方法:
if a in range(1, 12) and b in range(1, 12) and c in range(1, 12):
我尝试将其写为
if (a, b, c) in range(1,12):
但是,我相信python会将其读取为元组,应该是这种情况。
我完全是个菜鸟,我知道..但是尽我所能来学习大家:)
谢谢
or
和==
的优先级不是您的想法。在此表达式中:
(a or b or c == 11)
c == 11
首先被求值,产生布尔值。这就是表达式(a or b or True)
或(a or b or False)
。如果要测试a
,b
或c
中的任何一个是否为11,请执行以下操作:
11 in (a, b, c)