Есть ли способ упростить это, пока условие (python) - PullRequest
0 голосов
/ 26 марта 2020

Я искал способ упростить это

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

Я знаю, как упростить с помощью строк и списков, но не с помощью целых чисел

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Как и другие респонденты, я не уверен, что знаю, что вы подразумеваете под упрощением . Я так понимаю, вам не нравится повторение в

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

Если в этом проблема, вы можете использовать вспомогательную переменную для хранения результата повторного вычисления

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

Есть пара способов уменьшить логические условия в предложении while с двух до одного (на ум приходят max() и all()), но я не могу придумать тот, который является значительным улучшением and , Булевы операторы в Python являются операторами быстрого доступа, поэтому второе условие в любом случае будет проверяться только в том случае, если первое условие ложно.

0 голосов
/ 26 марта 2020

Вы должны уточнить, что вы подразумеваете под «способом упростить это условие». Это можно интерпретировать несколькими способами, и ответ, который вы ищете, может зависеть от того, что происходит в остальной части вашего кода. Это, как говорится, здесь несколько альтернативных условий, которые должны привести к тому же bool:

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

пример в python tutor

...