当前位置: 首页 > news >正文

分销网站建设邯郸服务

分销网站建设,邯郸服务,中国建设银行遵义市分行网站,零基础学ui设计好学吗1. 场景描述 “月光族”是指没到下一个发薪日,工资就被全部花光的一群人。这个称谓是一个没有贬义的中性词。“月光族”通常是有知识有文化、有固定的工作收入,秉持着乐观豁达的生活态度,力争做到量入为出,挣多少用多少。他/她们喜…

1. 场景描述

在这里插入图片描述

“月光族”是指没到下一个发薪日,工资就被全部花光的一群人。这个称谓是一个没有贬义的中性词。“月光族”通常是有知识有文化、有固定的工作收入,秉持着乐观豁达的生活态度,力争做到量入为出,挣多少用多少。他/她们喜欢消费,但不疯狂。偶尔也有因为房贷、车贷或者房租等压力,造成收支不平衡,使用信用卡透支的状况,显然“月光族”是银行信用卡的理想客群。“月光族”时常盘算着还有几天发工资,何时还上信用卡透支款项,总是期待着发薪日的早点到来。
下面我们就来编写一段Python代码,帮助“月光族”计算距离下一个发薪日还有多少天,信用卡透支消费的还款金额的计算问题。


2. 编程思路

编写这个程序还是有挑战性的,它可能比你想象的要复杂得多。因为在程序设计中你必须对“闰年和闰月,月大和月小”的特殊情况进行处理,这种特殊情形导致每个月包含的天数不同。如果你要自己实现这些功能,还是有一定的编码工作量。许多程序设计语言在日期处理上有点复杂,幸运的是Python已经为我们考虑到了特殊日期的处理!我们可以使用Python的标准库模块calendar和datetime来处理以上“闰年闰月和月大月小”的问题。
编程的基本思路是这样的:
如果今天日期在发薪日之前,计算今天到发薪日之间的天数;
如果今天日期等于发薪日,今天就是发薪日;
如果今天日期在发薪日之后,计算今天到下一个月的发薪日之间的天数。由于涉及跨越两个月,需要处理“闰年闰月和月大月小”的问题。
编程逻辑简单清晰,下面进入代码实现部分。


3. 代码实现

"""next_payday.py : 月光族的期待
"""
from calendar import monthrange   # ①
from datetime import datetime, timedeltadef calc_days(payday=15):"""功能:计算距离发薪日的天数"""today = datetime.now()if today.day <= payday:return payday-today.dayelse:last_day = monthrange(today.year, today.month)[1]   # ②paydt = datetime(today.year, today.month, last_day) + timedelta(days=payday)   # ③return (paydt.date()-today.date()).daysdef print_days(payday=15):"""打印距离发薪日的天数"""print('距离发薪日天数'.center(15, '-'))today = datetime.now()print('当前日期:' + today.strftime('%Y-%m-%d'))   # ④print('发 薪 日:' + '每月'+str(payday) + '号')days = calc_days(payday)if days:print(f'离发薪日:{days}天')else:print('今天发工资啦!')def main():print_days(payday=1)   # ⑤if __name__ == '__main__':main()

主要的代码说明如下:
语句①导入calendar和datetime模块中的相关函数。
语句②获取指定日期所在月份的最大天数。在这里我们使用了Python的calendar模块中的monthrange()函数,调用它可以获取指定月份的天数。需要特别强调的是monthrange()函数本身实现了对闰年润月和月大月小的自动处理。
语句③计算下一个发薪日的日期,将自动处理闰年润月和月大月小的特殊情况。
语句④首先使用datetime.strftime()将日期转换为“年-月-日”格式字符串,然后再打印输出。
语句⑤在主程序main()中验证程序功能。假如发薪日是每月1号,计算今天(2022-12-3)距离发薪日的天数。


4. 执行效果

