实际问题之一是编写一个函数,给定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"
它正在处理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也是如此。)
相关问题 更多 >
编程相关推荐