析构!!!
大家好,我还是那个小岚的作者@发现美的眼睛
这一次,为大家介绍一种思路,就是析构思路。
先来看看原生的小岚,刚刚诞生的样子!
#! /usr/bin/python
# -*- coding:utf-8 -*-
#@491609917@qq.com 作者:和光同尘堂
#功能列表
----------------------
1. 支持图数一体化 ---yes
单一js ---yes
^非单一js
配置参数图表 ---yes
二级优化(针对图表格式化输出代码进行优化) ---yes
----------------------
2. 支持单位转换 ---yes
专业术语转换 ---yes
----------------------
3. 语句排列(格式化输出) ---yes
^格式化输出 __init__ #初始化输出
格式化输出字符串 ---yes
正则 ---yes
----------------------
4. 历史转存(列表判断,time引导记录) ---yes
格式化输出(语句) ---yes
^图表输出
正则 ---yes
^调取历史数据出现三次,需修复
^调取历史数据,时间线需要切片处理
----------------------
5. 图表转存(格式化输出)
格式化打印 ---yes
正则 ---yes
----------------------
6. 计算公式优化 ---yes
将if判断式中的ALG调整为函数ALG ---yes
^结构内部出现内建函数,需要进行调整
from pyecharts import Line
# Ilike, Ispeak = "人生苦短,我用python", "小岚是我第一个创造的世界"
# hint = "所有数据将存储该程序中,不用联网(仅限无爬虫版本)"
# BBS = "利息计算根据中国人民银行公布的利率进行计算,该数值可精确到小数万位"
# print(Ilike.center(125,' ') + '\n')
# print(Ispeak.center(120,' ') + '\n')
# print(hint.center(110,' ') + '\n')
# print(BBS.center(100,' ') + '\n')
Ilike, Ispeak = "人生苦短,我用python\n", "小岚是我第一个创造的世界\n"
hint = "所有数据将存储该程序中,不用联网(仅限无爬虫版本)\n"
BBS = "利息计算根据中国人民银行公布的利率进行计算,该数值可精确到小数万位\n"
print(Ilike.center(125,' ') + '\n' + Ispeak.center(120,' ') + '\n' + hint.center(110,' ') + '\n' +BBS.center(100,' '))
# 修复注释:
# 请将多个重复性代码进行优化重叠,减少体积。例如js生成代码
# 历史数据;
# 将I/O转存,实现第四功能
-----------------------------------------------------------------------------------------------------------------------------------
# 图表格式化输出单位为:缩进块为4*空格
----制表单位
# 表结构需要使用---正则---进行重新定义排序
m = [['城乡居民和单位存款', "利率 % (单位/百分比)"],
['活期存款',"0.35"],
['整存整取定期存款','选项'],
['三个月','1.1'], ['半年','1.3'], ['一年','1.5'], ['两年','2.1'], ['三年','2.75'],
['各项存贷','选项'],
['一年以内(含一年)','4.35'], [ '五年以内(含五年)','4.75'], ['五年以上','4.90'],
['个人住房公积金贷款','选项'],
['五年以下(含五年)', '2.75'], ['五年以上', '3.25'],
['暂无额外','选项']]
#
#每次format时,只能填入两个坑
for mm in m:
print('-' * 100)
print("\t{0:{2}^20}\t{1:{2}^30}".format(mm[0], mm[1],chr(12288)))
# 95-131行代码实现图表格式化输出
-----------------------------------------------------------------------------------------------------------------------------------------
历史数据存储判断
----str_type = one_type
----timestamp = time.localtime(time.time)
def ALG_a(deposit_strs, irs_a):
global result
result = deposit_strs * irs_a * 1
return print("利息为: %s" % result)
def ALG_b(loan_strs, irs_b):
global result
result = loan_strs * irs_b * 1
return print("利息为: %s" % result)
def ALG_c(CPF_strs, irs_c):
global result
result = CPF_strs * irs_c * 1
return print("利息为: %s" % result)
set_list = []
print(input("Enter回车下一步:"))
while True:
print("\n###非技术型问题###","\n\t###第一计算类型--整存整取定期存款","\n\t###第二计算类型题--各项存贷", "\n\t###第三计算类型--个人住房公积金存贷")
one_type = input("\n本次计算类型应为:")
if one_type == '整存整取定期存款':
irs_a_1 = float(0.011)
irs_a_2 = float(0.013)
irs_a_3 = float(0.015)
irs_a_4 = float(0.021)
irs_a_5 = float(0.0275)
deposit_strs = float(input('-' * 100 + "\n存入金额:"))
print('-' * 100 + "\n整存整取定期存款:其款项所存时间为符合项,不应出现不符合规则项!")
deposit_time = float(input('-' * 100 + "\n存款时间选项\n\t三个月等于3\t半年等于6\t一年等于12\t两年等于24\t三年等于36" + "\n存款时间:"))
irs_a = [irs_a_1, irs_a_2, irs_a_3, irs_a_4, irs_a_5]
if deposit_time == 3:
ALG_a(deposit_strs, irs_a[0])
set_list = [deposit_strs, result + deposit_strs] # 修复完成
elif deposit_time == 6:
ALG_a(deposit_strs, irs_a[1])
set_list = [deposit_strs, result + deposit_strs] # 修复完成
elif deposit_time == 12:
ALG_a(deposit_strs, irs_a[2])
set_list = [deposit_strs, result + deposit_strs] # 修复完成
elif deposit_time == 24:
ALG_a(deposit_strs, irs_a[3])
set_list = [deposit_strs, result + deposit_strs] # 修复完成
elif deposit_time == 36:
ALG_a(deposit_strs, irs_a[4])
set_list = [deposit_strs, result + deposit_strs] # 修复完成
else:
print("\t输入值错误")
print("\t请输入符合计算条件的数值") # 报错异常写入try异常处理中
elif one_type == '各项贷款':
irs_b_1 = float(0.0435) # <=1
irs_b_2 = float(0.0475) # >1 <=5
irs_b_3 = float(0.0490) # >5
loan_strs = float(input('-' * 100 + "\n数值金额:"))
loan_time = float(input('-' * 100 + "\n贷款时间:")) # 可输入月份比较值(即一个月等于1,五个月等于5,一年等于12)
irs_b = [irs_b_1, irs_b_2, irs_b_3]
if loan_time <= 1:
ALG_b(loan_strs, irs_b[0])
set_list = [loan_strs, result + loan_strs]
elif loan_time > 1 <= 5:
ALG_b(loan_strs, irs_b[1])
set_list = [loan_strs, result + loan_strs]
elif loan_time > 5:
ALG_b(loan_strs, irs_b[2])
set_list = [loan_strs, result + loan_strs]
else:
print("贷款时间 {} 输入值存在异常".format(loan_time))
elif one_type == '个人住房公积金存贷':
irs_c_1 = float(0.0275)
irs_c_2 = float(0.0325)
CPF_strs = float(input('-' * 100 + "\n贷款金额:"))
CPF_time = float(input('-' * 100 + "\n贷款时间:"))
irs_c = [irs_c_1, irs_c_2]
if CPF_time <= 5:
ALG_c(CPF_strs, irs_c[0])
set_list = [CPF_strs, result + CPF_strs]
elif CPF_time > 5:
ALG_c(CPF_strs, irs_c[1])
set_list = [CPF_strs, result + CPF_strs]
else:
print("\t输入值错误")
print("\t请输入符合计算条件的数值")
else:
print("输入值存在异常")
# 输入值应为自由,不该受限
#str_str = int(input("\n提示数值为整数\t" + "\t请输入存放金额: "))
#time_str = int(input("\n提示输入值为数字\t" + "\t请输入年份: "))
-----------------------------------------------------------------------------------------------------------------------------------------------
"""
try:
# 异常处理,针对用户输入错误类型进行提示
str_str = int(input("\n提示数值为整数\t" + "\t请输入存放金额: "))
print("pass") if str_str == int else print("输入值存在异常") # 异常处理
except Exception as e:
print("输入了错误类型,请输入正确类型!")
else:
True # 正常则1
finally:
print("异常处理机制已启动")
"""
----------------------------------------------------------------------------------------------------------------------------------------------
这里面包含了很多很多,就光注释就几十行。毕竟是第一次写程序,在没有任何导师的指点下,我们需要边写边优化。同时还要对代码能够实现的功能进行扩展,于是……繁琐复杂和无效在那个时候称为我最为头疼的问题。
好在,强迫症要求自己在400行的时候进行重新析构。
相信大家都明白析构的含义吧!顾名思义,析构就是重构!
对原来的自己编写的代码进行重新书写,就连结构框架都要重新定义。不过,也正是这个过程彻底磨炼了个人水平!
![流程图](https://i-blog.csdnimg.cn/blog_migrate/8f348dd4f0ceedc473e7738556b22fec.png)
也就是这个过程,让我明白了一个程序出生到完善之中一系列的过程,这里面包含的世界。
从刚开始写的ALG计算(ALG就是算法,这里只是指计算公式),到后边的功能扩展,都是 一次次学习进步得来的。
废话不多,流程图才是这个程序真正的精髓。这个过程,我使用了五个以上的库来协助完成我的愿望!
① datatime——
② sys——
③pyecharts——
④wxpy——
⑤内建库(代码必须拆分写,不然又后悔的日子)——
⑥MySQL——
⑦Redis——
这些库组成了小岚现在的样子!历时半个月,从书写到析构,从单一计算到功能扩展。这就是全过程!