场景编程集锦-电闪雷鸣的数学联想

时间:2023-01-08 13:01:17

1. 场景描述

场景编程集锦-电闪雷鸣的数学联想

电闪雷鸣总能给人许多的联想。

我联想到了电闪雷鸣、暴雨倾盆、山洪爆发、洪水泛滥的灾难场景,这种现象在中国古代通常被解释为“冒犯神灵,雷神发怒”的因果关系。

我联想到了著名的风筝实验。1752年,美国科学家本杰明·富兰克林用风筝和钥匙做了一次科学实验,他冒着雷击的危险用风筝把雷电引下来,证明了闪电是一种放电现象。富兰克林关于天上和人间的电是同一个东西的假说,在这次实验中得到了光辉的证实。这个风筝实验震惊了世界,因为在此之前的许多年,人们把雷电看做是神和上帝的化身,将雷击看做是上帝对人类的惩罚。而风筝实验的结果科学地揭开了雷电的神秘面纱,雷电不是天神作法,而是带电云层相遇而产生的一种放电现象。

我联想到了关于全球气候变化的巴黎宣言。为应对全球气候变暖,减少化石能源依赖,倡导大力发展清洁能源。近些年来,中国在光伏发电、风力发电、潮流能发电等领域取得了令世界属目的巨大成功。事实上,中国在太空发电站的研究方面,早已经领先于世界。在太空建立太阳能发电站并不遥远,可望彻底摆脱化石燃料依赖。我们也终究会掌握雷电安全利用的金钥匙,到那时雷电将造福于全人类。

我还联想到了一个有趣而又不被人留意的自然现象:为什么在雷暴天气,我们总是先看到闪电,而后听到雷声?我们如何用数学方法测算和度量雷击的距离?


2. 编程思路

不得不说,这是一个独特的视角来观察电闪雷鸣。由于光的传播速度比声音在空气中的传播速度要快,所以人们总是先看到闪电,后听见雷声。要计算雷击的距离,我们需要知道声音的传播速度,通过计量我们看到闪电与听见雷声的时间差,再乘以声音传播速度,就可以计算出雷击的距离。通过搜索引擎在互联网上进行查询得知:声音在空气中的传播速度是:空气(15℃)340m/s ,空气(25℃)346m/s 。我们暂且可以取传播速度为每秒340米。


3. 代码实现

在本节内容中,我们将编写两个程序版本,实现完全相同的功能。

3.1 函数版本

"""
distance.py : 计算雷击的距离
"""


def distance(time):
""" 计算雷击距离 """
result = 340 * time / 1000 # ①
return result

def main():
time = int(input('闪电和雷声时间差(秒): ')) # ②
result = distance(time)
print('雷击距离:{0}千米'.format(result))

if __name__ == '__main__':
main() # ③

语句①声音传播速度乘以传播时间,计算出雷击的距离。这里把距离单位转换为公里。
语句②实现函数嵌套调用,首先调用input()键盘输入的返回值是字符串,然后调用函数int()完成字符串到整数的转换。
语句③是调用main()函数,它是整个程序的入口,代码逻辑是从这里开始执行。

3.2 脚本版本

"""
distance2.py : 计算雷击的距离
"""

time = int(input('闪电和雷声时间差(秒): ')) # ①
result = 340 * time / 1000 # ②
print('雷击距离:{0}千米'.format(result)) # ③

这是一个具有IPO经典结构的Python脚本程序。IPO结构讲的是一个完整的程序应该包含3个部分,那就是输入(Input)-处理(Process)-输出(Output)。
语句①是程序的输入部分,从键盘输入数据;
语句②是程序逻辑处理部分,完成程序的计算功能;
语句③是程序的输出部分,打印计算结果。


4. 执行效果

4.1 函数版本

D:\cases\电闪雷鸣的数学联想>python distance.py

闪电和雷声时间差(秒): 5
雷击距离:1.7千米

4.2 脚本版本

D:\cases\电闪雷鸣的数学联想>python distance2.py

闪电和雷声时间差(秒): 5
雷击距离:1.7千米

两个版本的程序执行结果完全一致,都实现了计算雷击距离的功能。


5. 代码评价

这两个版本的程序代码都实现了相同功能,满足了业务需求,但是它们各有特点。其中:
脚本版本实现的程序具有代码简洁,逻辑清晰,简单易懂的特点。脚本编程方法通常仅适用于代码量较小的开发任务,我的建议是程序代码量最好不超过30行。否则随着代码行的增加,程序维护工作量也将显著增加,同时这种编码风格通常被认为不很专业,至少可以认定你现在还处在“菜鸟”级别的编程阶段。
函数版本的程序代码充分体现了软件工程的模块化设计思想,可以提高代码重用效率,有利于程序功能扩展以及后期代码调试和维护,有利于开发团队成员间的协同开发工作。

如果你有意愿想成为一名优秀的Python程序员,那么你就应该学习和掌握函数版本distance.py的编程思想和编程风格,这也是我推荐的编程风格和方法。