hello,大家好,我是虞元坚律师。好久不写文章,今天给大家介绍Python法律实务的一个基础应用——司法计算器的制作。
司法计算是一门律师基本功,尤其对诉讼律师来说,更是经常遇到,例如诉讼费、律师费、利息、违约金的计算等等。网络上,有各种各样的司法计算器工具可以供大家直接使用,比如针对2020年利息计算的新规定,律师云助理小程序就给大家提供了非常详细的LPR计算器功能。可是呢,第三方的计算器有好有坏,有时候我们还有自己的个性化需求,比如,市场上习惯将利息计算的天数,计头不计尾,但是可能我们有的律师或者法务根据客户的需要,需要又算头又算尾,又或者有自己个性化的违约金公式。如果每次都靠自己手算或者摁计算机,未免耗时又枯燥。既然学习了Python,我们不如利用Python来制作自己的计算器。接下来,我就以LPR计算器为例子,给大家介绍通过Python来编写LPR计算器小软件。重要的不是学习LPR计算器的开发,重要的是希望大家通过这篇文章,举一反三,能够自己编写各式各样的个性计算工具。话不多说,我们进入正题。
知识点归纳:
- 列表与字典的嵌套数据结构
- 日期与时间戳的转换
- 列表的循环
第一步:整理业务逻辑
其实编程只是一种将想法程序化的过程,最重要的是业务逻辑的设计,如果这个业务逻辑没有理顺的话,可能后面就走不通了,考虑的时候要将可能的情形尽量考虑全面。其实也不难,这里直接把方案告诉大家,如果有错误,欢迎大家指正:
- 开始日期在2019年8月20日之前的,以过去同期同档利息的计算方式来计算(本文不做介绍)。
- 019年8月20日(含20日当日)后的,每个月20号(不一定准确是20号)LPR更新当后(含当日),就取最新的LPR值,未更新之前,取更新上一期的lpr值。
- 我们需要存储所有的LPR档期,并根据我们需要的日期段(比如:2019-10-10 TO 2020-02-20),调取相关的LPR档期进行计算。
第二步:建立自己的LPR数据库或存储文件
LPR跟之前的同期同档利息有一个不同点,就是LPR的利息央行每个月20号左右会更新,因此,需要在每月的20号留意央行的信息,并将数值保存下来。保存的方案有很多种,笔者是通过爬虫技术采集后放在数据库中,在需要的时候调用。对初学者来说,还构建数据库难度相对较高,可以直接保存在py文件中保存,在需要的时候以文本方式打开调用,或者直接放在Python文件的变量中。以下我就直接将2019-08-20起到2020-02-20止的所有的lpr利息放在lpr_lib这个变量中使用。可以看出,这是一个列表嵌套字典的数据类型。
lpr_lib
上面的“timeStamp”就是日期的时间戳,所谓时间戳,就是从1970年01月01日00时00分00秒计算到现在的秒数或者毫秒数。这里有个知识点,就是日期与时间戳的转换,你可以选择百度时间戳转换工具直接转换,也可以直接使用python将格式化的日期转换成时间戳,函数略微麻烦,没必要硬记,知道怎么调用就行了:
import
日期转换成时间戳的目的,主要是为了比较日期大小或计算日期间隔,数值越大,日期越后。
第三步:给需要使用的变量赋值,变量的命名尽量与实际的含义有关。
capital
为了表述方便,下面开始日期、截至日期等术语,我就直接以变量名如startDate、endDate来代替。
第四步:获取相关日期内相关的lpr利息档次
为了找到我们需要的LPR档期,我们需要考虑出现的可能情况,有时候我们在编程中可以画一些简单的逻辑图来做辅助,有助于我们考虑尽可能多的情况:
LPR_Update表示LPR档期的更新日期
从上图中,我们可以看出,LPR_Update1是一定需要且存在的,LPR_Update2有可能存在,也可能不存在。比如现在是2020年03月02日, StartDate我也取该日,那么一直到当月20日左右新发布LPR之前,我们都是沿用的2月份的LPR利息。
上图中第一个LPR_Update1如何获取呢,如何保证在startDate之前的lpr档期正好是前一个而不是前前个,甚至更遥远的呢,其实只要计算两者时间戳之差,如果在一个月以内的,就是最近的一期:
#逻辑表述,非使用的代码
第二个LPR_Update2 就更容易了:
#逻辑表述,非使用的代码
上述两个逻辑合并在一起,本例中具体用python语言怎么表达呢:
mylpr
这里用到了列表循环,将存储在lpr_lib这个列表变量中符合我们要求的LPR档期全都保存到了一个新的列表变量mylpr当中。以上就完成了,LPR计算器工作的一半了,接下来,就要进入到具体的计算场景当中了,实务当中,各地的法院计算标准不一,有些地方以平均LPR值计算,有些地方以最后有效的LPR值作为计算,也有些地方可能以各个LPR来分段计算(笔者尚未遇到过),笔者在微信小程序"律师云助理"和网站中都已做成现成的计算器工具,欢迎体验。
以上完整的代码,整理起来就是:
import
今天先写到这里,下半部分,我将择日奉上。另外我的新书筹备中,感兴趣的朋友就关注我吧。