妙用python的函数和循环,开启电学的神奇之旅!
方便学习,坚持更新,配套说明,交流成长!
图示说明代码块:
正则表达式1个
while循环多个
功能:循环答题不退程序,可以在试题主目录到试题正文之间跳转
- 主循环1个
- 函数内循环多个
if分支多个
- 根据学生的选择,自由进入知识模块的分支
- 很好的实现了一个知识主题,多个分支讨论
由于这个程序要进行扩容,所以更多的分支结构还要进一步的添加,所以后续代码会继续更新,代码解释也会进一步更上,代码中一些不足,请优秀老师多提宝贵看法,希望本文对更多教育工作者有启发作用,从而更好的助力k12教育课堂与现代化技术完美结合
# -*- coding:utf-8 -*-
#模块部分
#标题01
import random
from matplotlib import pyplot as plt
import os,re,xlrd,xlwt
import openpyxl as op
#变量部分,标题02
#列表变量12个,5-17行
#函数内全局变量1个,位于函数
dyb_yibiao = ['电压表功能','电压表连接', '电压表读数','电压表与电路']
dlb_yibiao = ['电流表功能','电路表连接','电流表读数','电流表与电路']
dianliu = ['电流','电流方向','电荷量','摩擦起电','电荷相互作用','验电器','自由电子','物质的导电性','导体和绝对体']
dianlu = ['电路组成','电路四种状态','常见电路符号','电路图','电源']
dianlu_chuan = ['串联电路结构','','串联电路电流特点','串联电路电压特点']
dianlu_bing = ['并联电路结构','并联电路电流特点','并联电路电压特点','并联电路电阻特点']
lianjie = ['串联','并联']
sz_leixing = ['通路','短路','短接','断路']
kaiguan = ['断开','闭合']
cuoti = ['错题记录',]
daan = ['学生答案']
correct = ['标准答案']
#函数:Find_file 代码行号:18-27行
def Find_file():
#全局变量1个:cur_dir
global cur_dir
cur_dir = r'C:\Users\Administrator\Documents\物理试题集合\物理练习图\九年级\学生错题本'
files = os.listdir(cur_dir)
file_name = files[random.randint(0,len(files)-1)]
stu_name = '新同学1|新同学2|新同学3|新同学4'
for i in re.finditer(stu_name,file_name):
#print(i.group()+str(i.span()))
save_name = i.group()
input(f'{i.group()}回答')
#返回学生名字,文件全名
return save_name,file_name
#函数:get_path 代码行号:28-34行
#图像类问题,
def get_path(que_num):
"""假如题目有图片,就会导入图片"""
dirs = r'C:\Users\Administrator\Documents\物理试题集合\物理练习图\九年级\电学电路图'
files = os.listdir(dirs)
#print(files)
#file = dirs +'\\' + files[que_num]
file = dirs + '\\' + que_num +'.jpg'
img = plt.imread(file)
plt.imshow(img)
plt.show()
#函数:get_path 代码行号:35-57行
def Dian_jc(dian,cuo,da,correct):
if dian in dianliu:
print(f'''
1、类型1:基础概念类
1:电荷类 2:摩擦起电类
''')
ng_que = int(input(f'请输入题号:'))
ifcontinue = 'T'
#依次列出问题:
while ifcontinue == 'T':
ifcontinue = 'F'
answer_dict = {'1': '不大','2':'17点'}
if ng_que == 1:
que_list = ['第1题:1比2大?','第2题:天黑是几点']
print(f'')
#指定文件名称,在下个语句get_path传入文件名
que_num = input('输入图片名称:')
get_path(que_num)
#输入本题答案,并把学生答案和答案集合中预给答案比较answer_dict,如果正确将显示print内容
stu_ans = input(f'答案是:')
if stu_ans == answer_dict[str(ng_que)]:
print('恭喜你答对了')
elif stu_ans != answer_dict[str(ng_que)]:
print('错题信息保存到错题本')
cuoti.append(que_list[0])
daan.append(stu_ans)
correct.append(answer_dict[str(ng_que)])
ifcontinue = input('是否继续,继续输入T,否则输入F')
return (cuoti,daan,correct)
#把学生做题的信息保存到本地
#函数:Stu_test_info 代码行号:58-67行
def Stu_test_info(cuo,da,cor):
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('20211031', cell_overwrite_ok=False)
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.underline = False
style.font = font
for i in range(len(cuo)):
ws.write(i, 0,cuo[i])
ws.write(i, 1, da[i], style)
ws.write(i, 2, '\t')
ws.write(i,3,cor[i])
os.chdir(cur_dir) #跳转到指定目录保存
wb.save(f'{stu_name}答题本.xls')
i = 50
key = input('进入训练输x')
if key == 'x':
while i>0 :
i -= 1
if __name__=='__main__':
# Fanshe括号内的参数必须是函数外定义好的名称,但是函数执行时,可以在这个位置影射不同的变量,可以理解成是定义好的li仅用的占位置的参数
stu_name, file_name = Find_file()
dian = input('请输入查询问题')
cuo, da, cor = Dian_jc(dian, cuoti, daan, correct)
#print(cuo, da)
Stu_test_info(cuo, da, cor)
程序缩写插曲:
插曲1:
因为程序要用到学生点名回答,所以想到要设计一个学生提问器,于是有了正则表达式的功能引入,程序缩写过程中查找了很多百度资料,反复调试十几次,最后终于完成。
插曲2:
因为程序要用到学生点名回答,所以想到要设计一个学生提问器,于是有了正则表达式的功能引入,程序缩写过程中查找了很多百度资料,反复调试十几次,最后终于完成。
插曲3
在编写函数:get_path 代码行号:35-57行函数返回值时,遇到了无法解包赋值的问题,后来我把return的两个返回值添加了元组符号,才顺利的完成了函数调用的赋值。
插曲4
期待帮助4-1:
在编写图片函数:get_path 代码行号:28-34行时,
因为需要调用图片最初使用了PIL模块,但是发现效果不好,打开图片时是单独一个图片框显示,对于答题体验一点不友好,于是使用了matplotlib模块中的pyplot,这样就可以在执行程序时,让问题和图片都在pycharm中显示,让使用效果体验比较好,希望能够把图片和图片在一个类似浏览器中显示,不知道具体使用哪个功能模块能够实现,还欢迎各位大神点拨。
优化选图4-2
因为最初编写程序的时候调用图片的格式有两种,Jpg,png,在想如果可以自动根据图像扩展名直接打开是最好的,但是没有找到合适解决方案,后来采用一种折衷的方法,编写了一段选择图片扩展名的判断语句,解决了方面的问题,但是感觉应该还有更好的方法,也欢迎各位大神老师指点:
i = int(input('jpg输入0,png格式输入1-->'))
file_exname = f'{pic_format[i]}'
file = dirs + '\\' + que_num + file_exname
优化选图代码4-3
前面遇到的问题是,如何加载图片,面临一个选择输入的问题,经过一天的研究,发现可以把图片的名称写入试题中,然后从试题中提取完整的文件名称,这样直接用if条件判断就可以实现图片的自动加载,完全解决了前面的手动解决图片名称输入的问题,其实程序编写就是一次次优化,想法的一次次迭代更新的过程,这步优化的核心是利用了正则表达式。
使用正则表达式匹配提取出来图片名称
re_res = re.findall(r’如图|\d+.png|\d+.jpg’, que_list[xh])
#图片自动加载的思路:
#从试题中匹配图片名称
re_res = re.findall(r'如图|\d+\.png|\d+\.jpg', que_list[xh])
#获取完整的图片名称
if re_res == '如图' or 'png':
que_num = re_res[1]
get_path(que_num)
elif re_res == '如图' or 'jpg':
que_num = re_res[1]
get_path(que_num)
#这是函数内部代码更新情况:
def get_path(que_num):
"""假如题目有图片,就会导入图片"""
dirs = r'C:\Users\Administrator\Documents\物理试题集合\物理练习图\九年级\电学电路图'
files = os.listdir(dirs)
pic_format = ['.jpg','.png']
#i = int(input('jpg输入0,png格式输入1-->'))
#file_exname = f'{pic_format[i]}'
file = dirs + '\\' + que_num \
#+ file_exname
img = plt.imread(file)
plt.imshow(img)
plt.show()
优化插曲之5.0 5-1
随着程序的编写推进,在程序中有了新的需求,需要导入本地电脑的txt文件的选择试题,导入程序内部,并且显示效果和原来的一样,同时希望选择题目中如果有图片可以自动匹配,程序自动加载,然后希望增加答题反馈,如果答对了显示对勾图片,并且如果答对可以听到一段短音乐伴随播放。
结果在缩写过程中出现了一个让我大费周折的问题,就是在调用图片的模块之前使用的re_res参数出现了问题,导致频繁出现错误提示,如下图:
这个提示彻底把整个思路中断。为了实现想要的效果(如图)真心不容易,问题频频出现
于是开始了漫漫查找原因之路。
大家看到即然程序提示是
IndexError: list index out of range,那就说明程序通过正则表达式匹配后,把内容传递给如下调用图片函数出了问题
def load_pic(re_res):
# 如果问题没有图片以下两行代码可以不执行
if re_res == '如图' or 'png':
que_num = re_res[1]
get_path(que_num)
elif re_res == '如图' or 'jpg':
print(re_res[0])
que_num = re_res[1]
get_path(que_num)
从代码中看我们是要把这个列表的re_res传递给函数load_pic(re_res),即然提示索引超长度了,那就看看re_res,于是打印print(re_res),结果看到其值为空列表[],通过代码逻辑关系
def get_path(que_num):
"""假如题目有图片,就会导入图片"""
dirs = r'C:\Users\Administrator\Documents\物理试题集合\物理练习图\九年级\电学电路图'
files = os.listdir(dirs)
file = dirs + '\\' + que_num
img = plt.imread(file)
plt.imshow(img)
plt.show()
即然是一个空列表,传递变量给que_num时也为空列表,执行图片路径查找过程中file=dirs+’\’ + que_num时也是一个空的内容,想要打开图片当然不可能了,于是想着解决问题,接着修改了上上段代码 que_num = re_res[0],把1变为0,修改正则表达式
(r’\d+.png|\d+.jpg’, que_list[xh]),去掉了原来的如图|部分内容,因为没有必要了,但要解决re_res为空的问题呀,于是反复想办法,最终一番折腾操作,使用下面代码实现:
if re_res == []:
re_res.append('heima.jpg')
针对判断条件的[],之前也测试过用False,None都无法代码添加最后改为[],刚好可以了。好事多磨。
优化插曲之5.0 5-2
如何实现选择试题原样显示,这可浪费了比较多的时间,因为使用open函数导入的内容是一个长长的列表,列表的每个元素都是分开的,如果选择题1的题干,四个选项A,B,C,D5个选择题分成了25行,最后反复推敲用了以下的代码解决题目的拆分问题
if file_names_num == '200.txt':
answer_dict = {'0': '', '1': 'A', '2': 'A', '3': 'B', '4': 'D', '5': 'D'}
f = open(fr'C:\Users\Administrator\Documents\物理试题集合\物理练习图\九年级\01电荷\{file_names_num}',
encoding="gbk")
que_list = list(f)
#从txt文件中提取每一道题,并保存到每一个列表中
for index, line in enumerate(que_list):
if index < 5:
shiti_zero.append(line)
elif 10 > index > 4:
shiti_one.append(line)
elif 15 > index > 9:
shiti_two.append(line)
elif 20 > index > 14:
shiti_three.append(line)
elif 25 > index > 19:
shiti_four.append(line)
虽然上述代码解决了我的需求,但是总感觉代码不够智能,读者老师若能有最做优解,欢迎底部留言。
为解决五个独立部分的答案匹配,还需要在程序的主空间添加内容为空的列表:
shiti_zero, shiti_one, shiti_two, shiti_three, shiti_four = [], [], [], [], []
因为后面每道问题根据题目选取要能够分别显示题目内容如代码
#选择题成功
if xh == 1:
for line in shiti_zero:
print(line)
re_res = re.findall(r'\d+\.png|\d+\.jpg', shiti_zero[0])
if re_res == []:
re_res.append('heima.jpg')
if xh == 2:
for line in shiti_one:
print(line)
re_res = re.findall(r'\d+\.png|\d+\.jpg', shiti_one[0])
if re_res == []:
re_res.append('heima.jpg')
if xh == 3:
for line in shiti_one:
print(line,shiti_two)
re_res = re.findall(r'\d+\.png|\d+\.jpg', shiti_two[0])
if re_res == []:
re_res.append('heima.jpg')
if xh == 4:
for line in shiti_three:
print(line,shiti_three)
re_res = re.findall(r'\d+\.png|\d+\.jpg', shiti_three[0])
if re_res == []:
re_res.append('heima.jpg')
if xh == 5:
for line in shiti_four:
print(line)
re_res = re.findall(r'\d+\.png|\d+\.jpg', shiti_four[0])
if re_res == []:
re_res.append('heima.jpg')
也能够通过这个完成内容显示和每题图片的匹配内容信息,大家可能也发现了,如果没有图片的问题,我会自动添加一张名为heima.jpg的图片,保证程序调用图片显示是正常的。
其实所有这些内容的实现在其他的博主上我一直在翻看,大家基本没有这样记录或书写的内容,所以的想象,都是通过不断的看程序的基础语句,然后结合自己的想法,不断的测试,最终实现效果的。哲学中说的实践才是产生正确意识,指导方向的法宝,没有实践程序学起来确实很难,有了实践遇到了程序崩溃,需要用到解决方法调试的过程也很难,估计很多朋友都是在这两个地方出了问题,才导致学习中止吧!
优化插曲之5.0 5-3
插入声音文件,这里大家需要安装一个新的库
import pygame # pip install pygame
然后把使用的代码函数发到这里
def playMusic(filename, loops=0, start=0.0, value=0.5):
"""
:param filename: 文件名
:param loops: 循环次数
:param start: 从多少秒开始播放
:param value: 设置播放的音量,音量value的范围为0.0到1.0
:playMusic('path\*.mp3'):函数调用的格式,播放音乐
:return:
"""
flag = False # 是否播放过
pygame.mixer.init() # 音乐模块初始化
while 1:
if flag == 0:
pygame.mixer.music.load(filename)
# pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
pygame.mixer.music.play(loops=loops, start=start)
pygame.mixer.music.set_volume(value) # 来设置播放的音量,音量value的范围为0.0到1.0。
if pygame.mixer.music.get_busy() == True:
flag = True
else:
if flag:
pygame.mixer.music.stop() # 停止播放
break
因为目前还没打算结束对这个程序的后续更新,所以声音的调用还不打算添加,先暂时放到这里供大家参考吧!
优化6.0
一个选择题分支的全盘蜕变
6-1 思路优化分析
从新打造设计思路
上面是采用从一个txt文本中(含5道试题)但后面使用过程中发现了诸多问题,答题反馈,图片引用,题目显示,都出现了一大堆问题,这显然给后续新的问题填加增加了许多问题,于是今天开始新的框架设计。
1、一题一文件,含答案和解析
因为我们平时的练习往往都是含有答案,解析的,所以按照前面的设计思路,整个操作是比较麻烦的,因为我们除了要分割试题,还要填加答案字典,这样无疑给整个代码的后续更新带来非常大的工作量,也不利于代码维护,假如我们按照一题一文件的方式设计,可以让试题+答案+解析全部填加到文件中,我们只要通过代码调入和参数的比较就可以了,给代码维护带来很大方便。
- 在这段代码中我们完成了以下的工作任务
- 建立试题和试题内容的图片字典,这个过程中,是反复调试写出来的,如果是一个新手,我是绝对建议大家先熟悉基本代码,然后在考虑实际应用,因为如果大家基础代码不熟悉的话,应用起来就非常麻烦,虽然看似很简单的代码,但是经过了反复的调,改最后形成成品。
3、最后函数要给一个返回值,这样可以方便接下来的其他函数调用。
import os,re
from matplotlib import pyplot as plt
import random
num = random.randint(200,299)
file_each = []
pic_name = []
def look_file():
"""
通过函数Look_file,完成对本地文件名的处理,完成了文件名和文件名中的数字提取,最终把文件名和对应的数字图片名称的编写
然后把文件名和对应的数字图片名组成到一起编成字典。
:return:
"""
for root,dirs,filenames in os.walk('F:\物理练习图\九年级\试验'):
#把当前目录下的所有文件,储存在filenams列表中,
#对文件名列表进行遍历,把每一个小列表转化为字符串,添加到函数最后的变量filenames中
#从文件名中用re提取数字信息,转化为字符串后,再把字符串添加到列表中
#函数结束返回两个值,一个是文件名称,另一个是图像名称
#文件名称直接供选择文件使用,图片名称,供调用图片使用。
for file_each in filenames:
file_each = ''.join(file_each)
file_num = re.findall(r'\d+',file_each)
file_num = ''.join(file_num)
#把文件名和图片名合成一个字典
pic_name.append(file_num + 't.png')
file_pic_dict = dict(zip(filenames, pic_name))
print(file_pic_dict)
导入图片函数代码:
- 这段内容前面有介绍,注意在本次修改中函数被嵌套到调用试题的函数中,这里的que_num是函数形参,它是用来接收图片名称的,这个名称大家可以在后面的函数中找到。
#导入图片函数
def show_path_pic(que_num):
""" que_num(形参) 接收字典对应的键值file_pic[xt] """
files = os.listdir(dirs)
file = dirs + '\\' + que_num
img = plt.imread(file)
print('当前显示的图片信息为:',file)
plt.imshow(img)
plt.axis("off")
plt.show()
- 试题调用函数
在这段代码在,我们通过输入试题文件信息,完成2个步骤的任务,一个是打开文本文件导入内容到程序,另一个是,同时把该问题配套的图片打开,实现图文结合设计思路。
前面我们说过,que_num形参是用来接收图片名称的,大家可以在函数show_path_pic(file_pic[xt])位置找到,注意这里是通过file_pic[xt]字典的键值来显示的。因为我们在上一个函数中实现了把文件名称和图片名称进行了字典的捆绑,之所以这样做目的就是防止调用题目和图片出错,对应调用系统会按照程序字典来进行调用的。
global dirs
xt = input('选题:') + '.txt'
for key,value in file_pic.items():
#print(key,value)
if xt == key:
#print(xt)
dirs = r'F:\物理练习图\九年级\试验'
f = open(dirs + '\\' + f'{xt}')
line = f.readlines()
# print(line)
line_cut = line[0:5] #截取列表前四项题目及选项
for l in line_cut: #通过for循环打印到输出台
print(l)
show_path_pic(file_pic[xt])
line_ans = line[5] #把答案存储到变量中
ans = input("答:")
if ans == line_ans.strip('\n'): #把答案里面的回车符去掉,判断交互答案
print('回答正确')
else:
print('请看题目解析如下-->:',line[-1])
在这里插入代码片
优化新内容11-6日更
6-2 思路优化分析
大家好,内容更新,主要针对如何保存错题内容,又不删除原来内容的更新进行了代码更新,引入新模块import xlutils.copy
通过事先保存好的错题本信息,有错题写入就打开原来文件,直接在原文件修改不删除前面的信息。【个人觉得这个功能还 是蛮赞的!这里要点个大拇指】
def Stu_test_info(cuo,da,cor):
rb = xlrd.open_workbook(f'F:\物理练习图\九年级\学生错题本\{file_name}')
wb = xlutils.copy.copy(rb)
# 获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法
ws = wb.get_sheet(0)
#wb = xlwt.Workbook(encoding='utf-8')
#ws = wb.add_sheet('20211031', cell_overwrite_ok=False)
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.underline = False
style.font = font
for i in range(len(cuo)):
ws.write(i, 0,cuo[i])
ws.write(i, 1, da[i], style)
ws.write(i, 2, '\t')
ws.write(i,3,cor[i])
os.chdir(cur_dir) #跳转到指定目录保存
wb.save(f'{file_name}')
6-3 思路优化分析
因为经常有老师分析学生出错的问题在哪儿,所以在写入信息的模块添加了一个新的知识标签项,实现一功能,需要完成的不同位置参数补全,喜欢的老师同学们认真研究一下代码,简单罗列如下:
sign = ['错题标签']#程序外面的主空间
def Stu_test_info(cuo,da,cor,sign):#补全形参位置
sign.append(line[7])#在回答错分支项,填加错题知识标签
ws.write(i,4,sign[i])
#函数实例化调用,也要给变量sign添加好
cuo, da, cor,sign = choice_question(xt)
Stu_test_info(cuo, da, cor,sign)
6-4 思路优化分析
因为保存图片时经常会有png和jpg图片格式转化,所以写入一个帮助我能够进行图片转化的函数快学习一下吧!
from PIL import Image
dirname_read=r"F:\物理练习图\九年级\200-300\\"
dirname_write=r"F:\物理练习图\九年级\200-300\\"
names=os.listdir(dirname_read)
count=0
for name in names:
img=Image.open(dirname_read+name)
name=name.split(".")
if name[-1] == "png":
name[-1] = "jpg"
name = str.join(".", name)
#r,g,b,a=img.split()
#img=Image.merge("RGB",(r,g,b))
to_save_path = dirname_write + name
img = img.convert('RGB')
img.save(to_save_path)
count+=1
print(to_save_path, "------conut:",count)
else:
continue
2021-11-8功能优化
8-1 思路优化分析
制作的程序,又增加新功能,先上图说明
正如大家看到的内容一样,我们在题目的右侧图像区增加了灵活根据题目的性质(单选题,多选题,双选题)添加了自动显示的功能,这里需要进行两个方面的操作
- 第一项:需要在调用图片的函数中增加文字显示的功能,代码如下
- 第二项:需要在图片上添加试题号码,代码如下
- 第三项:也是最核心的功能项,我们需要让图片上自动显示题目类型,代码如下
对应序号1代码–功能:实现帮助我们在图片上添加文字:
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 12}
plt.rc("font", **font)
对应第2项代码:
#参数x_num需要在程序主工作区提取
plt.text(2, 1, fr'{x_num}题-{dx[index]}', fontsize=30)
对应第3项代码—功能:实现自动根据题目类型显示“单选,多选题,双选的标签,代码如下:
#实现在图片上显示题目类型
global index
dx = ['单选题', '双选题', '多选题']
dx_res = re.findall(r'单选题|双选题|多选题',a)
if dx_res == [] :
index = 0
elif dx_res == '双选题':
index = 1
elif dx_res == '多选题':
index = 2
因为我们针对一个函数内的代码修改需要其它模块内的对应数据,这里的index我们在函数内设置了它的全局属性,但是我们在主程序的位置还要设置一个index = 0的初始值,不然程序在调用函数时,会因为没有这个初始值,而报变量错误。
还有我们看到的a是前面从txt信息中导入到程序中的第一段文字的信息我们根据a=line_cut[0],从对应的line列表中截取就可以了。
2021-11-15功能优化-显示白色背景问题:
8-2 思路优化分析
格式:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。
对于m后面,\t 是希望显示的答案能够向后缩进一下的,效果大致是这样的:
print(f"\033[1;97;40m\t {l}")
一个完整的程序随着我们的想法的深入,可以不断的完善,然后编写好之后的程序就可以一劳永逸,舒心的享受使用程序带来的快乐,编程真是一件快乐的,幸福的,充满挑战的工作,爱上编程,共同创新,让我们为教育助力吧!
后面程序还会有什么样的优化调整呢?
请继续关注后续吧!
附:程序中调用的本地文件位置及名称:
文本文件
题目库的内容不断更新中
图片文件地址:
这是对应的图片区域
以上图片和题目是分别放置在两个文件夹内的。
文件保存地址
- 2021-10-31日,凌晨01点处理程序轮阔。
- 2021-11-1日,晚20:35更新内容优化
- 2021-11-2日,一整天的工作流程
- 2021-11-2日,程序优化把选择题分支进行了重新设计6.0模式。
- 2021-11-8日,程序进行了第8.1版的更新,增加了在图片上显示题目类型,增加了显示题目编号的功能。
- 2021-11-15日,程序在使用中,同学们希望打印到控制台的试题能够是平时在网上看到的白色背景,黑色字体,这样更舒适一些,于是就有了这一版的更新——白色背景,黑色字体显示功能。
时间太晚,休息了,明天上来给大家解释一下代码!
全部代码更新内容整个程序完成后会,会进行一次程序的更新。
优化后的程序使用起来很爽,代码简洁了许多,也减少了程序调用过程中可能出现的图片无法显示的问题,但是写程序的过程唯一难受的就是为了一个地方正常工作,你要不停的找问题,找原因,反复的调试。也许学习的过程就是这样,让我们从不厌其烦的试错,改错,从改错的过程中 一路 学习走过来,才能不断的提升自己对语言的理解,写程序绝对是一个能够让人高度紧张学习几个小时不能分心的过程,因为一旦中间断了,你还要从头梳理你的全部的思路,所以学习的过程,就必须高度集中你的注意力,想要高强度的规范你的时间,就要学习用思想去编写程序,去感受学习的快乐!
编写程序一定要体能整个写的过程,学习基础知识然后一定要使用它,不然的话,我们是无法体会编程的快乐的,哪怕学习的最初你什么都不懂,也不要怕,从你的工作实际中,从你的学习生活中,试着去找你可能需要程序的地方,然后从简单的功能实现开始,一步步深入,因为你的想法肯定是越来越多的,于是想法会驱使你想办法用对应的程序语言去解决,顺便你就开始学习新的语法功能了,学的多了,自然通了!不要怕,努力!