2016-04-04 3 views
0

мне было интересно, если есть способ уплотнения этого кода:Python один вкладыш для обеспечения 0 <= значение <= 1?

foo = calculate() # 'calculate' is some kind of function which 
        # could return float values less than 0.0 or more than 1.0 
        # It's here only as a (hopefully) clarification 
bar = foo * 5 
if bar < 0: 
    bar = 0 
elif bar > 1: 
    bar = 1 
else: 
    pass # 'bar' has a good value within the "range" 

Я знаю, что я мог сделать bar = max(foo * 5, 0) или bar = min(foo * 5, 1), но ... Есть ли способ сделать это только в одной строке? Что-то вроде bar = ensure_between(0, foo * 5, 1) или что-то в этом роде?

Это неважно, мне просто интересно.

Спасибо заранее :-)

+2

http://stackoverflow.com/questions/4092528/how-to- clamp-an-integer-to-some-range-in-python – zch

+2

Вы имели в виду 'elif foo * 5> 1: bar = 1'? –

+0

@TigranSaluev Да, абсолютно! Хороший улов. Плохой перевод с фактического кода на foobars: D Извините (отредактировал вопрос, как и следовало сделать) – BorrajaX

ответ

3

один вкладыш с использованием мин и макс, в результате чего либо число между 0 и 1, это то, что вы ищете?

foo = max(0, min(foo, 1)) 

больше подходит для примера

bar = max(0, min(foo, 1)) 

EDIT: исправлено путем удаления списков, soon указал

+3

Нет причин для внутреннего списка, просто 'max (0, min (foo, 1))' – soon

+0

ура, исправил его – Jamtot

Смежные вопросы