指令和程序

在程序设计中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础。计算机能处理的数据有很多种类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。Python中的数据类型很多,而且也允许我们自定义新的数据类型(这一点在后面会讲到),我们先介绍几种常用的数据类型。

  • 整型:Python中可以处理任意大小的整数(Python 2.x中有和long两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有int这一种了),而且支持二进制(如0b100,换算成十进制是4)、八进制(如0o100,换算成十进制是64)、十进制(100)和十六进制(0x100,换算成十进制是256)的表示法。
  • 浮点型:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如123.456)之外还支持科学计数法(如1.23456e2)。
  • 字符串型:字符串是以单引号或双引号括起来的任意文本,比如'hello'"hello",字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。
  • 布尔型:布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值(请注意大小写),也可以通过布尔运算计算出来(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)。
  • 复数型:形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j。实际上,这个类型并不常用,大家了解一下就可以了。

变量命名

对于每个变量我们需要给它取一个名字,就如同我们每个人都有属于自己的响亮的名字一样。在Python中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。

  • 硬性规则:
    • 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。
    • 大小写敏感(大写的a和小写的A是两个不同的变量)。
    • 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
  • PEP 8要求:
    • 用小写字母拼写,多个单词用下划线连接。
    • 受保护的实例属性用单个下划线开头(后面会讲到)。
    • 私有的实例属性用两个下划线开头(后面会讲到)。

当然,作为一个专业的程序员,给变量(事实上应该是所有的标识符)命名时做到见名知意也是非常重要的。

变量的使用

下面通过几个例子来说明变量的类型和变量使用。

在Python中可以使用type函数对变量的类型进行检查。程序设计中函数的概念跟数学上函数的概念是一致的,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解这个概念也不要紧,我们会在后续的章节中专门讲解函数的定义和使用。

  1. """
  2. 使用type()检查变量的类型
  3. Version: 0.1
  4. Author: 骆昊
  5. """
  6. a = 100
  7. b = 12.345
  8. c = 1 + 5j
  9. d = 'hello, world'
  10. e = True
  11. print(type(a)) # <class 'int'>
  12. print(type(c)) # <class 'complex'>
  13. print(type(d)) # <class 'str'>
  14. print(type(e)) # <class 'bool'>
  • int():将一个数值或字符串转换成整数,可以指定进制。
  • float():将一个字符串转换成浮点数。
  • str():将指定的对象转换成字符串形式,可以指定编码。
  • chr():将整数转换成该编码对应的字符串(一个字符)。
  • ord():将字符串(一个字符)转换成对应的编码(整数)。

下面的代码通过键盘输入两个整数来实现对两个整数的算术运算。

  1. """
  2. 使用input()函数获取键盘输入(字符串)
  3. 使用int()函数将输入的字符串转换成整数
  4. 使用print()函数输出带占位符的字符串
  5. Version: 0.1
  6. Author: 骆昊
  7. """
  8. a = int(input('a = '))
  9. b = int(input('b = '))
  10. print('%d + %d = %d' % (a, b, a + b))
  11. print('%d - %d = %d' % (a, b, a - b))
  12. print('%d * %d = %d' % (a, b, a * b))
  13. print('%d / %d = %f' % (a, b, a / b))
  14. print('%d // %d = %d' % (a, b, a // b))
  15. print('%d %% %d = %d' % (a, b, a % b))
  16. print('%d ** %d = %d' % (a, b, a ** b))

说明:上面的print函数中输出的字符串使用了占位符语法,其中%d是整数的占位符,%f是小数的占位符,%%表示百分号(因为百分号代表了占位符,所以带占位符的字符串中要表示百分号必须写成%%),字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中,运行上面的程序,看看程序执行结果就明白啦。

Python支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。

赋值运算符

赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。下面的例子演示了赋值运算符和复合赋值运算符的使用。

比较运算符有的地方也称为关系运算符,包括==!=<><=>=,我相信没有什么好解释的,大家一看就能懂,唯一需要提醒的是比较相等用的是==,请注意这个地方是两个等号,因为=是赋值运算符,我们在上面刚刚讲到过,==才是比较相等的比较运算符。比较运算符会产生布尔值,要么是True要么是False

  1. 比较运算符和逻辑运算符的使用
  2. Version: 0.1
  3. Author: 骆昊
  4. """
  5. flag0 = 1 == 1
  6. flag1 = 3 > 2
  7. flag2 = 2 < 1
  8. flag3 = flag1 and flag2
  9. flag4 = flag1 or flag2
  10. print('flag0 =', flag0) # flag0 = True
  11. print('flag1 =', flag1) # flag1 = True
  12. print('flag2 =', flag2) # flag2 = False
  13. print('flag3 =', flag3) # flag3 = False
  14. print('flag4 =', flag4) # flag4 = True
  15. print('flag5 =', flag5) # flag5 = False

说明:比较运算符的优先级高于赋值运算符,所以flag0 = 1 == 1先做1 == 1产生布尔值True,再将这个值赋值给变量flag0print函数可以输出多个值,多个值之间可以用,进行分隔,输出的内容之间默认以空格分开。

练习1:华氏温度转换为摄氏温度。

参考答案:

  1. """
  2. 将华氏温度转换为摄氏温度
  3. Version: 0.1
  4. Author: 骆昊
  5. """
  6. f = float(input('请输入华氏温度: '))
  7. c = (f - 32) / 1.8
  8. print('%.1f华氏度 = %.1f摄氏度' % (f, c))

说明:在使用print函数输出时,也可以对字符串内容进行格式化处理,上面print函数中的字符串%1.f是一个占位符,稍后会由一个float类型的变量值替换掉它。同理,如果字符串中有%d,后面可以用一个int类型的变量值替换掉它,而%s会被字符串的值替换掉。除了这种格式化字符串的方式外,还可以用下面的方式来格式化字符串,其中{f:.1f}{c:.1f}可以先看成是{f}{c},表示输出时会用变量f和变量c的值替换掉这两个占位符,后面的:.1f表示这是一个浮点数,小数点后保留1位有效数字。

练习2:输入圆的半径计算计算周长和面积。

参考答案:

  1. """
  2. 输入半径计算圆的周长和面积
  3. Version: 0.1
  4. Author: 骆昊
  5. """
  6. radius = float(input('请输入圆的半径: '))
  7. perimeter = 2 * 3.1416 * radius
  8. area = 3.1416 * radius * radius
  9. print('周长: %.2f' % perimeter)
  10. print('面积: %.2f' % area)

练习3:输入年份判断是不是闰年。

参考答案:

  1. """
  2. 输入年份 如果是闰年输出True 否则输出False
  3. Version: 0.1
  4. Author: 骆昊
  5. """
  6. year = int(input('请输入年份: '))
  7. # 如果代码太长写成一行不便于阅读 可以使用\对代码进行折行
  8. is_leap = year % 4 == 0 and year % 100 != 0 or \
  9. year % 400 == 0