Как я могу проверить, находится ли число в диапазоне, не используя операторы if?питон - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу, чтобы функция возвращала значение true, когда число попадает в заданный диапазон, например, [2,9). Моей первой мыслью было использовать цикл for, подобный этому

def in_an_interval(number):
    for i in range(2, 8):
        return print(bool(i==number))

, но она вернула только значение trueдля первого значения, 2 Есть мысли?Спасибо.

Ответы [ 5 ]

0 голосов
/ 26 сентября 2018

Или это:

def in_an_interval(number):
    return 2<number<9
0 голосов
/ 26 сентября 2018

Для целых чисел вам вряд ли понадобится пользовательская функция, достаточно встроенной range:

result = number in range(2, 8)

Хотя это, вероятно, излишне для большинства случаев использования, вы можете определить небольшой класс, который работает для чисел с плавающей запятой:

import math

class Interval:
    def __init__(self, start, end):
        assert start <= end
        self.start = start
        self.end  = end
    def __contains__(self, number):   # this dunder method lets you use 'in'
        return self.start <= number < self.end


interval = Interval(math.e, 2 * math.pi)
print((2 * math.e) in interval)
print((4 * math.e) in interval)

вывод:

True
False
0 голосов
/ 26 сентября 2018

Решение, когда ваш номер не обязательно является целым числом:

def in_an_interval(number):
    return number >= 2 and number < 9
0 голосов
/ 26 сентября 2018

Полагаю, вы могли бы использовать другое условие, если по какой-то причине вы не можете использовать «если».

def in_an_interval(number):
    while number >=2 and number < 9:
        return True
    return False
0 голосов
/ 26 сентября 2018

Если вы используете Python 3 и работаете с целыми числами, вы можете напрямую использовать оператор in для range объекта:

def in_an_interval(number):
    return number in range(2, 9)

Это очень быстро (простой математический расчет), потому чтоУ range объектов есть метод .__contains__.Также обратите внимание, что range не включает в себя конец, то есть range(2, 8) на самом деле здесь «2, 3, 4, 5, 6, 7», поэтому я изменил его на range(2, 9) для вас.

Если вы на самом деле имеете в виду «числа», включая числа с плавающей запятой, то вам лучше использовать операторы сравнения:

def in_an_interval_float(number):
    return 2 <= number < 9

Нет шансов проверить произвольное число с плавающей запятой с помощью range, потому что это неправильноинструмент для этой работы.


Ваш текущий код неверен, потому что он возвращается из всей функции на первой итерации цикла for:

def in_an_interval(number):
    for i in range(2, 8):
        return print(bool(i==number))

Возможно, вы хотитевозвращать только при обнаружении и возвращать False, если не найдено:

def in_an_interval(number):
    for i in range(2, 8):
        if i == number:
            return True
    return False
...