有没有一种方法可以简化条件条件(python)

时间:2020-03-26 11:25:08

标签: python while-loop conditional-statements

我一直在寻找一种简化方法

while bluePoints < BOn // 2 + 1 and redPoints < BOn // 2 + 1:

我知道如何使用字符串和列表进行简化,但不能使用整数

2 个答案:

答案 0 :(得分:0)

您应该阐明“简化条件时的方法”的含义。可以用多种方式解释这种情况,而您要寻找的答案可能取决于其余代码中发生的情况。话虽这么说,这里有一些替代条件,应该导致相同的布尔值:

def bon_calc(bon : int) -> int:
    return bon // 2 + 1

def red_blu_check(red_p : int, blu_p : int, bon : int) -> bool:
    return blu_p < bon // 2 + 1 and red_p < bon // 2 + 1

bluePoints = 1
redPoints = 1
BOn = 2

# Your orignal function
con1 = bluePoints < BOn // 2 + 1 and redPoints < BOn // 2 + 1

# Using all instead of and
con2 = all([bluePoints < BOn // 2 + 1, redPoints < BOn // 2 + 1])

# Using custom function bon_calc
con3 = bluePoints < bon_calc(BOn) and redPoints < bon_calc(BOn)

# Using custom function red_blu_check
con4 = red_blu_check(redPoints, bluePoints, BOn)

assert con1 == con2 == con3 == con4

example in python tutor

答案 1 :(得分:0)

像其他受访者一样,我不确定我简化是什么意思。我认为您不喜欢

中的重复
bluePoints < BOn // 2 + 1 and redPoints < BOn // 2 + 1

如果有问题,可以使用辅助变量来存储重复计算的结果

limit = BOn // 2 + 1
while bluePoints < limit and redPoints < limit:

有几种方法可以将while子句中的布尔条件从两个减少为一个(max()all()让人联想到),但我想不到这是对and的很大改进。 Python中的布尔运算符是快捷键运算符,因此无论如何,只有在第一个条件为false时,才会测试第二个条件。