购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 变量

在Python中,变量严格意义上应该称为“名字”,也可以理解为标签。例如:

本行代码中的python就是一个变量。在大多数编程语言中,都把这一过程称为“把值存储在变量中”,即把字符串序列“学会Python还可以飞”存储在计算机内存的某个位置。你不需要准确地知道它们到底在哪里,只要告诉Python这个字符串序列的名字是python,就可以通过这个名字来引用这个字符串序列了。例如,引用python变量,将其打印输出,代码如下:

3.1.1 变量的命名和赋值

在Python中,不需要先声明变量名及其类型,直接赋值,即可创建各种类型的变量。但是变量的命名并不是任意的,应遵循以下几条规则:

变量名必须是一个有效的标识符,如height、m_name、h1等。

变量名不能使用Python中的保留字。例如,不能是int、print等。

慎用小写字母l和大写字母O(以防和数字1和0混淆)。

应选择有意义的单词作为变量名,如number、weight等。

为变量赋值,可以通过赋值运算符号“=”来实现。语法格式为:

例如,创建一个变量,为其赋值521,则创建的变量就是整型变量:

如果为变量赋值一个字符串,则创建的变量就是字符串类型。例如:

另外,Python是一种动态类型的语言,也就是说,变量的类型可以随时变化。例如,在IDLE中,创建变量martial,并赋值为字符串“乾坤大挪移”,然后输出该变量的类型,可以看到该变量为字符串类型,再将变量赋值为数值521,并输出该变量的类型,可以看到该变量为整型。执行过程如下:

说明

在Python语言中,使用内置函数type()可以返回变量类型。

在Python中,允许多个变量指向同一个值。例如,将两个变量都赋值为数字2048,再分别应用内置函数id()获取变量的内存地址,将得到相同的结果。执行过程如下:

说明

在Python语言中,使用内置函数id()可以返回变量所在的内存地址。

3.1.2 变量的基本类型

变量的数据类型分为很多种,下面主要介绍数值型、字符串型、布尔型3种基本数据类型。例如,年龄、身高等信息可以使用数值型变量存储;名字、性别等信息可以使用字符型变量存储;婚否等信息可以使用布尔型变量存储,如图3.1所示。

1.数值类型

数值类型主要包含整数、浮点数和复数。接下来一一介绍。

1)整数

整数用来表示整型数值,即没有小数部分的数值。Python中,整数包括正整数、负整数和0,其位数是任意的(当超过计算机自身的计算功能时,会自动转用高精度进行计算)。例如,1314、3456789532900653、−2020、0等都是整数。

图3.1 数据类型示例

2)浮点数

浮点数由整数部分和小数部分组成,主要用于处理包括小数的数,如1.414、0.5、−1.732、3.1415926535897932384626等。浮点数也可以使用科学计数法表示,如3.7e2、−3.14e5和6.16e−2等。

注意

在使用浮点数进行计算时,可能会出现小数位数不确定的情况。例如,计算0.1+0.1时,会得到0.2;而计算0.1+0.2时,将得到0.30000000000000004(而不是0.3)。执行过程如下:

这种问题几乎存在于所有语言中,原因是计算机精度存在误差,因此忽略多余的小数位即可。

3)复数

Python中的复数与数学中的复数含义完全一致,表现形式略有不同。两者都由实部和虚部组成,但数学中使用i表示虚部,Python中用j或J表示虚部。当表示一个复数时,可以将其实部和虚部相加,例如,一个复数的实部为5.21,虚部为13.14j,则这个复数为5.21+13.14j。

2.字符串类型

字符串就是连续的字符序列,是计算机所能表示的一切字符的集合。在Python中,字符串属于不可变序列,通常使用单引号(' ')、双引号(" ")或三引号(''' '''和""" """)括起来。这几种引号形式在语义上没有差别,只是在形式上有些差别。其中,单引号和双引号中的字符序列必须在同一行上,而三引号内的字符序列可以分布在连续多行中。例如:

3.布尔类型

布尔类型主要用来表示真值或假值。在Python中,标识符True和False被解释为布尔值。另外,Python中的布尔值可以转换为数值,True表示1,False表示0。

说明

Python中,布尔类型的值可以进行数值运算,例如“False + 1”的结果为1。但是不建议对布尔类型的值进行数值运算。

在Python中,所有对象都可以进行真值测试。其中,只有下面列出的几种情况得到的值为假,其他对象在if或者while语句中都表现为真。

False或None。

数值中的零,包括0、0.0和虚数0。

空序列,包括空字符串、空元组、空列表、空字典。

