第 三卷第七章 小灰尘追随父亲的脚学习编程语言
细雨如丝,时阴时晴,天空的表情就像个捉摸不定的小孩。这样的天气,被子晒出去恐怕只会变得更潮湿,所以谭老爷决定今天不去晒被子了。他早早起床,穿过楼下的花园,那里的花草在雨水的滋润下显得格外生机勃勃。他在花园边的小摊上买了热乎乎的酸菜饼和香喷喷的鸡肉,吃得津津有味。
吃完早饭后,谭老爷的两个小孙子就兴奋地跑过来,缠着他教他们学习《陈情表》。
谭老爷就耐心地一字一句地念着:&39;祖母刘愍臣孤弱,躬亲抚养。臣少多疾病,九岁不行,零丁孤苦,至于成立。既无伯叔,终鲜兄弟,门衰祚薄,晚有儿息。外无期功强近之亲,内无应门五尺之僮,茕茕孑立,形影相吊。而刘夙婴疾病,常在床蓐,臣侍汤药,未曾…&39;
祖孙三人谈了一天的陈情表。
到下午六点,天空已经微微泛起了暮色。谭灰晨带着一天的疲惫和一束康乃馨回到了家。他把康乃馨小心翼翼地放在客厅的花瓶里,他想着今日老婆范舒看到后脸上能泛起笑容。
这时,谭老爷正在门口换上外出的鞋子,准备出门去和他的朋友们踢毽子。谭灰晨一眼就看到了他,好奇地问道:“爸,你这是要去哪呢?”
谭老爷笑着说:“我和花架子奶奶还有白老爷约好了一起去踢毽子,你自己在家带好娃啊,我走了。”说完,他就兴高采烈地出了门。
谭灰晨在家带孩子其实并不轻松,但他总是能找到乐趣。小胖粒跑到他面前,仰着头问道:“爸爸,你可回来了。”谭灰晨笑着摸摸他的头,问道:“又有啥要问爸爸的吗?”
小胖粒想了想,说:“爸爸我是没啥问的,但哥哥他说有问题想问你,在你房间等着呢!对了,爸,我的棉花糖不多了,要多买些?”
谭灰晨听了,点点头说:“好,爸爸知道了,一会儿就去给你买。”说完,他洗了洗手,从桌子上拿了一个烤红薯就往房间走,小胖粒好奇地跟在他后面。
谭灰晨走进书房,仿佛走进了一个热闹的编程历史展览厅。他的儿子谭落灰,正像个历史小解说员一样,坐在桌旁,手里拿着厚厚的编程资料,眼睛里闪烁着发现宝藏的光芒。
“爸爸!爸爸!”谭落灰看到谭灰晨进来,兴奋地像个小鸟一样跳了起来,“我又发现了一些编程语言的有趣故事!”
谭灰晨笑着坐在他旁边,仿佛被儿子的热情所感染,好奇地问:“哦?你又发现了什么宝藏?”
谭落灰指着资料,像个小导游一样,开始讲解起来:“你看,这个information processing language,简称ipl,是ibm的john backus在1954年开发的。那时候,电脑还像个大铁盒子,ipl就是为了处理商业数据而诞生的。而且,它还是lisp语言的前身呢!ipl用了一种像list一样的表处理结构,让用户可以自己定义函数,多神奇啊!”
谭灰晨听得津津有味,点点头说:“嗯,真有意思。那flow-matic呢?”
谭落灰得意地笑了笑,继续说:“flow-matic是grace hopper在1955年为一个地方海上走动人员开发的编程语言。你知道吗,它可是为了简化编程过程而诞生的。而且,它的编程语法就像我们说的英语一样,简单易懂,连非专业人士都能编写程序呢!它可是cobol的前身哦!”
谭灰晨听后不禁感叹:“哇,这真是一种革命性的编程语言。”
谭落灰得意地笑了笑,又拿出一份资料说:“还有这个formula translation,简称fortran,是ibm的john backus在1954年开始设计的。它是第一个被广泛使用的编译型语言,主要用于科学和工程计算。你想想看,那时候的科学家们,用fortran编写程序,就像我们现在用计算器一样简单!”
谭灰晨听后不禁感叹:“我儿子懂得越来越多了,真是太了不起了!”
谭落灰又拿出一份资料说:“爸爸,你看这个tran,它和flow-matic一样,也是为了简化编程过程而设计的。还有这个lisp,它是第一个广泛使用的函数式编程语言,它的表处理能力和递归功能可是非常强大的!还有这个algol,它是一种过程式编程语言,为了定义一个标准化的算法语言而设计的。还有这个fact,它也是cobol的前身之一呢!”
谭灰晨微笑着坐在儿子旁边,准备揭晓这个神秘的发现。他温和地说:“儿子啊,你提到的tran,其实是一种古老的编程语言,它被认为是cobol的前身之一。和flow-matic一样,tran也是为了简化编程过程而诞生的。你可以想象,它就像是一把魔法钥匙,打开了编程世界的大门,而且它使用的编程语法还非常接近我们日常使用的英语呢!”
谭落灰瞪大了眼睛,仿佛看到了一个新的世界。他好奇地问:“那lisp呢?我听说是由john mccarthy在1958年开发的,它有什么特别之处吗?”
谭灰晨点了点头,继续解释道:“你说对了,lisp确实是一个非常特别的编程语言。它是第一个广泛使用的函数式编程语言,至今仍然有很多人在使用。lisp以其强大的表处理能力和递归功能而闻名于世。你可以把它想象成一个会变魔术的盒子,可以把复杂的问题变得简单易懂。”
谭落灰听得津津有味,又问道:“那algol呢?它也是为了简化编程而设计的吗?”
谭灰晨点了点头:“没错,algol(算法语言)是由欧洲的一个委员会在1958年发布的。它的目标是定义一个标准化的算法语言,为后续的编程语言奠定了基础。你可以把algol想象成一座坚固的桥梁,连接着过去和未来的编程语言。”
谭落灰的好奇心被彻底点燃,他追问道:“那fact呢?它和cobol有什么关系?”
谭灰晨笑了笑:“fact也是被认为是cobol的前身之一。和flow-matic、tran一样,它也是为了简化编程过程而设计的。你可以把fact想象成是一把神秘的钥匙,虽然它现在已经不太常用了,但它曾经为编程世界的发展做出了巨大的贡献。”
落灰说道“爸爸你觉得什么是cobol语言呢?”
“儿子啊,你知道cobol这种编程语言是怎么来的吗?”谭灰晨问道。
“不知道,爸爸你讲给我们听听。”女儿小胖粒回答道。
谭灰晨笑着望向女儿“怎么胖粒你也要听,好爸爸给你们说说,cobol是由ansi(美国国家标准协会)在1959年发布的。这个1959年可真是个特别的年份啊!”谭灰晨兴奋地说道。
“1959年?那一年有什么特别的吗?”小胖粒好奇地问道。
“当然有了,那一年可是发生了很多有趣的事情呢!”谭灰晨开始娓娓道来。
“首先,那一年人类成功登上月球,这是人类历史上的一大壮举啊!你知道吗,cobol这种编程语言也是为了商业领域的发展而诞生的,就像人类登月一样,都是为了探索未知领域,开拓新的天地。”
小胖粒听着听着,眼中闪烁着兴奋的光芒,她感受到了父亲话语中的热情与激情。
“还有呢,1959年是第一只机器人在那一年诞生了!你想想看,机器人可是人类智慧的结晶啊,它们可以帮助人类完成各种任务,让人类的生活更加便捷。就像cobol这种编程语言一样,它也可以帮助人们更加高效地处理商业数据,提升工作效率。”
谭灰晨的话语中充满了对科技发展的赞叹和敬仰,小胖粒也感受到了这种情感的传递。
“就是那一年还出现了第一款电子游戏《pong》!这个游戏虽然简单,但是它却开启了电子游戏产业的先河,让人们在闲暇之余可以享受到更多的乐趣。就像cobol这种编程语言一样,它也可以让人们在工作中更加轻松愉快,提升工作效率。”
谭落灰笑着转向他的父亲谭灰晨,问道:“爸爸,你能给我详细介绍一下这些编程语言的发展历程吗?比如1954年的ipl,它是lisp语言的祖先;1955年的flow-matic,它是cobol语言的祖先;还有1957年的fortran,那是第一个编译型语言。还有tran、lisp、algol 58、fact、cobol和rpg,这些语言都有什么语言规则、符号、算法和排序吗?”
谭灰晨微笑着点点头,开始详细地解释:“当然可以,孩子。首先,让我们来看看语言规则。每种编程语言都有一套规则,决定了如何编写、理解和执行代码。这些规则包括了变量的命名规则、函数的定义规则、控制流程的规则等等。比如,在fortran中,变量名必须以字母开头,后面可以跟字母或数字,但不能以数字开头。
接下来是符号。编程语言使用各种符号来表示不同的操作和概念。比如,`+`表示加法,`-`表示减法,``表示乘法,`/`表示除法。在fortran中,这些符号都有特定的用法。
算法是编程语言中的核心部分。它是一系列解决问题的步骤。比如,排序算法就是一种常用的算法,用于将一组数据按照特定的顺序排列。冒泡排序、快速排序、插入排序等都是常见的排序算法。在fortran或任何其他编程语言中,你都可以实现这些算法。
还有模拟环境是一个虚拟的环境,用于模拟实际系统的行为。在编程中,我们经常需要模拟一些复杂的环境或系统,以便在不影响实际系统的情况下进行测试和调试。模拟环境可以帮助我们预测实际系统的行为,找出潜在的问题。
递归算法是一种特殊的算法,它调用自身来解决问题。这种算法通常用于解决一些可以分解为更小子问题的问题。比如,计算阶乘就是一个递归算法的经典例子。计算n的阶乘可以分解为计算n-1的阶乘,然后乘以n。这样,我们就可以用一个递归函数来实现阶乘的计算。”
谭灰晨说完后,谭落灰眼中闪烁着光芒,他深深地点了点头,:“爸爸你应该详细说说这些语言帮你做了哪些复杂和强大的程序,解决实际问题。”
谭灰晨笑着说:“谭灰晨微笑着,开始详细解释起来:“首先,我们来谈谈编程语言的基本规则。编程语言是一种人和计算机沟通的工具,通过它我们可以告诉计算机要做什么。每种编程语言都有自己的规则,比如python中的缩进表示代码块,c++中的分号表示语句的结束。这些规则就像是我们和计算机之间的契约,我们必须遵守它们,否则计算机就无法理解我们的意图。”
“然后,我们再来谈谈符号。在编程语言中,符号扮演着非常重要的角色。比如,等号`=`用于赋值,加号`+`用于加法运算,括号`()`用于改变运算的优先级。这些符号都有特定的含义和用法,我们需要熟练掌握它们。”
“接下来,我们来说说算法。算法是解决问题的一种方法或步骤。在编程中,我们需要设计合适的算法来实现我们的需求。比如,如果你要对一个数字列表进行排序,你可以使用冒泡排序、选择排序、插入排序等不同的算法。每种算法都有自己的优缺点,我们需要根据实际情况选择合适的算法。”
“递归算法是一种特殊的算法,它通过调用自身来解决问题。就像我们之前说的计算阶乘的例子,它就是一个递归算法。递归算法通常需要定义一个递归函数和一个基准情况。递归函数是调用自身的函数,而基准情况是递归的结束条件。当满足基准情况时,递归函数就不再调用自身,而是返回结果。”
“最后,我们来谈谈模拟环境。模拟环境是一个虚拟的环境,用于模拟实际系统的行为。在编程中,我们经常需要模拟一些复杂的环境或系统,以便在不影响实际系统的情况下进行测试和调试。比如,如果你要开发一个游戏,你可以先在一个模拟环境中测试游戏的各个功能,确保它们都能正常工作后再发布到实际环境中。”
谭灰晨说完后,谭落灰眼中闪烁着光芒,他兴奋地说:“爸爸,我明白了!原来编程语言有这么多有趣的东西啊!我也想试试写一个程序来解决实际问题。”
谭灰晨鼓励道:“当然可以,儿子!你想解决什么问题呢?”
谭落灰想了想,说:“嗯……比如我想写一个程序来自动发送邮件什么的。”
谭灰晨看着自己儿子落灰点了点头:“那好啊!我们可以从简单的开始做起。首先,你需要选择一个编程语言,比如python就非常适合初学者。然后,你需要了解如何连接邮件服务器、如何构造邮件内容等。这些都可以通过查阅相关文档和教程来学习。最后,你可以尝试写一个简单的程序来实现你的需求。”
谭落灰充满期待地说:“爸爸那怎么用python制作一个自动连接邮件服务器”
谭灰晨笑着打开电脑,说:“好的,我们现在就开始吧!首先,你需要安装python环境。你可以去python的官方网站下载适合你电脑系统的版本,然后按照安装向导进行安装。安装完成后,你就可以开始编写你的程序了。”
谭落灰好奇地问:“爸爸,什么是python环境?”
谭灰晨耐心地解释道:“python环境就是让你的电脑能够理解和运行python代码的软件。就像我们说话需要语言环境一样,电脑运行程序也需要相应的环境。安装python环境就是为了让电脑能够‘听懂’python语言。”
谭落灰点了点头,表示理解。谭灰晨接着说:“现在,我们要来编写一个连接邮件服务器的程序。首先,我们需要导入python中的一个库,叫做`smtplib`,这个库提供了发送邮件的功能。然后,我们还需要导入`email`库,用来构造邮件内容。”
谭落灰好奇地问:“爸爸,什么是库?”
谭灰晨解释道:“库就是别人已经写好的代码,我们可以直接调用这些代码来实现我们需要的功能。就像你玩玩具一样,你可以直接用别人制造好的玩具来玩,而不需要自己从头开始制作。”
谭落灰恍然大悟:“哦,我明白了!那我们要怎么导入这些库呢?”
谭灰晨演示道:“很简单,只需要在代码的开头写上`import smtplib`和`import email`就可以了。”
接着,谭灰晨开始编写代码,边写边解释:“首先,我们需要创建一个smtp对象,用来连接邮件服务器。”
一旁的胖粒问道爸爸,什么是:“smtp呢?”
谭灰晨笑着对胖粒说:“smtp,全名是simple mail transfer protocol,简单邮件传输协议。它是一种用于发送电子邮件的协议。想象一下,你想要寄一封信给你的朋友,但你不是直接把信送到朋友手里,而是通过邮局来传递。smtp就像是网络世界中的邮局,它负责把电子邮件从一个地方传输到另一个地方。”
“哦,我明白了!”胖粒点头说道,“那接下来呢?”
谭灰晨继续编写代码并解释:“接下来,我们需要使用smtp对象来登录到邮件服务器。这就像是你去邮局寄信时,需要出示身份证明一样。”
谭落灰好奇地问:“爸爸,我们为什么要登录到邮件服务器呢?”
谭灰晨耐心地解释道:“因为邮件服务器是负责存储和转发邮件的地方。只有登录到正确的邮件服务器,我们才能发送和接收邮件。这就像是你只有进入了正确的房间,才能找到你想要找的人一样。”
谭落灰点头表示理解,然后问道:“那我们要怎么登录呢?”
谭灰晨在代码中添加了一行`smtpobjlogin(mysender, mypassword)`,并解释道:“我们需要提供用户名和密码来进行登录。在这个例子中,`mysender`是你的邮箱地址,`mypassword`是你的邮箱密码。当然,为了安全起见,我们不应该直接在代码中写明密码,而是应该使用更安全的方式来存储和获取密码。”
谭落灰点头表示明白,然后又问道:“那登录之后呢?”
谭灰晨坐在电脑前,双眼闪烁着兴奋的光芒。他向他的孩子们展示如何使用smtp(简单邮件传输协议)来发送电子邮件。” 谭灰晨说着,手指在键盘上轻快地跳跃。
落灰疑惑的问道爸爸:“咱们怎么用python创建邮寄?”
谭灰晨笑着说:“首先,我们需要创建一个邮件对象。” 他解释着,屏幕上出现了一行新的代码。
```python
import smtplib
from emailmimetext import mimetext
创建一个邮件对象
msg = mimetext(&39;这是邮件的内容&39;)
```
“接着,我们要设置邮件的发件人、收件人、主题和内容。” 谭灰晨一边解释,一边继续编写代码。
```python 设置发件人msg[&39;from&39;] = &39;地址&39; 设置收件人msg[&39;to&39;] = &39;地址&39; 设置邮件主题msg[&39;subject&39;] = &39;测试邮件&39;
```
“现在,我们已经准备好了邮件的所有内容。” 谭灰晨满意地点点头,然后继续说道,“接下来,我们需要使用smtp对象的`sendmail`方法来发送邮件。”
```python 创建smtp对象server = smtplibsmtp(&39;smtpexample&39;, 587)
登录smtp服务器
serverlogin(&39;地址&39;, &39;password&39;)
发送邮件
serversendmail(&39;要过去的地址&39;, &39;要过去的地址&39;, msgas_string()) 关闭smtp连接serverquit()
```
谭灰晨演示完整个发送邮件的过程后,谭落灰和胖粒都兴奋地鼓起掌来。
“爸爸,我想知道&39;server = smtplibsmtp(&39;smtpexample地址&39;, 587)&39;这段话是什么意思” 谭落灰跃跃欲试地问道。
谭灰晨微笑着点头:“当然可以!爸爸好好给你说说。”
就在这个时候,老爷子打开门从厨房走了进来,手里拿着醋香附,白芍,佛手,木香,郁金,炒白术,陈皮,柴胡,广藿香,炙甘草,莱菔子,焦槟榔,乌药,研磨成制作成的药丸。
“吧你这是要去哪?” 谭灰晨好奇地问道。
“那白老头,吃这你媳妇给送的番薯,吃着吃着就吵着说胃脘疼痛,这不我给他送这个药去。” 谭板栗粒焦急地说着,手中的草药散发出淡淡的香气。
谭灰晨点点头,心中暗自感叹中草药的神奇。他转头看向谭落灰和胖粒,脸上露出鼓励的笑容:“看,这就是我们的传统文化。不仅有编程,还有中医。每一种知识都有它的价值和魅力。你们要好好学习,传承下去。”
说完谭灰晨抱着女儿胖粒坐在儿子落灰身边指着显示屏仔细解释着server = smtplib…
他有些疲惫的说:“这行代码是python中使用`smtplib`模块来建立一个与smtp(simple mail transfer protocol,简单邮件传输协议)服务器的连接。
这里,smtp服务器是`smtpexample地址`,并且使用的端口是`587`,通常这是smtp服务器用于启动tls(transport layer security)的端口。
`smtplib`是python标准库中的一个模块,它提供了smtp客户端的实现,允许你发送电子邮件。
`smtp`这是`smtplib`模块中的一个类,用于创建一个smtp客户端对象。
`&39;smtpexampl地址`这是smtp服务器的地址。你需要将其替换为你实际要连接的smtp服务器的地址。在这个例子中,它只是一个占位符。
`587`这是smtp服务器的端口号。端口`587`通常用于启动tls的smtp连接。如果你的smtp服务器使用的是其他端口(如`25`或`465`),你需要相应地更改这个值。
`server` 这是一个变量,它存储了创建的smtp客户端对象。一旦你有了这个对象,你就可以使用它来发送电子邮件,例如通过调用`login()`方法登录,然后使用`sendmail()`方法发送邮件。
简单的说就是这行代码创建了一个连接到指定smtp服务器和端口的smtp客户端对象,并将其存储在`server`变量中,以便后续使用。