
一步一步顺序来
第一课 奇妙的字符画
本课我们将使用字符绘制出类似图1.1所示的字符画。

◎图1.1
我们将学到的主要知识点如下。
(1)输出函数print()和Print()的使用。
(2)函数的概念。
(3)代码的缩进格式要求。
(4)注释语句的使用。
(5)Python文件的保存格式。
(6)播放音符函数play()的使用。
Python由荷兰人吉多•范罗苏姆(Guido van Rossum)发明。他认为当时已有的编程语言对非计算机专业的人员十分不友好,于是在1989年12月,为了打发无聊的圣诞节假期,吉多开始写Python的第一个版本。“Python”这个名字来自吉多喜爱的电视连续剧《蒙蒂蟒蛇的飞行马戏团》。他希望新的语言Python能够具有创建全功能、易学、可扩展的特性。
Python崇尚优美、清晰、简单,是一门优秀并被广泛使用的语言。有人说,完成一个相同的任务,使用汇编语言需要1000行代码,使用C语言需要500行代码,使用Java需要100行代码,而使用Python可能只要20行代码。
Python自问世以来,迅速成为一门流行的编程语言,越来越多的公司和机构选用Python作为其主要开发语言。例如:
Google的Google App Engine、code.google.com、Google Earth、Googlebot、Google Ads等项目大量使用Python进行开发;
美国国家航空航天局(NASA)大量使用Python进行数据分析和运算;
视频网站YouTube就是用Python开发的;
在线云存储网站Dropbox的功能全部用Python实现,网站每天处理约10亿个文件的上传和下载;
图片分享社交网站Instagram的功能全部用Python开发,网站每天有超过3000万张照片被分享;
社交网站Facebook的大量基础库通过Python实现;
Linux发行版本Redhat中的yum包管理工具就是用Python开发的;
豆瓣公司几乎所有的业务用Python开发;
国内的问答社区知乎是用Python开发的;
在线医疗网站春雨医生是用Python开发的。
除此之外,搜狐、金山、腾讯、网易、百度、阿里巴巴、新浪、果壳等公司都使用Python来完成各种各样的任务。
打开Visual Python,单击窗体设计区上方的按钮,在“窗口设置”中,设置“窗体名称”为“奇妙的字符画”,设置“窗体颜色”为喜欢的颜色,设置窗体全屏,单击“应用”按钮,如图1.2所示。

◎图1.2
单击按钮,在弹出的对话框中选择文件保存位置,在“文件名”输入框中输入“字符画”,单击“保存”按钮,将其保存为模块文件。

以.py结尾的Python文件双击后不能直接运行,它通常会直接被Python编辑器(例如IDLE++)打开。
以.pyw结尾的Python文件双击后可以直接运行,就好像运行Windows的可执行文件一样。当然,它仍然可以用IDLE++打开。
可以事先在Visual Python的“设置”面板中设置默认保存类型是.py或.pyw。

保存模块文件后,Visual Python的界面将以最小化的方式隐藏,同时打开IDLE++。如图1.3所示,可以看到有一段示例代码放在“Init()”之后,这种语句以def开头,以冒号(:)引出代码块,我们称这种代码块为函数,“Init”即为函数名。这么做使得代码更加简单易懂,因为我们可以用这种方式将复杂的任务分解为一个个代码块。

◎图1.3

函数是指能完成一定功能的代码块,Init()函数是Visual Python特有的自定义函数。“init”的中文含义是“初始化”。
Visual Python规定程序运行时,首先执行Init()函数内的代码,所以通常将一些需要在程序初始运行时执行的代码放在Init()函数中。
Python有许多内置函数,我们可以调用它们使程序变得简洁。

你注意到每一行代码后面的符号“#”和中文说明了吗?“#”符号表示该部分为注释语句。注释语句起到备注作用,是对代码的解释和说明,它可以帮助初学者更快速地理解代码的含义。Python解释器在执行代码时会忽略注释语句,不对它做任何处理,就好像它不存在一样。
在不修改任何代码的情况下,直接单击IDLE++的按钮运行程序,示例代码会在窗体上展示一段动画以供初学者学习参考(此段代码可替换为我们自己编写的代码),如图1.4所示。

◎图1.4

计算机的“大脑”是CPU,中文名是中央处理器。它不能直接执行Python代码,只能执行由0和1组成的机器语言。
所以,我们需要一个翻译工具,把Python代码翻译成计算机能“听懂”的机器语言,这样计算机才能按照Python代码的要求去“做事”,这个翻译工具就是Python解释器。

单击IDLE++中的2运2行模块按钮,实际是调用Python解释器去读取Python代码,再将其翻译成机器语言,从而告诉计算机如何做。其工作原理如图1.5所示。

