拒绝假努力,多动手敲键盘,动笔练习。看过他人的代码和知识点不等于成为自己的养分,一段时间之后,知识的残存率很低,绝大部分被时间抹去。最好的办法是学会之后去输出,完成成品,讲授分享给他人。先经过初步学习别人的代码,理解记忆之后,自己动手试试,找找看自己写错的地方,大概是自己没有理解透彻的部分,着手去查漏补缺,让知识学习的更加扎实。
练习练习再练习,进入正题:先读取保存在本地的数据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次,增加随机变化的可能性,不断回滚与回顾,才能提高自己的技艺。