Python: если более чем одна из трех вещей верна, вернуть false - PullRequest
9 голосов
/ 14 июля 2011

Я пишу модель django, которая позволяет моему сайту иметь купоны.

Купоны могут быть трех типов: ваучер на пожизненный счет, ваучер на определенный период месяцев, ваучер на определенное количество долларов.

Для простоты я разрешаю только купонам иметь одно из трех возможных значений (т. Е. Ваучер не может быть рассчитан на 10 и 5 месяцев). Но я хочу проверить, когда купон сохраняется, чтобы убедиться, что это правило верно.

В настоящее время у меня есть:

true_count = 0
if self.months:
    true_count += 1
if self.dollars:
    true_count += 1
if self.lifetime:
    true_count += 1    

if true_count > 1:
    raise ValueError("Coupon can be valid for only one of: months, lifetime, or dollars")  

Я знаю, что есть лучший способ сделать это, но я его не вижу (назовите это блоком кодера).

Помощь очень ценится.

В случае, если это имеет значение, три типа int, int и bool

months = models.IntegerField(default=0)
cents = models.IntegerField(default=0)
#dollars = models.FloatField(default=0.00)
#dollars replaced with integer cents per advice of group
lifetime = models.BooleanField(default=False)

Ответы [ 11 ]

0 голосов
/ 14 июля 2011

bool является подклассом int, потому что в Python изначально отсутствовал bool, с использованием int для логического значения, поэтому:

if self.months + self.dollars + self.lifetime > 1:
    ...

Это работает, потому что False == 0 и True == 1оба верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...