Как я могу исправить эту функцию без использования операторов по модулю? - PullRequest
0 голосов
/ 03 февраля 2020

В настоящее время я написал функцию, которая принимает нечетные числа как истинные, а четные числа как ложные без использования оператора по модулю. Когда я передаю функцию в процессор кода, я получаю сообщение об ошибке: AssertionError: True не false: должен возвращать False, когда число чётно . Я не понимаю этого, потому что код работает, когда я подключаю практически любое нечетное или четное значение (независимо от знака) к моей IDE. Вот код:

def is_odd_without_modulo(num):
    if num > 0:
        while num > 0: 
            num -= 2 
            if num == 0: 
                return False
    elif num < 0: 
        while num < 0: 
            num += 2 
            if num == 0:
                return False
    return True

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Есть несколько способов проверить, является ли число четным или нечетным:

Например:

# look at last bit
def is_odd_without_modulo(num): return num&1 == 1

# use an integer division (variant 1)
def is_odd_without_modulo(num): return num//2 != (num+1)//2

# use an integer division (variant 2)
def is_odd_without_modulo(num): return num//2*2 != num

# use an integer division (variant 3)
def is_odd_without_modulo(num): return num//2*2 - num < 0

# a recursive variant of your -2 approach
def is_odd_without_modulo(num):
    if num > 1  : return is_odd_without_modulo(num-2)
    if num < -1 : return is_odd_without_modulo(num+2)
    return num != 0

# or an iterative variant of it
def is_odd_without_modulo(num):
    if num < 0 : num = -num
    while num>1: num -= 2
    return num == 1

# an unconventional solution using strings
def is_odd_without_modulo(num): return str(num)[-1] in "13579"
0 голосов
/ 03 февраля 2020

Просто мысль, вам, возможно, не хватает структуры l oop. Другое дело, как будет обрабатываться ввод, когда вы выполняете эту функцию, например, встроенные жестко запрограммированные значения или пользовательский ввод и т. Д. c ...

И когда вы вводите нечетное число, такое как 5, возможно, стоит рассмотреть добавление оператора else после внутреннего оператора if в обоих случаях, поскольку это вернет True для нечетного числа. Затем вы можете удалить строку:

   return True 

в конце.

Надеюсь, это поможет.

...