我有以下代码。从根本上讲,它是一个功能强大的功能。它应返回的3个数字之和小于21。如果较大,并且它具有11作为数字之一,则应从中减去10。如果扣除后的总和仍大于21,则应返回“ BUST”。在训练中,José通过将小数部分的总和小于或等于31来解决了最后一部分,这当然是将“ BUST”放入另一个“小子”而不嵌套在小数点中的一种好方法。 但是,我想通过将“ BUST”嵌套到Elif中来实现自己的目标。我猜到目前为止还没有运气,由于回报,我以后再也不能提出任何条件了。
你们有什么解决方案可以使“ BUST”成为elif的子条件?这是我的代码,不起作用。
def blackjack(a,b,c):
added = sum([a,b,c])
if added <= 21:
return added
elif added > 21 and 11 in [a,b,c]:
return added -10
busted = added -10
if busted > 21:
return 'BUST'
如果被调用,它应该给出以下内容:
blackjack(5,6,7) --> 18
blackjack(9,9,9) --> 'BUST'
blackjack(9,9,11) --> 19
答案 0 :(得分:0)
def blackjack(a,b,c):
added = sum([a,b,c])
if added <= 21:
return added
elif added > 21 and 11 in [a,b,c]:
busted = added -10
if busted > 21:
return 'BUST'
return busted
如果busted > 21
是true
,则返回'BUST'
,否则返回下一条语句并返回busted
。我不完全理解为什么您需要另一种方法,但是如果您想根据条件返回两个不同的东西。 if/elif
或if/else
块是必须的。
答案 1 :(得分:0)
您可以在返回时使用三元表达式:
def blackjack(a,b,c):
added = sum([a,b,c])
if added <= 21:
return added
elif added > 21 and 11 in [a,b,c]:
return (added-10) if (added-10 <= 21) else "BUST-11"
return "BUST"
print( blackjack(5,6,7) )
print( blackjack(9,9,9) )
print( blackjack(9,9,11) )
print( blackjack(10,11,11) )
输出:
18
BUST
19
BUST-11
请参见Does Python have a ternary conditional operator?
无论如何,您仍然需要下落槽"BUST"
(对于其中> 21 w / o 11而言)-因此else
解决方案更干净。