从键盘输入一个三位自然数,求出各个位上的数字。
分析:一个三位数,百位上的数等于该数整除100取商,十位上的数等于该数整除10后的商再对10取余,个位上的数等于该数对10取余,这是利用纯数学的方法求出各个位数上的数字。但在Python中如何将其用编程的方法实现呢?从键盘输入一个三位自然数,该数字是什么类型?在内存中如何存储?如何将上述计算过程用Python语言表示并输出?Python基础语法就是本节要学习的重点内容。
为了提高程序的可读性,要为程序添加注释。注释用来说明程序中某些代码的作用和功能,同时也方便他人阅读。特别是当程序的代码量大、逻辑错综复杂、阅读困难时,注释就显得尤为重要。
Python中的单行注释以“#”开头,语法格式如下。
从符号“#”处开始,直到换行处结束,此部分内容都作为注释的内容。Python是一门解释型语言,当Python解释器遇到“#”符号后,会自动跳过这段代码,继续向下执行。
建议在“#”后面添加一个空格,然后再编写相应的说明文字。单行注释放置的位置,既可以是要注释代码的前一行,也可以是注释代码的右侧,两种方式虽然放置位置不同,但程序执行的结果是相同的。示例代码如下。
多行注释可以一次性注释多行内容(包含一行)。多行注释采用三单引号(''' ''')或三双引号(""" """)将多行注释包裹起来,语法格式如下。
或者
多行注释通常用于为Python文件、模块、类或函数等添加版权、功能描述等信息。需要注意的是,在Python中,如果三单引号或三双引号作为Python中语句的一部分出现时,就不能再将它们视为多行注释,而应看成字符串的标志(与双引号的作用相同),例如:
Python解释器在运行时,会将三单引号看成是字符串的标志,而不会当成注释跳过不执行。因此,该程序的运行结果会输出字符串“Hello, Python!”。
不论是单行注释还是多行注释,注释不仅能够提高代码的可读性,而且是调试程序的一个重要工具,可以缩小排错的范围。用户在编程过程中难免会出错,如果觉得某段代码可能有问题,可先把这段代码注释起来,这样Python解释器在运行的过程中会自动忽略这段代码。再次解释、运行注释后的代码,如果程序可以正常执行,则说明错误就是由注释的这段代码引起的,这样就缩小了排查错误的范围。如果运行注释后的代码依然出现相同的错误,则可以判断错误不是由这段代码引起的,同样也缩小了排查错误的范围。
顾名思义,变量(variable)就是在程序执行过程中其值可以变化的量。可以将变量看成一个用来存放数据的容器。一个变量应该有一个名字,称为变量名。
变量有三个要素:数据类型、变量名和变量值。给变量赋值以后该变量才会被创建,其类型和值在赋值的那一刻被初始化。
为变量赋值的语法格式如下。
注意: “=”是赋值运算符,要与比较运算符“==”区分开。
与C语言不同,Python语言允许同时为多个变量赋同一个值。例如:
也可以同时为多个变量赋不同的值。例如:
上面的语句是为变量a、b、c分别赋值1、2、3。
在Python语言中万事万物皆为对象,当为一个变量赋值时,在内存中就为该变量开辟了一块空间用于存储该变量。变量的本质是一个指针,变量中存放的是对象的引用(地址),对象的引用(地址)指向这个对象。
理解变量在计算机内存中的表示也非常重要。例如,当执行“x=3”时,Python解释器做了两件事情。
1)判断内存中是否存在整数3,如不存在,就创建整数3。
2)在内存中创建一个名为x的变量,并把它指向整数3。
当把变量x赋值给另一个变量y,这个操作实际上是把变量y指向变量x所指向的数据。
输出变量y的值,变量y的值到底是3还是4呢?如果从数学的角度理解,就会认为x值和y值相同,y值应该是4,但实际上y的值是3。
执行x=3,解释器创建了整数3和变量x,并把x指向整数3;执行y=x,解释器创建了变量y,并把y指向x指向的整数3;执行x=4,解释器创建整数4,并把x的指向改为整数4,但y的指向并没有更改,因此程序最后的输出结果是3。
Python中的变量有以下三个特点。
1)在C语言中,变量必须先定义后使用,而在Python语言中,变量无须定义即可直接使用,不需要事先声明变量名及其类型,给变量名直接赋值即可创建各种类型的对象变量。
2)Python解释器会根据赋值或运算来自动推算变量的数据类型。
3)变量的类型可根据值随时变化。
假设要存储王小明同学的个人信息。
姓名:王小明
年龄:18岁
性别:男
身高:1.75米
体重:70千克
通过观察可以发现,王小明同学的个人信息具有不同的类型,在使用变量存储这些数据时,也需要使用不同的数据类型。Python语言中的数据类型可以分为数字型和非数字型。数字型主要包括整型、浮点型、布尔型和复数型,非数字型主要包括字符串、列表、元组和字典。
(1)整型(int)
整型是指整数类型,是不带小数点的数,可以是正整数或负整数。各进制的数字之间可以进行相互转换。
整型数值有四种表示形式。
● 二进制形式:以'0b'开头,如'0b11011'表示十进制的27。
● 八进制形式:以'0o'开头,如'0o33'表示十进制的27。
● 十进制形式:正常的数字。
● 十六进制形式:以'0x'开头,如'0x1b'表示十进制的27。
(2)浮点型(float)
浮点型是Python语言的基本数据类型中的一种。顾名思义,浮点型就是用于保存带小数点的数值的数据类型。Python语言中的浮点型类似于C语言中的double类型。
浮点型数值有两种表示形式。
● 十进制形式:浮点型数值中必须包含一个小数点,否则会被当成整型数值处理,如3.14、0.314。
● 科学计数形式:如3.14e2(即3.14×10 2 )、3.14E2(也是3.14 ×10 2 )。
(3)布尔型(bool)
布尔型是计算机中最基本的数据类型,它是计算机二进制的体现,布尔型数字都可由0和1表示,即非真即假。布尔型通常用在条件判断和循环语句中。Python语言中的布尔型有两个值,True和False。在数值环境中,True可被当成1,False被当成0。与在C++、Java-Script中有所不同,在Python中True和False首字母要大写。
下面几种情况可以认为是假。
● None。
● False。
● 数值中的零,包括0、0.0、0j(虚数)。
● 空序列,包括空字符串""、空元组( )、空列表[]、空集合set( )。
● 空的字典{}。
(4)复数型(complex)
Python语言还支持复数型,它有以下几个特点。
● 复数由实数部分和虚数部分构成,可以用real+imagj或者complex(real,imag)表示。其中complex()函数用于创建一个复数或者将一个数或字符串转换为复数型,其返回值为一个复数。
● 复数的实部real和虚部imag都是浮点型。
● 虚数部分必须要有后缀J或j。
(1)字符串(String)
顾名思义,字符串就是一串字符,是由数字、字母、下画线等组成的一串字符。Python语言要求字符串必须使用引号(单引号或双引号)括起来。例如,"abc"、'Python'、'123'、"人生苦短,我学Python。"。
(2)列表(List)
列表是Python中最常用的数据类型。它可以存储不同类型的数据,用一对方括号[ ]把用逗号分隔的不同数据项括起来。例如,list=["abc",'Python',123,[2,'a']]。
(3)元组(Tuple)
元组与列表类似,不同之处在于元组的元素不能修改,元组使用一对圆括号()表示。元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。例如:tuple1=(1,2,3,4,5)
(4)字典(Dictionary)
字典是Python中除列表以外最灵活的数据类型。它用于存放具有映射关系的数据,字典可以使用一对花括号{ }定义。字典使用键值对存储数据,键值对之间使用逗号分隔,键(Key)是索引,值(Value)是数据,键和值之间使用冒号:分隔。字典是一个无序的数据集合,当使用print()函数输出字典时,有时输出的顺序和定义的顺序是不一致的。例如:
在处理数据时经常需要转换数据的格式,以方便数据遍历等操作,这时候需要借助一些函数实现数据类型的转换。常见的数据类型转换函数如表2-1所示。
表2-1 数据类型转换函数
例如,将字符串类型的值转换成整型数值。
type()函数通常用来查看数据的类型。
算术运算符是运算符的一种,用于完成基本的算术运算。算术运算符常用来处理四则运算,具体描述如表2-2所示。
表2-2 算术运算符
在Python中,*运算符还可以用于重复输出指定次数的字符串。
例如:
和数学中的运算符优先级一样,在Python中进行数学运算时也有优先级:先乘除后加减,有括号时先计算括号里面的,同级运算符是从左到右计算的。
【例2-1】 输入直角三角形两个直角边的长度a、b,求斜边c的长度。
分析:直角三角形边长满足勾股定理a 2 +b 2 =c 2 ,利用基本算术运算符即可求出c 2 ,然后对c 2 进行开方时,可以采用刚才讲过的幂运算符进行开方,最后进行输出显示。
代码如下。
在本例题中对c 2 进行开方时,既可以采用幂运算符,也可以使用Python内置的sqrt()函数,不过在使用该函数前需要导入math模块。读者在编程中要拓展思路,从多个角度出发,用不同的方法去解决问题。
赋值运算符主要用来为变量赋值。赋值运算符为“=”,在使用时,既可以将等号右侧的值直接赋给左侧的变量,也可以将右侧的值进行某些运算后再赋值给左侧的变量。
例如:
注意: =和==的含义完全不同,前者是用来赋值的赋值运算符,后者是用来判断两边的值是否相等的等号,在使用时千万不要将其混淆。
赋值运算符“=”还可与其他运算符(算术运算符、位运算符等)结合,成为功能更强大的复合赋值运算符,具体如表2-3所示。
表2-3 复合赋值运算符
例如:
通常情况下,复合赋值运算符使得赋值表达式的书写更加优雅和方便,只要能使用复合赋值运算符,都推荐使用这种赋值运算符。
但是需要注意的是,复合赋值运算符只能针对已经存在的变量赋值,因为赋值过程中需要变量本身参与运算,如果变量没有提前定义,它的值就是未知的,无法参与运算。例如,下面的写法就是错误的。
该表达式等价于n2= n2 + 10,由于n2没有提前定义,其值是未知的,因此它不能参与加法运算,否则程序会报错。
计算机内所有的数都以二进制的形式进行存储,位运算就是把数字转换为二进制数字来进行运算的一种运算形式。Python支持的位运算符有如下6个。
● &:按位与。
● |:按位或。
● ^:按位异或。
● ~:按位取反。
● <<:左移运算符。
● >>:右移运算符。
具体描述如表2-4所示。
表2-4 位运算符
注意 :位移运算符只适合对整型数值进行运算。
成员运算符用于判断一个成员是否在容器类型对象中,具体描述如表2-5所示。
表2-5 成员运算符
例如:
运行结果为输出“变量a不在给定的列表list中。”。
4 常用内置函数
print()函数是Python的基本函数,print()函数是一个输出函数,可以用它来输出想要输出的内容。语法格式如下。
参数说明如下。
● value:可以接收任意多个变量或值,因此print()函数可以输出多个值。
● sep:使用print()函数输出多个变量时,默认以空格隔开多个变量,如果希望改变默认的分隔符,可通过sep参数进行设置。
● end:用来设置以什么结尾,默认值是换行符\n,可以换成其他字符串,如\t、" "等。
● file:表示设置输出设备,把print()函数中的值输出到什么地方,默认输出到标准端(sys.stdout)。
● flush:该参数只有两个选项True或False。True表示强制清除缓存,False表示缓存的事情交给文件本身。
例如:
注意: 在Python 3中,print()函数输出结果后总是默认换行的。
运行结果为:
如果设置其中的参数end=' ',则程序不换行。
运行结果为:
如果是数字等内容,print()函数会原样输出该内容。例如:
如果想输出多个变量,那么不同的变量之间用英文逗号分隔。例如:
与print()函数相对应的就是input()函数。input()函数用于向用户显示一条提示信息,然后获取用户输入的内容,无论用户输入什么内容,程序总会将用户输入的内容转换成字符串,因此input()函数总是返回一个字符串类型的变量,如果想要得到其他类型的数据,需要进行强制类型转换。语法格式如下。
例如:
当调用一些函数或模块时,可能会忘记一些函数的参数或返回值等细节,可以使用Python内置的help()函数。help()函数用于查看函数或模块用途的详细说明。语法格式如下。
例如,使用help()函数查看print()函数的说明。
type()函数能够查看一个对象的数据类型。type()函数是一个常用的Python内置函数,调用它能够得到一个返回值,从而查询到对象的类型信息。语法格式如下。
例如,查询以下两个对象的数据类型。
通过查询,验证了数字123的数据类型是整型,"I Love Python!"的数据类型为字符串类型。
id()函数用于获取对象的内存地址。语法格式如下。
例如,查看数字123和字符串"I Love Python!"在内存中的地址。
基本思路:通过input()函数让用户从控制台输入一个三位数,并将输入的内容强制转化成整型数值,然后计算出百位、十位、个位上的数字。算术运算符//和%分别表示整除和取余。百位上的数等于该数整除100取商,十位上的数等于该数整除10后的商再对10取余,个位上的数等于该数对10取余,最后将结果输出显示。
代码如下。
以上是通过数学运算的方式将一个三位数中各个位上的数字计算出来,大家也可自行查询如何借助Python语言中的函数如divmod()函数、map()函数编程实现该案例。在学习了字符串的切片后,本案例也可使用字符串的切片来完成,而且代码量更少、更加简单。