结果如下所示:
(cases) D:\cases\月光族的期待>python next_payday.py
----距离发薪日天数----
当前日期:2022-12-03
发 薪 日:每月1号
离发薪日:29天

(cases) D:\cases\月光族的期待>
需要注意的是,如果你执行这段程序时所看到的显示结果可能与以上结果不同,这是因为你执行程序时的系统日期不同而已,带来处理结果的差异,结果均是正确的。


5. 扩展场景

接下来,我们来解决第二个问题,计算信用卡透支还款额的计算问题。

5.1 弄清几个术语

信用卡业务有几个术语需要我们必须理解,方能正确地编写程序代码。

1. 还款期数

信用卡是按月还款,每月是1期,一年共有12期。

2. 账单日

账单日是发卡行每月定期对客户的信用卡账户当前发生的各项交易费用进行汇总结算,计算出客户当前的总欠款金额和最小还款额后为客户发送对账单的日期。例如:浦发银行账单日可以选择每月的1号、3号、8号、14、15、16、17、19、20、22、23、25和26号等。

3. 还款日

还款日是发卡行要求持卡人偿还应付款项的最后期限。实际上,信用卡还款日是免息还款的最后一天,在这之后还款就是逾期了,需要缴纳利息。例如:浦发银行的信用卡还款日就是账单日后的第20天。

4. 利息

目前各信用卡发卡行的逾期利率均是每天万分之五。凡是超过免息期的欠款均要按照逾期利率和实际逾期天数计付利息。
至此有了以上知识,我们可以开始着手编写信用卡透支还款程序了。

5.2 编写程序

"""card_payback.py : 信用卡还款
"""
from datetime import datetime, timedeltaBILL_DAY = 8    # 账单日
INTEREST_RATE = 0.0005    # 逾期利率
BILLS = 'bills.txt'   # 账单文件def get_interest(payback_dt):"""功能:计算信用卡欠款利息参数:payback_dt 计划还款日期"""today = datetime.now()bill_dt = datetime(today.year, today.month, BILL_DAY)   # ① last_dt = bill_dt + timedelta(days=20)   # ② payback_dt = datetime.strptime(payback_dt, '%Y-%m-%d')  # ③amount = get_amount()if payback_dt.date() < last_dt.date():   # ④interest = 0else:days = (payback_dt-last_dt).daysinterest = INTEREST_RATE * amount * days   # ⑤return round(interest, 2)def print_result(payback_dt):"""功能:打印还款金额(本金和利息)参数:payback_dt 计划还款日期"""today = datetime.now()amount = get_amount()interest = get_interest(payback_dt)print('信用卡还款'.center(20, '-'))print('当前日期:', today.strftime('%Y-%m-%d'))print('计划还款:', payback_dt)print('欠款金额:', amount)print('还款利息:', interest)print('合计金额:', amount+interest)def get_amount():"""功能:获取信用卡当期欠款总额"""today = datetime.now()bill_dt = datetime(today.year, today.month, BILL_DAY)    last_dt = datetime(today.year, today.month, 1) - timedelta(days=1)   # ⑥last_bill_dt = datetime(last_dt.year, last_dt.month, BILL_DAY)  # ⑦with open(BILLS) as f:lines = f.readlines()amount = 0for line in lines:dt, money = line.split()dt = datetime.strptime(dt, '%Y-%m-%d')if last_bill_dt.date() < dt.date() <= bill_dt.date():   # ⑧amount += float(money)return amountdef main():payback_dt = '2022-12-30'print_result(payback_dt)if __name__ == '__main__':main()

程序中重要语句解释如下:
语句①计算当前日期所在月份的账单日期(当期账单日或本期账单日);
语句②计算当期还款日期,也就是免息期最后1天;
语句③将字符串格式的计划还款日期转换为datetime类型的日期;
语句④判断免息条件是否成立;
语句⑤按照逾期实际天数和逾期利率计算欠款的逾期利息;
语句⑥上月最后一天的日期,这里隐含着对闰年闰月和月大月小的自动处理;
语句⑦获取上一期的账单日(上期账单日)
语句⑧判断是否本期消费账单

