如果在elif中,我有什么方法可以使此代码与嵌套一起工作?

时间:2019-03-30 16:55:50

标签: python

我有以下代码。从根本上讲,它是一个功能强大的功能。它应返回的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

2 个答案:

答案 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 > 21true,则返回'BUST',否则返回下一条语句并返回busted。我不完全理解为什么您需要另一种方法,但是如果您想根据条件返回两个不同的东西。 if/elifif/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解决方案更干净。