函数无法返回我想要的内容

2024-09-29 02:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为游戏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)等等。你知道吗

问题是第二个值不是根据ifelif函数中的语句返回的,而是为每个迭代提供相同的值。它应该返回一个与if语句中指定的值相对应的值,但它只返回第一个if语句中给定的值。有人能解释为什么会这样或者怎么解决吗?你知道吗


Tags: orofthe代码游戏ifisvalue
2条回答

if cardNumber == 0 or 13 or 26 or 39:永远是True,所以你永远不会到达任何elif

如果你用或来写它,应该是:

if cardNumber == 0 or cardNumber ==  13 or cardNumber == 26 or cardNumber== 39:

但最好是测试membership并在if cardNumber in {0, 13 , 26, 39}中使用

使用set{0, 13 , 26, 39}测试成员身份是O(1)。你知道吗

In [6]: i = 10

In [7]: if i == 0 or 1 or 2: # if 1 evaluates to True
   ...:     print(True)
   ...:     
True

语句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 Trueif 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文本

相关问题 更多 >