我正在为游戏21点编写一个代码,其中输出将打印一个0-51之间每个值的列表,后跟游戏21点中相应的值。我的代码如下所示:
#cards.py
def cardInfo(cardNumber):
if cardNumber == 0 or 13 or 26 or 39: #if the card is an ace
bjValue = 11 #the value is 11 of whatever suit
elif 1 <= cardNumber <= 8: #if card is 2-9
bjValue = cardNumber + 1 #the value is itself of clubs
elif 9 <= cardNumber <= 12: #if card is 10-king
bjValue = 10 #value is 10 of clubs
elif 14 <= cardNumber <= 21: #the same as above for the rest
bjValue = cardNumber - 12 #with respect to higher suits
elif 22 <= cardNumber <= 25:
bjValue = 10
elif 27 <= cardNumber <= 34:
bjValue = cardNumber - 25
elif 35 <= cardNumber <= 38:
bjValue = 10
elif 40 <= cardNumber <= 47:
bjValue = cardNumber - 38
elif 48 <= cardNumber <= 51:
bjValue = 10
total = (cardNumber, bjValue)
return total
def main():
for cardValue in range(0,52):
stuff = cardInfo(cardValue)
print (stuff)
main()
当我运行这个程序时,它会按预期输出第一个数字,并给出(0,11)
、(1,11)
等等。你知道吗
问题是第二个值不是根据if
和elif
函数中的语句返回的,而是为每个迭代提供相同的值。它应该返回一个与if语句中指定的值相对应的值,但它只返回第一个if语句中给定的值。有人能解释为什么会这样或者怎么解决吗?你知道吗
if cardNumber == 0 or 13 or 26 or 39:
永远是True
,所以你永远不会到达任何elif
如果你用或来写它,应该是:
但最好是测试membership并在
if cardNumber in {0, 13 , 26, 39}
中使用使用set
{0, 13 , 26, 39}
测试成员身份是O(1)
。你知道吗语句
if cardNumber == 0 or 13 or 26 or 39
等价于if (cardNumber == 0) or (13) or (26) or (39)
,其中paren放在逻辑值周围。你知道吗在Python中,与空列表、字符串、字典、0等不同的所有内容都被认为是
True
。因此,您的if cardNumber == 0 or 13 or 26 or 39
等价于if cardNumber == 0 or True or True or True
或if True
。你知道吗也许您想写
if cardNumber in [0, 13, 26, 39]
(或者,等效但略快的if cardNumber in {0, 13, 26, 39}
)。或者,较长的if cardNumber == 0 or cardNumber == 13 or cardNumber == 26 or cardNumber = 39
文本相关问题 更多 >
编程相关推荐