◎图1.5
删除Init()函数里的示例代码,输入如下代码。注意除双引号内的中文外,其他字符均为半角。此外,Python是严格区分大小写的,print和Print是不一样的。
def Init(): # 初始化函数 print("这是我的第一个Python程序") print("我的心情很激动") print("我希望它能够一次运行成功") print("因为传说中,第一个程序如果能一次运行成功") print("那么在以后的学习过程中,就会无往不利")

注意输入的每行语句前有4个空格,因为Python采用代码缩进和冒号(:)来区分代码块之间的层次。
Python默认用4个空格作为一个缩进量(在默认情况下,按一次Tab键就输入4个空格)。
Python对代码的缩进要求非常严格,同一级别代码块的缩进必须一样,否则Python解释器会报语法异常错误(SyntaxError)。

print()用于输出括号内的内容,是Python中最常见的一个函数。
代码写好后单击按钮保存,再单击
按钮运行,如果代码没有错误,运行结果如图1.6所示。

◎图1.6
可以看到,print()逐行在控制台窗口输出了双引号内的文本内容(这种用双引号或者单引号括起来的文本内容称为字符串),且一行输出结束后自动换行。字符串的内容必须包含在两个双引号或两个单引号内。字符串可以包含英文、数字、中文以及各种符号。

Visual Python新增了一个可以在窗体上显示字符串的函数Print(),例如Print("我可以在窗体上显示哦"),还可以设置输出字符串的前景色和背景色。例如,设置输出字符串的字体颜色为红色、背景色为蓝色的语句为Print("字符串内容","red","blue")。
若设置了字符串的输出坐标,则该行输出不占用正常输出语句的位置。例如:
(1)设置字符串的输出坐标为(50,100)的语句为Print("字符串内容",x=50,y=100);
(2)既设置字符串的输出坐标,又设置字符串的字体颜色为红色、背景色为绿色的语句为Print("字符串内容",fgcolor="red",bgcolor="blue",x=120,y=150)。
颜色的定义可参照附录D,注意颜色代码均为字符串,必须包含在两个双引号或两个单引号内。

下面的代码用于绘制一幅心形字符画,输出效果如图1.7所示。现在发挥你的创造力,绘制出更漂亮的字符画吧。
def Init(): # 程序运行时就执行一次的初始化函数 Print(" ****** ******",fgcolor="red",x=100,y=10) Print(" ********** *********",fgcolor="red",x=100,y=20) Print(" ************************",fgcolor="red",x=100,y=30) Print(" ************************",fgcolor="red",x=100,y=40) Print(" ************************",fgcolor="red",x=100,y=50) Print(" ************************",fgcolor="red",x=100,y=60) Print(" ***********************",fgcolor="red",x=100,y=70) Print(" *********************",fgcolor="red",x=100,y=80) Print(" *******************",fgcolor="red",x=100,y=90) Print(" *****************",fgcolor="red",x=100,y=100) Print(" ***************",fgcolor="red",x=100,y=110) Print(" *************",fgcolor="red",x=100,y=120) Print(" ***********",fgcolor="red",x=100,y=130) Print(" *********",fgcolor="red",x=100,y=140) Print(" *******",fgcolor="red",x=100,y=150) Print(" *****",fgcolor="red",x=100,y=160) Print(" ***",fgcolor="red",x=100,y=170) Print(" *",fgcolor="red",x=100,y=180)

◎图1.7
在开始学音乐时,老师都会教我们唱“do re mi fa so la si”,在音乐中它们是非常重要的7个音。基本的C大调音阶就是由它们组成的,如图1.8所示。

◎图1.8
在Visual Python中可以通过编程将这7个音用高音、中音、低音的方式来播放。例如,play("1",400)表示播放中音“do”400毫秒(1秒=1000毫秒);play("+2",400) 表示播放高音“re”400毫秒;play("-3",400) 表示播放低音“mi”400毫秒。
试从网上找一段简单的乐谱,编写代码,使程序既能显示字符画,又能播放一段音乐。
在Python中字符串也可以使用三个单引号或三个双引号来表示字符串,这样字符串中的内容就可以多行书写,并且被多行输出。
例如输出如下一段古诗文的代码。
Text=""" 观沧海 东临碣石,以观沧海。 水何澹澹,山岛竦峙。 树木丛生,百草丰茂。 秋风萧瑟,洪波涌起。 日月之行,若出其中; 星汉灿烂,若出其里。 幸甚至哉,歌以咏志。 """ def Init(): Print(Text,bgcolor='red') # 输出之前定义的字符串Text,注意不要加引号
如图1.9所示,网络上有一些免费的在线生成ASCII字符画的网站,例如https://tools.kalvinbg.cn/image/asciiPic等,试选择喜欢的图片生成字符画后,使用Print()绘制到窗体上。

◎图1.9
读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58443”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。