5.3 执行程序

下面程序演示场景是:计划还款日期2022-12-30,账单存放在bills.txt文件中,其内容和格式如下:
2022-11-15 7800.25
2022-11-19 2500
2022-11-8 1000
2022-11-3 2000
2022-10-23 534.59
2022-10-5 1000
这是一个文本文件格式。文件每一行代表一笔信用卡消费,包含日期和金额,之间使用空格分隔。
D:\cases\月光族的期待>python card_payback.py
-------信用卡还款--------
当前日期: 2022-12-03
计划还款: 2022-12-30
欠款金额: 10300.25
还款利息: 10.3
合计金额: 10310.55

D:\cases\月光族的期待>
经执行程序结果表明,程序正确地计算了信用卡还款的欠款金额和透支利息,达到了设计的目标。但是有一点需要在此强调,当你执行这段程序时,可能会有不同的显示结果,其原因是账单文件bills.txt中没有当期信用卡消费明细数据。解决办法是在bills.txt账单文件中加入当期信用卡消费数据,再次执行程序就可以显示相关信用卡还款信息了。

5.4 功能完善

我们拟增强两个方面的功能:
1)增加打印信用卡当期的每一笔消费明细,格式如下:
-------信用卡还款--------
当前日期: 2022-12-03
计划还款: 2022-12-30
消费明细:
2022-11-15 7800.25
2022-11-19 2500


欠款金额: 10300.25
还款利息: 10.3
合计金额: 10310.55
2)从程序命令行中获取参数,提取计划还款日期。命令行执行方式如下:
python card_payback.py 2022-12-30
有兴趣的读者可以自行完成以上程序的功能优化。

http://www.dtcms.com/a/614128.html

相关文章:

  • 前端性能优化指标,最大内容绘制
  • wordpress路由插件开发搜索排名优化
  • Kotlin协程Flow任务流buffer缓冲批量任务,筛选批量中最高优先级任务运行(2)
  • 口碑营销的作用成都抖音seo
  • 12.3 合规保障:GDPR与中国法规的落地实践
  • 怡清源企业网站建设可行性分析最牛餐饮营销手段
  • 门户网站设计要点怎样优化网络速度
  • 《Unity游戏多平台上架风险管控:预研适配与全流程实战指南》
  • 跨域问题解决方案汇总
  • 30-ESP32-S3开发
  • C语言编译爱心 | 深入浅出解析C语言编译过程及技巧
  • SPRING_CACHE_REDIS_技术总结
  • 【LeetCode热题100(67/100)】有效的括号
  • 网站建设公司彩铃织梦后台做的网站怎么绑定域名
  • 汇编语言编译器的作用 | 理解汇编编译过程与程序优化技巧
  • 网站备案每年一次吗网站建设实训的方法
  • 怎样查看网站的权重做微信网站公司哪家好
  • Typora picgo-core gitee图片上传设置
  • 哪个网站发布招聘信息免费淮安网站建设公司电话
  • 企业网站优化做法模拟网站效果
  • 第29集科立分板机:降本增效新选择科立自动化分板机赋能电子企业高质量发展
  • Revit 200+新功能之“构件赋房间属性”,解决特殊族提取房间错乱问题!中心点不落在房间内,进而无法正确识别所在房间!
  • 编辑器和笔记软件汇总(三):NotebookLM、note-gen、MiaoYan、LetsMarkdown、DocFlow
  • openGauss 企业级开源数据库架构深度解析
  • 伸展树分析
  • 通州做网站公司市场营销策划包括哪些内容
  • 嵌入式开发学习日志43——FreeRTOS之引入
  • 阳信住房和城乡建设厅网站小城镇建设的网站文献
  • 3542. 将所有元素变为 0 的最少操作次数
  • 宁波商城网站建设互联网创意网站有哪些方面