《中小学生Python编程入门指南》1.4 第一句Python语句

1.4 第一句Python语句

    这一节我们来学习编写第一句python语句,这一节内容较多且重要,里面涉及一些计算机组成原理的东西希望大家掌握。一般来说,程序员学习的第一句计算机语言,都是打印出“Hello World”。这里说的打印,不是打印机的打印,而是指的是在某个程序窗口显示出一句话,也就是输出一句话。后面我们再解释有什么用处。
    我们使用cmd窗口来打印这条语句。对了,cmd的全称只是cmd.exe,意思是command,即命令提示符。
    像上节一样,我们打开cmd窗口,输入python,出现python命令提示行“>>>”。由三个大于号结尾(多打几个回车也是一样的)。如下图:
    
    我们输入print语句,也就是print函数。输入【print("Hello world!")】,注意,输入的符号都是英文符号,括号和双引号都是使用英文输入法的英文符号。如下图:
    
    我们再回车,看看有什么变化
    
    我们可以看到,出现了图中框选出来的一句Hello world!。好,我们来解释一下我们刚才小小的一句话包含了什么知识点。
    1、英文符号和中文符号的区别。大家要记住,只要是python语言涉及的符号,都必须英文符号,而不是中文符号。为什么呢?因为这是外国人发明的。当然,这里也就说明了英文符号和中文符号是有区别的,有什么区别呢?比如说,括号。如果用中文符号打出括号,是长这样的();如果将输入法切换到英文,打出括号,是这样的()。看的出来区别吗?大家可以在自己电脑的聊天窗口实验一下。我们会看到中文的括号两边都好像有空格,实际上没有,英文括号则窄一点。这里就涉及计算机编码的问题。
    什么是计算机编码。我们都知道,计算机是外国人发明的,世界上第一台计算机“ENIAC”于1946年2月14日在美国宾夕法尼亚大学诞生,那会美国用来进行弹道计算(如果大家有兴趣,推荐一部优秀的电影《模仿游戏》,本尼迪克特·康伯巴奇饰演图灵。图灵被誉为计算机科学之父,计算机领域最伟大的奖项就是图灵奖,虽然第一台计算机不是他发明的,但离不开他的奠基)。既然是美国人发明的那么自然使用的语言就是英语。由于当时的计算量不大,且内存十分之小,也没人能预想到计算机能在世界上普及开来,所以在计算机的起初发展上,只支持了英文、数字和部分符号的编码。
    我们都知道或者听说过在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 [1] 。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 [2] 。比如说,我们使用了0100 0001这样的8位二进制数(如果翻译成十进制则是65,我们在附录一中说明进制的计算)表示大写字母A。
    所谓位(bit),就是每一个逻辑1或逻辑0便是一个位。比如我们的字母A,就是0100 0001这样8位二进制数。
    我们时常听说字节(Byte),就是由8个位(bit)组成。比如我们的字母A,在ASCII码中就是一个字节。字节和位的英文前一个字母都是B,但是有大小写之分,所以我们时常也说“大B”和“小b”,用以区分。我们使用手机流量时候经常说的多少G啊多少兆啊,这是什么意思?其实这是成倍数的,1TB=1024GB;1GB=1024MB;1MB=1024KB;1KB=1024Byte。那为什么是1k在这里是1024而不是1000,像一千克就是1kg?按前面说的,计算机只有逻辑0和逻辑1存在,就是以2的n次方存储,而 1024 是最接近1000的2的n次方数。但其实很多计算场景或商业场景为了方便都将1024简化为1000。那我们家庭常用的宽带100G或者200G之类是不是也是这个概念呢?不是的,我们家庭用的宽带,所谓200G指的是带宽,是一种速率。比如说200G,指的是200Gbps,即使每秒200Gb的流量,这里我们用的是小b,bit,比特,位。就是说,换算成我们常用的字节,还要除以8。而且一般家庭宽带还要把带宽拆分为上下行,所以体验起来会更慢一些。
    下图是一张ASCII码对应表。
    
    既然我们的中文没办法用ASCII码表示,那为什么我们现在还能使用中文打字。这就是我们接下来要说的另外两种编码格式。一种是GBK,一种UTF-8。
    GBK是由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,全称为“汉字内码拓展规范”(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification),是GB编码中的一种。中文版的Windows系统自95之后都支持了GBK 的编码格式,里面收录了两万多个汉字,符合我们的日常使用需求。GBK编码是使用了双字节编码方案,以实现更多字符的拓展。
    GBK是包含了很多字符了,但如果想要把全世界的字符都包含进来,那还远远不够。于是聪明的前辈们就再开发出另外一种编码格式。那就是Unicode。Unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。而UTF-8是Unicode的一种变长字符编码,由Ken Thompson于1992年创建。UTF-8用1到6个字节编码 Unicode字符,可以用来表示Unicode标准中的任何字符,其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用,而可变长度的设计又可以节约我们的内存空间,所以UTF-8的编码格式便十分流行起来。
    有一些程序或者文本使用的是GBK的编码格式编写,而我们在UTF-8的编码环境中打开,那么该文件一般就显示为乱码,所以我们时常看到的乱码大多是因为编码不同导致。因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,而Python3之后,字符则是使用Unicode码存储的。
    我们回到我们刚才输入的python语句print("Hello world!"),我们就知道英文和中文在存储上是有区别的,所以要十分注意中英文问题
    2、如何打印中文和数字?
    使用print("你好python,初次见面,请多指教。"),我们再看看会输出什么,希望大家自己操作。
    如果输入数字,则是怎样的?print("123456")
    
    其实如果输入数字的时候,不加双引号也是可以的,如图
    
    这是因为加不加双引号是有区别的,加双引号说明是一个字符串,不加双引号则是一个数字。后面讲到变量的时候我们再细说。
    这里还需要提醒一点的时候,我建议我们同学在编写程序的使用,使用成对的符号,比如双引号、单引号、括号之类的,需要前后两个符号组合的,就先将两个符号一起输入,再输入符号内的内容,不然很容易忘记输入后面的符号,特别是以后的代码量多了,就更容易漏写。这种情况回头查问题会比较难查,而且因为小问题浪费时间不值得。我下面演示一下报错,如果少写双引号是如何报错的。
    
    3、我们解释一下这个print有什么用。我们一般在代码中打印出一个数据是用来排查故障的,在我们代码的运算过程中,将特定的数据打印出来看看是否能符合我们的预期,用来验证我们的想法是否正确。但现实中我们也遇到相似的场景,比如我们使用电脑自带的计算器,输入计算的数字,计算器通过计算之后不就将结果“打印”出来了吗?我们是否能使用代码实现一个计算器呢?当然可以,我们后续将演示这个代码。


    这里补充一个冷知识,为什么学习编程的第一句一般都是“Hello World”。
    根据收集到的资料显示,hello world起源于1972年,贝尔实验室(有兴趣的同学自行了解贝尔实验室,推动人类发展的伟大名字)的研究员Brian Kernighan在撰写“B语言教程与指导(Tutorial Introduction to the Language B)”时,首次使用了hello world,这是已知最早在计算机著作中使用hello world的记录。之后,1978年,他在他和Dennis Ritchie合作撰写的C语言圣经“The C Programming Language”中,延用了“hello,world”句式,作为开篇第一个程序。在这个程序里,输出的”hello,world”全部是小写,没有感叹号,逗号后有一空格。虽然之后几乎没能流传下来这个最初的格式,但从此用hello world向世界打招呼成为惯例。几乎每一个程序设计语言的教材中的第一个范例都是hello world程序,而且简单而优美的语句正好能验证我们的编译器是否能正常编译,因此在学习一门新语言的时候用hello world作为起步已经成为计算机程序界的一个传统。

    留个课后作业吧。在桌面上创建一个txt文件,将下面代码敲进去,保存文件退出,然后将文件后缀.txt改成.py。双击运行,看看会发生什么。(注意语句的缩进哦)
from turtle import *
x = 360/10
y = 120
for i in range(10):
	if i % 2 == 0:
		color("skyblue")
	else:
		color("pink")
	begin_fill()
	forward(y)
	left(x)
	forward(y)
	left(180 - x)
	forward(y)
	left(x)
	forward(y)
	left(180 - x)
	end_fill()
	left(x)
done()



[1] 李见伟. 计算机中信息的表示[J]. 中国现代教育装备, 2010(7):29-29.
[2] 莫绍强、陈善国.计算机应用基础教程:中国铁道出版社,2012年:12-13

猜你喜欢

转载自www.cnblogs.com/sunshinesky/p/12324490.html