无论是哪一代的年轻人,都不喜欢听大道理。思政教育,讲究个如盐在水,润物细无声。笔者在重庆大学讲授程序设计课程有些年头了,在课堂内外,除了跟学生聊语法、讲算法、说技术之外,也会悄悄加点作料,“不经意”地做点思政教育。

————重庆大学计算机学院 陈波

1. 唯一不变的就是变化本身

1
2
3
4
5
6
7
8
9
10
#ufunc.py
#电费计算:(期末读数 - 期初读数)*单价
def costCompute(iStart, iEnd):
iConsume = iEnd - iStart
return iConsume*0.85

fElecFee1 = costCompute(1201,1786)
fElecFee2 = costCompute(1322,1423)
print("Electronic Power Cost of Mr Zhang:",fElecFee1)
print("Electronic Power Cost of Mr Lee: ",fElecFee2)

在自定义函数那一节, 我们设计了一个“过于简单”的costCompute( )函数,该函数接受电表的期末读数和期初读数作为参数,计算并返回当期应缴电费。

作为自定义函数的示例,这个函数足够“简单”,适合初学者,bala…bala… 在讲授完形参、实参、跳转、返回,再借助于程序调试向学生演示完函数调用过程后,我们问了学生一个问题:

​ 为什么要定义这么一个简单的函数 ? 张家的电费直接用 (1786-1201) * 0.85 难道不香吗?

在学生完成简单的思索后,开始思政教育:

  • 相对于(1786-1201)*0.85,costCompute( )函数的可读性更好,有利于团队协作。

  • 世界唯一不变的就是变,电费的计费规则,包括但不限于价格的变化是可以预期的大概率事件。当计费规则发生变化后,比如实行阶梯电费,如果软件中全部的电费计算均依赖此函数进行,那么,我们仅需要修改该函数即可快速地响应变化。否则:软件需要做多处修改,遗漏一处就意味着软件缺陷。

    作为未来的社会中坚,应该富有远见,着眼未来,时时刻刻做好应对变局的准备。

2. 理性消费,远离套路贷

1
2
3
4
5
6
7
8
9
10
11
12
13
#loan.py
fBalance = 10000 #贷款初始余额
fRate = 0.0005 #日利万分之五
balances = [] #贷款余额列表
for i in range(365*30):
fBalance = fBalance + fBalance*fRate #贷款余额 = 本金 + 本金*利率
balances.append(fBalance) #把贷款余额存入列表绘图用
print("30年后连本带利欠款总额: %.2f" % fBalance)

from matplotlib import pyplot as plt #贷款余额 vs 天数增长曲线
plt.plot(list(range(365*30)),balances)
plt.title("Loan balance grow by days")
plt.show()

在讲循环一节时,我们设计了一个微实践案例,名为”滚雪球的复利“。这个案例设想了一位小A同学为了买最新款的折叠屏手机,跟小额贷款公司借了10000元,小额贷公司的条件看起来很诱人,日息万分之五,一天5元,也就是一杯奶茶的钱。小A同学经常喝奶茶,觉得一杯奶茶钱无足挂齿,开开心心地就签下了合同。不幸的是,小A同学涉世不深,忽略了合同中隐藏的复利条款。

1561791925167

通过循环程序,同学们亲自见证了万分之五的复利所导致的贷额余额随时间的指数增长。

总结陈词:理性消费,远离套路贷

3. 团结合作才是人间正道

1
2
3
4
5
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
#Visual Studio Code
#Python License, MIT License, GPL License

“团结合作才是人间正道” ——习近平总书记在全国抗击新冠肺炎疫情表彰大会的讲话。

在软件开发领域,团结合作的最佳途径就是开源。在Python里,我们使用:由Microsoft研发并开源的Visual Studio Code作为IDE环境;由Python Software Foundation开源的Python解释器;由众多开源开发者贡献的各种开发包,包括matplotlib, numpy, scipy,tensorflow等等。

人人为我,我为人人。软件开源运动的发展,极大地提高了整个人类的工作效率,促进了全社会文明的进步。当前,一些不太愿意看到我们发展状大的势力,试图对我们进行科技封锁,这是逆势而为,注定会失败的。我们的软件工作者,应该具备宽广的胸怀,乐于奉献,团结和服务于世界人民的大多数,决不能走主动脱勾,闭门建设的错误道路。

4. 相信科学,远离怪力乱神

image-20210324164652014

在微实践-哈利波特之心灵感应魔法示例中,我们通过二进制编码及Python程序揭示了所谓”心灵感应魔法”的背后的数学原理。除了帮助学生理解二进制编码,这个示例还可用于课堂思政:所谓的特异功能、神迹,全是骗术,其事实上依赖于科学。作为受过高等教育的大学生,我们可能会因为知识局限性的影响而对某些现象产生疑惑,但务必坚信,现象背后的科学解释,终会出现。

5. 九层之台,起于累土

1
2
3
4
5
6
7
8
9
10
11
#everest.py
iCounter = 0 #对折次数
fThickness = 0.0001 #纸厚,单位米
while True:
if fThickness > 8844.43: #超过珠峰高度就停止循环
break
else:
fThickness *= 2 #对折一次厚度翻倍
iCounter += 1 #对折次数加1

print("纸对折%d次后的厚度为%.2f米,超过了珠穆朗玛峰." % (iCounter,fThickness))

"九层之台,起于累土"出自春秋·楚·李耳《老子》第64章:"合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下"。在这个示例中,我们研究了下述问题:一张厚度为0.1毫米的足够大的纸,对折多少次以后才能达到珠穆朗玛峰的高度?

通过这个示例,在知识层面上,我们可达到下述目的:

  • 进一步学习while循环;
  • 帮助一些学生建立起指数增长的概念,消除错误的“直觉和经验”;

在思政层面上,帮助学生体会:起点低没关系,怕的是不努力和不坚持。不论起点有多低,只要不断成长,假以时日,终有所成。

6. 精益求精,不断迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#prime.py  v0.1
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
return True

#prime.py v0.2
def isPrime(num):
if num in (0,1):
return False
for i in range(2,num):
if num % i == 0:
return False
return True

#prime.py v0.3
def isPrime(num):
if num < 0 or num in (0,1):
return False
for i in range(2,num):
if num % i == 0:
return False
return True

在单元测试一节,我们演示了借助于单元测试,不断迭代,完善代码的过程:书写一个简单的素数判定函数。

课堂思政:伟大的事业不要期望一蹴而就,需要从点滴工作开始,精益求精

硬广,上述思政案例均来源作者主编的《Python编程基础及应用》一书。

pybook