刻意练习,持续进步

拒绝假努力,多动手敲键盘,动笔练习。看过他人的代码和知识点不等于成为自己的养分,一段时间之后,知识的残存率很低,绝大部分被时间抹去。最好的办法是学会之后去输出,完成成品,讲授分享给他人。先经过初步学习别人的代码,理解记忆之后,自己动手试试,找找看自己写错的地方,大概是自己没有理解透彻的部分,着手去查漏补缺,让知识学习的更加扎实。
练习练习再练习,进入正题:先读取保存在本地的数据test_list.data,二进制读模式打开。把要练习的题目缩写简化,存入到exercises列表中,用sample第二个参数取出随机个数:random.sample(exercises,2)。二进制写模式打开数据文件,加入抽取的题目到数据文件中。
遍历所有随机抽取的练习题stored_list,转换成字典,key为题名,value为练习次数,作为统计输出,利用lambda表达式以value进行排序。如果练习的题目超过6次,数据文件中把该题目全部移除。当然自己还要手动删除exercises列表中已学会的题目,否则下次还会被随机抽取出来。之后将数据dump存储进本地,待下次练习时读取本地数据。
一个题目6次有时不一定能学习完整,或者对自己来说太简单了不需要6次,可以手动修改edit_practice函数来调整该题目的次数,正值是增加练习次数,负值是减少。这样stored_list中题目超过6个会自动删除掉。
如下超过6次的输出: 第一行是抽出的题目,第三、四行是完成的情况(没有完成则不会输出),第四行是统计各个题目的练习次数。
[‘练习题1’, ‘练习题8’]
练习题1 has done,keep moving forward
练习题8 has done,keep moving forward
{‘练习题5’: 1, ‘练习题6’: 2, ‘练习题3’: 3, ‘练习题2’: 4, ‘练习题4’: 4, ‘练习题7’: 4, ‘练习题1’: 6, ‘练习题8’: 6}

继续执行,不会现显示练习题1和8。
[‘练习题4’, ‘练习题1’]
{‘练习题5’: 1, ‘练习题1’: 1, ‘练习题6’: 2, ‘练习题3’: 3, ‘练习题2’: 4, ‘练习题7’: 4, ‘练习题4’: 5}

刚开始测试,删除本地数据文件test_list.data,就会重新开始练习,初始化数据。
可以运行在手机上的QPython,保存在手机上自定义路径上,不会因为清理垃圾文件而被删除数据文件test_list.data。

Practice make perfect,keep moving forward

在这里插入图片描述

import random
import pickle
import os

file_name = 'test_list.data'
# 手机中创建一个phonefile的文件路径下保存数据
# file_name = '/storage/emulated/0/phonefile/test_list.data'
def run_test():
    stored_list=[]
    # 以二进制读模式打开目标文件
    f = open(file_name, 'rb')

    # 将文件中的变量加载到当前工作区
    stored_list = pickle.load(f)
    exercises = ['练习题1','练习题2' ,'练习题3','练习题4','练习题5','练习题6','练习题7','练习题8']
    random_questions = random.sample(exercises,2)
    print(random_questions)
   # 以二进制写模式打开目标文件
    f = open(file_name, 'wb')
   # 将pf变量存储到目标文件中去
   # for i in random_questions:
       # stored_list.append(i)
    stored_list.extend(random_questions)
    # 正值是增加练习次数,负值是减少
    #edit_practice(stored_list,'练习题1',2)
    #del_element(storedlist,'DefaultParam')
    count_dict = dict()  #{}
    for i in stored_list:
      count_dict[i] = stored_list.count(i)
      if stored_list.count(i)>5:
          print(i+' has done,keep moving forward')
          for g in range(6):
              stored_list.remove(i)
    #for item in stored_list:
       # if item in count_dict:
           # count_dict[item] += 1
       # else:
           # count_dict[item] = 1
    # 将变量存储到目标文件中区
    pickle.dump(stored_list, f)
    # 关闭文件
    f.close()
    #其中key=lambda x:x[1] 简单理解为a.items中有两个元素:,x[0]表示按照第一元素进行排序
    print(dict(sorted(count_dict.items(),key= lambda x:x[1])))

def init_data():
    stored_list=[]
    # 以二进制写模式打开目标文件
    f = open(file_name, 'wb')
    # 将变量存储到目标文件中区
    pickle.dump(stored_list, f)
    # 关闭文件
    f.close()

def del_element(list_data,element):
    while  e in list_data:
        list_data.remove(element)
        
def edit_practice(list_a,obj,numbers):
    for i in range(abs(numbers)):
        if numbers <=0:
            list_a.append(obj)
        else:
            try:
                 list_a.remove(obj)
            except ValueError:
                print("Too many objects to remove")

def main():
    #删除数据
    # initData()
    if not os.path.exists(file_name):
       init_data()
    run_test()

main()


随着自己的能力的提高,将exercises 题目增加到25个以上,随机抽取的次数为5次,增加随机变化的可能性,不断回滚与回顾,才能提高自己的技艺。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值