Несколько логических тестов в операторе IF с функцией all ()

def common(num):
    #returns true if num is divisible by all the 'i' integers

    if all(num%divisor==0 for divisor in (1,10)):
        return True
    else:
        return False

print(common(2520)) --> True
print(common(10))   --> True
print(common(17))   --> False

Привет всем, эта функция должна определить, является ли «число» общим кратным всех чисел «i». Я не могу понять, почему 10 возвращает True? Разве «all()» не означает, что каждый тест должен быть истинным, чтобы все было истинным? Я использую это неправильно? Любые лучшие функции, которые я должен использовать? Спасибо за любые идеи.

-wT


person watchTower    schedule 21.07.2016    source источник
comment
Единственными значениями, привязанными к divisor, являются 1 и 10. Только эти два. Непонятно, что вы намеревались сделать. Может быть, вы хотели, например, range(1, 10)? Не могу угадать.   -  person Tim Peters    schedule 21.07.2016
comment
Или, может быть, range(1, 11)   -  person chapelo    schedule 21.07.2016
comment
К вашему сведению, если вы обнаружите, что делаете if condition: return True; else: return False, вы можете просто сделать return condition. (В некоторых ситуациях Python будет преобразовывать вещи в логические значения для оператора if, поэтому, если вы хотите быть очень усердным, сделайте return bool(condition).)   -  person detly    schedule 21.07.2016
comment
Кстати, if/else не обязательно. Просто верните результат вызова all().   -  person Klaus D.    schedule 21.07.2016


Ответы (1)


Способ найти себя:

num=10
for divisor in (1,10):
    print(divisor, num%divisor , num%divisor==0)

дает

1 0 True
10 0 True

и дает понять, что (1,10) — это кортеж, а вы, конечно, хотели range(1,10).

Обратите внимание, что функция common() имеет те же возвращаемые значения, что и

 all(num%divisor==0 for divisor in range(1,10))

то вы можете определить его как:

def common(num):
    return all(num%divisor==0 for divisor in range(1,10))
person eyquem    schedule 21.07.2016
comment
@Джон Хорошо. Я только что проголосовал за ваш самый популярный ответ в качестве благодарности - person eyquem; 21.07.2016
comment
Спасибо, Джон! Я новичок в программировании/питоне, поэтому я не знал, что такое кортеж. И я понимаю, что вы имеете в виду, говоря об отказе от оператора if. Ты жжешь! - person watchTower; 23.07.2016