Python的编程格式丰富多样,本章将系统介绍Python的输入输出、运算符、表达式、控 制结构以及函数等内容,主要包括以下任务。 任务一:Python输入与输出应用。 任务二:Python运算符与表达式。 任务三:Python的分支应用。 任务四:Python的循环应用。 任务五:Python函数应用。 本章教学目标 了解Python的基本语法,掌握基本的Python编程,能够独立动手编写程序。 5.ton输入与输出应用 1 Pyh 本章主要介绍Python的编程。Python的语法结构非常丰富,初学者在学习Python时 建议以多学多练为主。本节主要介绍Python的注释和常用的输入、输出函数的使用。 本章以制作一个简单的Python学习系统的完整过程为例,学习Python的编程。首 先,简单地分析Python学习系统有哪些功能,为了使后续的代码更简洁,Python学习系统 的主要功能仅包括实现播放视频、做练习题、自由练习。随着读者编程能力的提升,Python 学习系统可以扩展更多功能。 5.1 Pyhn的基本语法 1.to 本节主要介绍Python的注释、内置数据类型以及变量的概念和应用。 1. 注释 任何计算机的编程语言都会存在一种非常特殊的文字,计算机不会去识别也不会执行 它,但是这段内容可以帮助读者们看懂这个程序是做什么的、怎么实现的,这样的内容为注 释。好的注释可以提升代码的可读性。 1)井号注释 井号注释将“#”放在需要注释的文字开头,以便Python解释器识别并跳过该行“#” 76 后面的文字。 现在读者可以尝试将4.4.1节中提到的第一个程序,加入井号注释。“#”表示从“#” 开始到这行结束的文字是注释。 例1,如图5.1所示,参见“源代码/ch5/1.hello.py”。 图5.1 运行语句带注释 2)三引号注释 Python中还可以使用三单引号表示多行文本的文档注释或表示多行文本字符串充当 代码的引用对象。一对三单引号('''...''')或者一对三双引号("""...""")之间的内容不属于 任何语句,也会被解释器认为是注释。 例2,参见“源代码/ch5/2.comment.py”。 1. ''' 2. This is Multiline String. 3. It may be programming comments. 4. ''' 5. print("多行文本注释,可以充当程序代码文档注释") 6. s =''' 7. Infomation of Python 8. Language: Python 9. characteristic: simple, explicit 10. ''' 11. print(s) 在这段代码中,程序第1~4行是通过三(单)引号括起来的一段文字,这段文字不属于 任何语句,因此Python的解释器认为它是一段注释。 而程序第6~10行里也存在三单引号括起来的一段文字,而这段文字赋值给了变量s, 此时这段文字在Python解释器看来,它不是注释,而是一个变量s的引用对象。因此,程序 第11行可以输出这个s变量,即输出了这段文字,如图5.2所示。 图5.2 三(单)引号注释代码运行结果 77 由此可以得出,三引号(包括三单引号和三双引号)可以用于程序的注释;它也可以嵌入 语句中,充当多行字符串的引用。 2.内置数据类型 Python的数据类型是由赋值决定的,但是Python 为强类型语言,因此需要学习 Python的数据类型。下面介绍Python的内置数据类型,Python的内置数据类型通常是基 本数据类型。 1)数字 Python提供整数类型、浮点数类型以及复数类型。 整数类型:包含0和正负整数,可以用十进制、二进制、八进制、十六进制表示。例如 5468(十进制)、0x6e(十六进制)。 浮点数类型:浮点数可以用定点小数或科学记数法表示。例如23.5(定点小数)、1.6e8 (科学记数法)。 复数类型:Python是支持复数类型的,并可以支持复数计算。Python语言中用j表示 -1,例如:6+3j(复数的实数为6,复数的虚数为3j)。 2)字符串 字符串通常用单引号、双引号或三单(双)引号作为界定符,内容可以是字母、数字或符 号等,例如a' '、h' ello'、1' 23'、'a' aa@bbb.ccc''。 3)布尔型 布尔型数据只有两个:True和False,通常是逻辑运算或关系运算的结果,也可以是成 员运算或身份运算的结果。例如,3>5的结果为False。 4)空类型 空类型就是空值:None。这个类型可以自动转换为任何其他类型。 3.Python变量 Python不需要事先声明变量名和类型,只需要通过赋值即可创建各种类型的变量, Python的这种特点直接反映它是一种动态类型语言。 Python的变量是有类型的,而且是强类型,这意味着如果希望将字符串转换为整数,必 须通过int()函数进行转换。Python的变量通过赋值语句后面的表达式计算出的值决定变 量的类型。一旦类型确定了,那么将不能随意改变。 例3,参见“源代码/ch5/3.variable.py”。 1. >>>t =100 #将100 赋值给t 2. >>>t 3. 100 4. >>>type(t) #显示t 的类型 5. <class 'int'> 例如将整数100赋值给t,那么,t这个变量的类型就确定为整数类型了。使用内置函 数type()可以查看变量t的类型。 Python的变量是存储在内存中的。在内存中,Python的变量是作为一个地址去访问 78 变量的值,如何显示出变量的地址? 可以使用内置函数id()显示变量的值。 1. >>>id(t) #t 的内存地址 2. 140715236139888 3. >>>id(k) #K 的内存地址 4. 2170771568656 5. >>>id(t) ==id(k) #比较K 和t 的内存地址是否相同 6. False 请思考,如果要判断t和k的值是否相等,代码如何写? 5.1.2 print输出应用 Python使用内置print函数进行输出操作,在Python2中print不是函数,但是却履行 着函数的职责。Python3彻底将print改变成了函数。 要输出一段文字,可以将文字放入print()的括号内,即文字为函数的参数。 下面实现的代码是在本章提到的Python学习系统的菜单的输出。输出菜单让用户可 以看到Python学习系统有哪些功能。 Python学习系统需要展示给使用者的菜单提示如下。 欢迎使用Python 学习系统 请选择以下功能数字 1.播放学习视频 2.做练习题 3.自由练习 4.结束 代码可以这样完成(用其他的完成方式也是可以的,欢迎读者用各种方式完成这样的 输出)。 例4,参见“源代码/ch5/4.print.py”。 1. welcome =''' 2. 欢迎使用Python 学习系统 3. 请选择以下功能数字 4. 1.播放学习视频 5. 2.做练习题 6. 3.自由练习 7. 4.结束 8. ''' 9. print(welcome) #打印多行字符串 5.1.3 input输入应用 在程序运行时,常常需要用户给程序提供用于计算、判断的参数,这时需要采用input() 函数,让用户通过键盘来输入参数。input()的用法如下。 79 variable =input() 或者 variable =input('prompt line') input函数返回键盘输入的字符串;因此,variable的数据类型是字符串,它不能直接参 与数字运算,即使输入的是数字。input()函数可以带参数,也可以不带参数。input()函数 的参数会输出到屏幕,提示用户输入合适的内容,因此,这个参数通常是字符串类型。 前面提到了Python学习系统的菜单输出界面,已经成功地展示了各项功能的菜单,现 在用户需要选择相应的菜单,又应该如何做呢? 使用input函数来输入信息,只需要增加以下语句。 1. c =input("你的选择是: ") #提示用户从键盘输入,并返回键盘输入的字符串 2. print("你选择的是菜单第" +c +"项") #打印用户输入的提示 注意,这里虽然输入的变量c是数字,但是它是字符串类型,如果希望将它当作数字来 处理,还需要强制转换它的类型,可以为int(c)。 上面的例子存在问题。如果使用者无法理解这段提示,或者故意捣乱,输入的是5而非 1~4,这时,程序运行结果错误,如图5.3所示。 图5.3 例4的运行结果 事实上,Python学习系统没有菜单第5项,这时程序应该提示错误,但是程序还是“傻 傻地”正常地运行。这种情况将在5.3.1节进一步改进。 例5,参见“源代码/ch5/5.input.py”。 1. welcome =''' 2. 欢迎使用Python 学习系统 3. 请选择以下功能数字 4. 1.播放学习视频 5. 2.做练习题 6. 3.自由练习 7. 4.结束 8. ''' 9. print(welcome) 10. c =input("你的选择是: ") 11. print("你选择的是菜单第" +c +"项") #打印用户输入的提示 80 5.2 Python运算符与表达式 Python语言提供了丰富而且简单的运算符。最主要、最常见的运算符主要有以下 几类。 (1)算术运算符:主要是对两个对象进行算术运算,其运算逻辑与数学中的计算概念 相似。 (2)赋值运算符:赋值运算符是编程开发中最常用的运算符,即对一个对象进行赋值, 将运算符右侧的值赋值给左侧的变量。 (3)比较运算符:比较运算符主要用于对两个对象进行比较,其对象可以是数值也可 以是字符串。 (4)逻辑运算符:用于逻辑运算的符号,一般用于判断两个对象的与、或、非的结果,返 回一个布尔值,其运算原理与数学中的逻辑运算相同。 (5)位运算符:位运算符对Python对象按照二进制方式的每一位的值进行操作,例 如,与运算、或运算、移位运算等。 (6)成员运算与身份运算:成员运算判断两个对象是否存在包含关系;身份运算判断 是否引用的是同一对象。 当然Python还有其他类型的运算符,在后面会进一步学习。为了让读者对Python的 运算符有初步的认识,现在通过一个案例展示Python运算符的运用。 5.2.1 运算符与表达式案例 Python表达式是由变量、常量、运算符、函数等组成的。它主要帮助程序做相应数字的 计算、逻辑判断、关系成员判断、对象判别等。下面看看Python的运算符和表达式到底能 做什么? 例如,一元二次方程。是否存在两个不相等的实数根、两个相等的实数根或不存在实根 是通过式(5.1)的Δ 值是否大于0、等于0、小于0来判别的。 Δ =b2 +4ac (5.1) 求解这两个根需要使用式(5.2) x1 = -b+ b2 -4ac 2a x2 = -b- b2 -4ac 2a (5.2) 利用Python计算一元二次方程的根,可以这样写Python程序。 例6,参见“源代码/ch5/6.express.py”。 1. import math 2. a=1 #赋值参数a 3. b=-3 #赋值参数b 4. c=2 #赋值参数c 5. delta =b**2-4*a*c #计算delta 81 6. print(delta) #打印delta 的值 7. x1=(-b+math.sqrt(delta))/(2*a) #计算x1 8. x2=(-b-math.sqrt(delta))/(2*a) #计算x2 9. print(x1,x2) #打印x1,x2 的值 此程序因为使用了标准库math模块,而math模块并不是默认导入的,需要手动导入, 因此程序第1行就利用import语句进行导入。import语句的语法如下。 import 模块名 [as 别名] 或 from 模块名import 函数名 在例6中,直接导入了math模块,而没有给math模块定义别名。当然可以定义别名, 例如,importmathassx。如果这样做了,那么程序第7~8行的math都要替换为sx。 在程序中,仅使用了sqrt()函数,也可以导入从整个模块变为某一个函数,例如from mathimportsqrt,这样导入sqrt()函数后,程序第7~8行就要去掉“math.”。 程序第2~4行是对一元二次方程的a、b、c三个变量进行赋值,a代表二次项系数,b代 表一次项系数,c代表常数。 程序第5行计算Δ 的值,这个程序仅显示出了Δ 的值,并没有做判断。实际上,如果需 要判断它是否是实数根,需要如何写这样的表达式呢? 只需要将第6~9行进行修改,详见 5.3.2~5.3.4节。 程序第7~8行则是用公式计算x1和x2的值。 在程序最后,记得要让计算机将计算的结果输出,这样程序才算真正地完成了。程序的 最后一行输出x1和x2的值。 如果需要更多的运算符及其功能的详细介绍,可以查看5.2.2~5.2.5节。 5.2.2 Python算术和赋值运算符 Python吸取了各种语言的优点,运算符非常丰富,甚至还有其他语言没有的运算符。 1.算术运算符 算术运算符专门用来处理数学的计算问题,当然如果遇到复杂的计算还需要使用math 模块中的函数,例如sin、cos这些函数。 Python的算术运算符比其他语言丰富,功能强大,如表5.1所示。 表5.1 算术运算符 运算符描 述实 例 + 加,两个对象相加a+ b(a=10,b=20)输出结果30,"hello"+"world"计算结 果"helloworld" - 减,前一个对象减后一个对象a- b(a=10,b=20)输出结果-10 续表 82 运算符描 述实 例 * 乘,两个对象相乘,或字符串重复 多次a*b(a=10,b=20)输出结果200,"a"*3计算结果"aaa" / 除b/a(a=10,b=20)输出结果2 % 取模,返回除法的余数b%a(a=10,b=20)输出结果0 ** 幂a**b(a=10,b=20)输出结果100000000000000000000 // 整除,返回商的整数部分9//2计算结果4,5.0//3计算结果1.0 上述脚本可以在IDLE的交互式界面中运行尝试体验。 例7-1,(包括5.2节所有的shell代码),参见“源代码/ch5/7.operation.py”。 1. >>>a=10 2. >>>b=20 3. >>>a+b 4. 30 5. >>>a-b 6. -10 7. >>>a*b 8. 200 9. >>>b/a 10. 2.0 11. >>>b%a 12. 0 13. >>>a**b #a 的b 次方 14. 100000000000000000000 15. >>>9//2 #9 整除2 的商 16. 4 17. >>>5.0//3 #5.0 整除2 的商 18. 1.0 19. >>>"hello"+"world" #字符串相连 20. 'helloworld' 21. >>>"a"*3 #字符串重复 22. 'aaa' 2.赋值运算符 Python的赋值运算符通常用来对变量赋值,Python提供了赋值运算符,详细如表5.2所示。 表5.2 赋值运算符 运算符描 述实 例 = 赋值 c=a+ b += 加法赋值c+=a相当于c=c+a 续表 83 运算符描 述实 例 -= 减法赋值c-= b相当于c=c- b *= 乘法赋值c*=a相当于c=c*a /= 除法赋值c/= b相当于c=c/b %= 取模赋值c%=a相当于c=c%a **= 幂赋值 c**=a相当于c=c**a //= 整除赋值c//=a相当于c=c//a 例7-2,参见“源代码/ch5/7.operation.py”。 1. >>>c =a +b 2. >>>c 3. 30 4. >>>c +=a #将c+a 的结果赋值给c 5. >>>c 6. 40 7. >>>c -=b #将c-b 的结果赋值给c 8. >>>c 9. 20 10. >>>c *=a #将c*a 的结果赋值给c 11. >>>c 12. 200 13. >>>c /=b #将c/b 的结果赋值给c 14. >>>c 15. 10.0 16. >>>c %=a #将c%a 的结果赋值给c 17. >>>c 18. 0 19. >>>c=10 20. >>>c **=a #将c**a 的结果赋值给c 21. >>>c 22. 10000000000 23. >>>c //=a #将c//a 的结果赋值给c 24. >>>c 25. 1000000000 5.2.3 Python比较运算符 Python的比较运算符通常是用来比较两个变量或对象(变量的类型可能是数字、字母 对象等)的大于、小于、等于等关系的运算符,详细如表5.3所示。 84 表5.3 比较运算符 运算符描 述实 例 == 判等。这里是双等号区分赋值的等于,其含义也是判断两个对象是否相等(a== b) ! = 不等,比较两个对象是否不相等(a! = b) > 大于(a> b) < 小于(a< b) >= 大于或等于(a>= b) <= 小于或等于(a<= b) 例如:3>5比较大小,所有人都会知道这是不正确,因此这个表达式返回的值就是 False,构造出一个布尔(Boolean)值,Boolean值只有True和False。 例7-3,参见“源代码/ch5/7.operation.py”。 1. a=10 2. b=20 3. print(a ==b) #输出False 4. print(a !=b) #输出True 5. print(a >b) #输出False 6. print(a <b) #输出True 7. print(a >=b) #输出False 8. print(a <=b) #输出True 5.2.4 Python逻辑运算符 Python的逻辑运算符,通常用来处理多个Boolean型变量或常量之间的运算,逻辑运 算符的使用如表5.4所示。 表5.4 逻辑运算符 运算符描 述实 例 and 与。如果x为False,那么返回False;如果x为True,y为False,结果依然False;如 果两个都为True,则为True xandy or 或。如果x为True,那么返回True;如果x为False,y为True,结果依然True;如 果两个都为False,则返回False xory not 非。如果y为False,那么返回True;如果y为True,那么返回False noty 参与and运算的两个变量x和y通常是一个Boolean型的变量,而and表示两个变量 值只有都为True时,这个表达式的值才为True,因此,这里简单概括“一假全假,全真 才真”。 而or运算的两个变量x和y只要有一个为True即可以返回True,所以,简单概括“一 真全真,全假才假”。