我对21点练习题<=31部分感到困惑

2024-04-25 19:47:49 发布

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

实际问题之一是编写一个函数,给定3个介于1和11之间的整数,如果它们的和小于或等于21,则返回它们的和。如果他们的总数超过21,并且有一个11,那么将总数减少10。最后,如果总和(即使在调整后)超过21,则返回"BUST"

我不明白他们为什么拿走<;=31在elif语句中

def blackjack(a,b,c):
      if sum([a,b,c]) <= 21:
           return sum([a,b,c])
     elif 11 in [a,b,c] and sum([a,b,c]) <= 31:
           return sum([a,b,c])-10
     else:
           return 'BUST'

     return "BUST"

Tags: and函数inltreturnifdef整数
2条回答

它正在处理Aces可能值1或11的情况。当总数少于31时,可以减少。否则,你无论如何都会破产

考虑以下情况:

A、9、10

如果A是11,那么你将是半身像,但是你可以使用值1,所以在这种情况下,总和将是20

A、10、10

如果A是11,那么你将是半身像,但是你可以使用值1,所以在这种情况下,总和将是21

A,A,A

如果A是11,那么你就破产了。这里的问题是,您的逻辑不是同时处理多个ACE

如果总数是32,那么减少10将给玩家留下22,这仍然是半身像。只有当分数小于等于31分时,减少才有用

(顺便说一句,这种逻辑不能正确处理多张A。如果有两张A,则两张A都可以减少10张,而不仅仅是其中一张。如果玩一副以上的牌,三张或四张A甚至更多的A也是如此。)

相关问题 更多 >