自定义对象的实例,该对象的__bool__方法返回False或者__len__方法返回0。

3.1.3 变量的输入与输出

变量的输入与输出是计算机最基本的操作。基本的输入是指从键盘上输入数据的操作,用input()函数输入数据。基本的输出是指在屏幕上显示输出结果的操作,用print()函数输出。

1.用input()函数输入

使用内置函数input()可以接收用户的键盘输入。input()函数的基本语法格式如下:

其中,variable为保存输入结果的变量,双引号内的文字用于提示要输入的内容。

例如,想要接收用户输入的内容,并保存到变量tip中,可以使用下面的代码:

在Python中,无论输入的是数字还是字符都将被作为字符串读取。如果想要接收数值,需要把接收到的字符串进行类型转换。例如,想要接收整型的数字并保存到变量age中,可以使用下面的代码:

说明

input()函数接收内容时,数值内容可直接输入,且接收到的内容也是数值类型;如果要输入字符串类型的内容,需要将对应的字符串使用引号括起来,否则会报错。

2.用print()函数输出

默认情况下,使用内置的print()函数可以将结果输出到IDLE或者标准控制台上。其基本语法格式如下:

其中,输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出;也可以是包含运算符的表达式,此类内容将计算结果输出。例如:

多学两招

默认情况下,一条print()语句输出后会自动换行。如果想要一次输出多个内容且不换行,需要将输出的内容用英文半角的逗号分隔。例如,下面的代码将在同一行中输出变量a和b的值:

【实例3.1】 输出你的年龄。 (实例位置:资源包\Code\03\01)

用input()函数输入你的年龄,用print()函数输出数据。具体代码如下:

运行结果如图3.2所示。

【实例3.2】 用print()函数输出字符画。 (实例位置:资源包\Code\03\02)

用print()函数输出一把手枪的字符画,具体代码如下:

说明

代码中的字符是使用搜狗输入法中的特殊符号编写的。

运行结果如图3.3所示。

图3.2 数据输入和输出

图3.3 输出字符画

3.1.4 变量的计算

变量的计算离不开运算符和表达式。运算符是一些特殊的符号,可用于数学计算、比较大小和逻辑运算等。Python中的运算符主要包括算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符和位运算符。使用运算符将不同类型的数据按照一定规则连接起来的式子,称为表达式。例如,使用算术运算符连接起来的式子称为算术表达式,使用逻辑运算符连接起来的式子称为逻辑表达式。下面就来介绍Python中常用的5类运算符。

1.算术运算符

算术运算符主要用于处理四则运算,在数值的处理中应用得最多。常用的算术运算符如表3.1所示。

表3.1 常用的算术运算符

【实例3.3】 计算a,b的各种表达式。 (实例位置:资源包\Code\03\03)

具体代码如下:

运行结果如图3.4所示。

图3.4 算术表达式结果

多学两招

在Python中,“+”运算符还具有拼接功能,可以将两个字符串进行拼接,例如:

也可以将字符串与数值进行拼接,例如:

2.赋值运算符

赋值运算符主要用来为变量赋值。使用基本赋值运算符“=”,可将“=”右边的变量值赋给左边的变量。也可以先进行某些运算,然后再赋值给左边的变量,这样的赋值运算符称为复合赋值运算符。Python中常用的赋值运算符如表3.2所示。

表3.2 常用的赋值运算符

3.比较(关系)运算符

比较运算符又称为关系运算符,用于对变量或表达式的结果进行比较。如果比较结果为真,则返回True;如果为假,则返回False。比较运算符通常用在条件分支结构及循环结构中,作为判断的依据。

Python中的常用比较运算符如表3.3所示。

表3.3 常用的比较运算符

注意

初学者很容易混淆赋值运算符“=”和比较运算符“==”。一定要多看几遍示例,彻底弄明白它们之间的区别。

多学两招

在Python中,当需要判断一个变量是否介于两个值之间时,可以采用“值1 <变量<值2”的形式,例如“0 <a<100”。

【实例3.4】 比较化学、物理、数学、生物的成绩。 (实例位置:资源包\Code\03\04)

具体代码如下:

运行结果如图3.5所示。

4.逻辑运算符

逻辑运算符可对真和假两种布尔值进行运算,运算后的结果仍是一个布尔值。逻辑运算符主要包括and(逻辑与)、or(逻辑或)和not(逻辑非)。表3.4和表3.5列出了逻辑运算符的用法。

图3.5 比较表达式结果

表3.4 逻辑运算符

使用逻辑运算符进行逻辑运算时,其运算结果如表3.5所示。

表3.5 逻辑运算的结果

