如何为if语句编写更好的代码?

问题描述 投票:0回答:1

我正在尝试编写一个简单的BlackJack代码,以尝试了解如何使用if,elif,else和Blocking。问题如下:

#BLACKJACK:给定介于1和11之间的三个整数,如果它们的总和小于或等于21,则返回它们的总和。如果它们的总和超过21并且为11,则将总和减少10。最后,如果总和(即使经过调整)也超过21,则返回'BUST'

我写了这段代码:

a = int(input("a"))
b = int(input("b"))
c = int(input("c"))
sum = a + b + c
total = 0

if a in range(1, 12) and b in range(1, 12) and c in range(1, 12):
    if sum <= 21:
        print(sum)
    elif (sum > 21) and (a or b or c == 11):
        sum = sum - 10
        print(sum)
        if sum > 21:
            print("Busted")

else:
    print("One of which ain't in the range; range should be between 1-11")

我应该测试以下输入的结果

a b c : 5, 6, 7 --> 18
a b c : 9, 9, 9 --> "BUSTED"
a b c : 9, 9, 11. --> 19

对于第一个和最后一个,它给了我正确的结果。但是第二个给了我17个错误。由于某种原因,代码正在读取它> 21,并且变量之一是11。这不正确,因为所有的都是9

此外,我不确定此行中的条件是否正确

elif (sum > 21) and (a or b or c == 11):

最后一件事是写此行的更好/更短的方法:

if a in range(1, 12) and b in range(1, 12) and c in range(1, 12):

我尝试将其写为

if (a, b, c) in range(1,12): 

但是,我相信python会将其读取为元组,应该是这种情况。

我完全是个菜鸟,我知道..但是尽我所能来学习大家:)

谢谢

python conditional-statements
1个回答
0
投票

or==的优先级不是您的想法。在此表达式中:

(a or b or c == 11)

c == 11首先被求值,产生布尔值。这就是表达式(a or b or True)(a or b or False)。如果要测试abc中的任何一个是否为11,请执行以下操作:

11 in (a, b, c)
© www.soinside.com 2019 - 2024. All rights reserved.