python条件分支简化

文章介绍了如何在编写复杂的业务逻辑中,通过引入Python的bisect模块简化if-else语句,以及使用扁平化函数和函数封装来提高代码可读性和维护性,以电影评分和活动逻辑为例进行说明。
摘要由CSDN通过智能技术生成

当在编写复杂的业务逻辑需要大量嵌套if-else语句时,会导致代码可读性很差,并且难以维护。

使用bisect简化表达式:

比如我们需要编写一个电影评分的判断,小于6分的评分为D,6-7评分为C,7-8评分为B,8-8.5评分为A,8.5以上评分为S。我们可以使用python内置的二分查找包

import bisect

class Movie:
    """电影对象数据类"""
    def __init__(self, name, year, rating):
        self.name = name
        self.year = year
        self.rating = rating


    @property
    def rank(self):
        break_points = (6, 7, 8, 8.5)
        grades = ('D', 'C', 'B', 'A', 'S')
        index = bisect.bisect(break_points, float(self.rating))
        return grades[index]

使用两个元组。只需要将对应的区间与评分对齐即可,这时python会自动完成相应区间查找,并返回对应的评分。

使用提前返回扁平化函数:

before

def buy_fruit(nerd, store):
    # 活动:如果活动还在开放,并且活动剩余名额大于 10,为所有性别为女性,或者级别大于
    # 3 的活跃用户发放 10000 个金币
    if (
        activity.is_active
        and activity.remaining > 10
        and user.is_active
        and (user.sex == 'female' or user.level > 3)
    ):
        user.add_coins(10000)
        return
    

after

def buy_fruit(nerd, store):
    # 活动:如果活动还在开放,并且活动剩余名额大于 10,为所有性别为女性,或者级别大于
    # 3 的活跃用户发放 10000 个金币
    if not store.is_open():
        raise MadAtNoFruit("store is closed!")
    if not store.has_stocks("apple"):
        raise MadAtNoFruit("no apple in store!")
    if nerd.can_afford(store.price("apple", amount=1)):
        nerd.buy(store, "apple, amount=1")
        return
    else:
        nerd.go_home_and_get_money()
        return buy_fruit(nerd, store)

我们也可以使用函数封装,复用代码:

    
    if activity.allow_new_user() and user.match_activity_condition():
        user.add_coins(10000)
        return

  • 18
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值