【实例3.5】 参加手机店的打折活动。 (实例位置:资源包\Code\03\05)

某手机店在每周二上午10~11点和每周五下午14~15点,对华为系列手机进行折扣让利活动。想参加折扣活动的顾客就要在时间上满足:周二10:00 a.m.~11:00 a.m.或者周五2:00 p.m.~3:00 p.m.。

通过逻辑运算符模拟可否参加手机店的打折活动,具体代码如下:

代码解析:

(1)第2行代码:input()函数用于接收用户输入的字符序列。

(2)第3行代码:由于input()函数返回的结果为字符串类型,所以需要进行类型转换,将其转换为整型。

(3)第5~8行代码使用if…else条件判断语句,该语句主要用来判断程序是否满足某种条件。该语句将在第3.2节进行详细讲解,这里只需要了解即可。第5行代码中对条件进行判断时,使用了逻辑运算符and、or和比较运算符“==”“>=”“<=”。

按F5键运行实例,首先输入“星期五”,然后输入时间19,将显示如图3.6所示的结果;再次运行实例,输入“星期二”,时间为10,将显示如图3.7所示的结果。

图3.6 不符合条件的运行效果

图3.7 符合条件的运行效果

说明

本实例未对错误输入信息进行校验,所以为保证程序的正确性,请输入合法的星期和时间。有兴趣的读者可以自行添加校验功能。

5.位运算符

使用位运算符,可直接对数字在内存中的二进制位进行操作。首先要把执行运算的数据转换为二进制数,然后才能进行执行位运算。Python中的位运算符包括位与(&)、位或(|)、位异或(^)、取反(~)、左移位(<<)和右移位(>>)。

说明

整型数据在内存中以二进制的形式表示。例如,7的32位二进制数形式如下:

其中,左边最高位是符号位,0表示正数,1表示负数。负数通常采用补码形式表示。例如,−7的32位二进制数形式如下:

1)位与运算符

位与运算的运算符为“&”。运算法则如下:两个操作数据的二进制表示,只有对应数位都是1时,结果数位才是1,否则为0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。例如,12&8的运算过程如图3.8所示。

2)位或运算符

位或运算的运算符为“|”。运算法则如下:两个操作数据的二进制表示,只有对应数位都是0,结果数位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。例如,4|8的运算过程如图3.9所示。

3)位异或运算符

位异或运算的运算符是“^”。运算法则如下:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1。若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。例如,31^22的运算过程如图3.10所示。

图3.8 12&8的运算过程

图3.9 4|8的运算过程

图3.10 31^22的运算过程

4)位取反运算符

位取反运算也称位非运算,运算符为“~”。位取反运算就是将操作数中对应的二进制数1修改为0,0修改为1。例如,~123的运算过程如图3.11所示。

【实例3.6】 输出位运算的结果。 (实例位置:资源包\Code\03\06)

使用print()函数输出图3.8~图3.11的位运算结果,具体代码如下:

图3.11 ~123的运算过程

运算结果如图3.12所示。

5)左移位运算符

左移位运算符“<<”可将一个二进制数向左移动指定的位数,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移位运算相当于乘以2的 n 次幂。

例如,int型数据48对应的二进制数为00110000,将其左移1位,根据左移位运算符的运算规则可以得出(00110000<<1)=01100000,转换为十进制数就是96(相当于48*2);将其左移2位,根据左移位运算符的运算规则可以得出(00110000<<2)=11000000,转换为十进制数就是192(相当于48*2 2 )。其执行过程如图3.13所示。

图3.12 运算结果

图3.13 左移位运算

具体代码如下:

运行结果如图3.14所示。

6)右移位运算符

右移位运算符“>>”用于将一个二进制操作数向右移动指定的位数,右边(低位端)溢出的位被丢弃。在填充左边(高位端)的空位时,如果最高位是0(正数),左侧空位填入0;如果最高位是1(负数),左侧空位填入1。右移位运算相当于除以2的 n 次幂。

48右移1位的运算过程如图3.15所示。−80右移2位的运算过程如图3.16所示。

图3.14 左移位运算结果

图3.15 48右移一位的运算过程

具体代码如下:

运行结果如图3.17所示。

图3.16 −80右移两位的运算过程

图3.17 右移位运算结果

多学两招

由于移位运算的速度很快,在程序中遇到表达式乘以或除以2的 n 次幂的情况时,一般采用移位运算来代替。 JpVUPBuYxxP8ao0UVwZ3+sJPwUgppdSQYLdzxaNhY4j12ugPrBTXw0MhmJUT69fq

点击中间区域
呼出菜单
上一章
目录
下一章
×