找回密码
 会员注册
查看: 35|回复: 0

Python学习手册(第四版)学习笔记10-语句编写的通用规则

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72027
发表于 2024-9-7 13:41:28 | 显示全部楼层 |阅读模式
个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。本文较简单,5-10分钟即可阅读完成。介绍Python基本过程语句并讨论整体语法模型通用规则(冒号、省略、终止、缩进、其他特殊情况),以及简短示例。暂不介绍函数、类、模块以及异常。目录语句Python的语句语法-冒号(:)语法-省略括号语法-终止语句语法-缩进为什么使用缩进语法 语句特殊情况示例一行多个横跨多行代码块规则简短示例交互式循环输入数据做数学运算检查输入处理错误try语句处理错误嵌套三层语句语句就是写出来要告诉Python你的程序应该做什么的句子。如果程序是“用一些内容做事情”的话,那么语句就是你指定程序要做哪些事情的方式。Python程序结构程序构成:1.程序由模块构成。2.模块包含语句。3.语句包含表达式。4.表达式建立并处理对象。Python的语法实质上是由语句和表达式组成的。表达式处理对象并嵌套在语句中。语句编码实现程序操作中更大的逻辑关系——它们使用并引导表达式处理对象。此外,语句还是对象生成的地方(例如,赋值语句中的表达式),有些语句会完全生成新的对象类型(函数、类等)。语句总是存在于模块中的,而模块本身则又是由语句来管理的。Python的语句下图表10-1总结了Python的语句集。这里会介绍Python基本过程语句并讨论整体语法模型。暂不介绍函数、类、模块以及异常,后续其他文章继续介绍。表10-1中包含了Python3.0中的语句形式,每部分代码都说明了其具体语法和用途。如下是关于内容的一些说明:·赋值语句以不同的语法形式呈现,基本的、序列的、扩展的等等。print在Python3.0中不是一个保留字,也不是一条语句,而是一个内置的函数调用;由于它几乎总是作为一条表达式语句运行(即,自己单独一行),通常将其看做是一条语句类型。语法-冒号(:)所有Python的复合语句(也就是语句中嵌套了语句)都是首行以冒号结尾,首行下一行嵌套的代码往往按缩进的格式书写,如下所示:冒号是不可或缺的,遗漏掉冒号可能是Python新手最常犯的错误之一。要使得输入冒号变成潜意识里的一种习惯。语法-省略括号在Python中,可以省略括号而语句依然会正常工作:从技术角度来讲,由于每个表达式都可以用括号括起来,在这里的Python程序中加上括号也没什么问题,不会被视为错误的if形式。但是不要这么做,Python方式就是在这类语句中完全省略括号。>>>x=1>>>y=0 >>>ifx>>if(x>>a=1;b=2;print(a+b)3这是Python中唯一需要分号的地方——只能把简单语句放在一起作为语句界定符。例如,赋值操作、打印和函数调用。复合语句还是必须出现在自己的行里。横跨多行可以让一个语句的范围横跨多行。只需要用一对括号把语句括起来就横跨多行:括号(())、方括号([])或者字典的大括号({})。任何括在这些符号里的程序代码都可横跨好几行。语句将一直运行,直到Python遇到包含闭合括号的那一行。例如,连续几行列表的常量:list=[1, 2, 3]dict={'a':1, 'b':2, 'c':3}tuple1=(1, 2, 3)由于程序被括在一对方括号里,Python就会接着运行下一行,直到遇见闭合的方括号为止。花括号包含的字典(以及集合常量、字典解析以及集合解析)也可以用这个方法横跨数行,并且圆括号可以处理元组、函数调用和表达式。连续行的缩进是无所谓的,尽管常识告诉我们为了让程序具有可读性,那几行也应该对齐。括号是可以包含一切的——因为任何表达式都可以包含在内,只要插入一个左边括号,你就可以到下一行接着写你的语句。x=(a+b+ c+d)括号也适用于复合语句。不管你在什么地方需要写一个大型的表达式,只要把它括在括号里,就可以在下一行接着写:if(a==1and b==2and c==3): print('hi')代码块规则前面说嵌套代码块中的语句一般都与向右缩进相同的量相关联。下面的特殊案例,说明复合语句的主体可以出现在Python的首行冒号之后。ifx>y:print(x)这种可以编辑单行if语句、单行循环等。只有当复合语句本身不包含任何复合语句的时候,才能这样做。只有简单语句可以跟在冒号后面,比如赋值操作、打印、函数调用等。较复杂的语句仍然必须单独放在自己的行里。复合语句的附带部分(例如if的else部分)也必须在自己的行里。如果将所有语句都分别放在不同的行里并总是将嵌套代码块缩进,那么程序代码会更容易读懂并且便于后期的修改。简短示例下面通过简单的实例来说明实际应用中语句语法和语句嵌套相结合的方式,并在其间介绍一些语句。交互式循环假设要写个Python程序,要求在控制窗口与用户交互。你需要写一个能够读取用户键盘输入数据的循环并打印每次读取的结果。也就是写一个标准的“读取/计算/打印”的循环程序。在Python中,这种交互式循环的典型模板代码可能会像这样。whileTrue:reply=input('输入信息:')ifreply=='stop':breakprint(reply.upper())这段代码使用了一些概念:利用了Python的while循环,它是Python最通用的循环语句。简单地说,它的组成为:while这个单词,之后跟一个其结果为真或假的表达式,再接一个当顶端测试为真(这时的True看做是永远为真)时不停地迭代的嵌套代码块。input内置函数,在这里用于通用控制台输出,它打印可选的参数字符串作为提示,并返回用户输入的回复字符串。利用嵌套代码块特殊规则的单行if语句也在这里出现:if语句体出现在冒号之后的首行,而并不是在首行的下一行缩进。Python的break语句用于立即退出循环。也就是完全跳出循环语句而程序会继续循环之后的部分。如果没有这个break退出语句,while循环会因为测试总是真值而永远循环下去。语句组合实质上是指:从用户那里读取一行并用大写字母打印,直到用户输入"stop"为止。还有一些其他的方式可以编写这样的循环。要注意的是,在while首行下面嵌套的三行的缩进是相同的。由于它们是以垂直的方式对齐的,所以它们是和while测试相关联的并重复运行的代码块。源文件的结束或是一个缩进较少的语句都能够终止这个循环体块。这个程序取得的某种程度上的交互:输入信息:11输入信息:2222输入信息:hiHI输入信息:stopPython2.6或之前的版本应该使用raw_input而不是input,并且你可以在print语句中省略外围的圆括号。输入数据做数学运算现在想对数值的输入做些数学运算。例如,求平方。由于用户输入的是文本信息,需要转为整数,用int()>>>reply='20'>>>reply**2Traceback(mostrecentcalllast):File" ",line1,inreply**2TypeError:unsupportedoperandtype(s)for**orpow():'str'and'int'>>>int(reply)**2400现在重新编写循环来执行必要的数学运算。whileTrue:reply=input('输入信息:')ifreply=='stop':breakprint(int(reply)**2)print('bye')像以前一样,这个脚本用了一个单行if语句在"stop"处退出,但是也能够转换输入来进行需要的数学运算。这个版本在底端加了一条结束信息。最后一行的print语句不像嵌套代码块那样缩进,不会看做是循环体的一部分,只能退出循环之后运行一次。输入信息:24输入信息:10100输入信息:stopbye检查输入处理错误上面输入的是数字,如果输入的是非数字呢?输入信息:rTraceback(mostrecentcalllast):File" ",line4,inprint(int(reply)**2)ValueError:invalidliteralforint()withbase10:'r'内置int函数会发生异常。如果想要我们的脚本够健全,可以事先用字符串对象的isdigit方法检查字符串的内容。>>>s='123'>>>t='xx'>>>s.isdigit(),t.isdigit()(True,False)下面这个新版本的交互式脚本使用全方位的if语句来避免错误导致的异常。whileTrue:reply=input('输入信息:')ifreply=='stop':breakelifnotreply.isdigit():print('输入错误,请输入数字')else:print(int(reply)**2)print('bye')完整形式的构成是:if这个关键字后面接测试以及相配的代码块,一个或多个选用的elif(elseif)测试以及代码块,以及一个选用的else部分和末尾的一个相配的代码块来作为默认行为。Python会执行首次测试为真所相配的代码块,按照由上至下的顺序,如果所有测试都是假,就执行else部分。运行新脚本时,程序会在错误发生前捕捉它,然后打印出(虽然不灵活)错误消息来进行说明。输入信息:39输入信息:r输入错误,请输入数字输入信息:11输入信息:stopbyetry语句处理错误在Python中,处理错误最通用的方式是使用try语句,用它来捕捉并完全复原错误。这里不深入,后续文章做详细介绍。使用try会让有些人认为这要比上一个版本更简单一些:whileTrue:reply=input('输入信息:')ifreply=='stop':breaktry:num=int(reply)except:print('输入错误,请输入数字')else:print(num**2)print('bye')这个版本的运作方式和上一个版本的相同,这里把刻意进行错误检查的代码,换成了假设转换可工作的代码,然后把无法运作的情况,包含在异常处理器中。这个try语句的组成是:try关键字后面跟代码主要代码块(我们尝试运行的代码),再跟except部分,给异常处理器代码,再接else部分,如果try部分没有引发异常,就执行这一部分的代码。Python会先执行try部分,然后运行except部分(如果有异常发生)或else部分(如果没有异常发生)。从语句嵌套来看,try、except以及else这些关键字全都缩进在同一层次上,它们全都被视为单个try语句的一部分。在Python中,else可出现在if语句中,也可以出现在try语句以及循环中——其缩进会告诉你它属于哪个语句。在这个例子中,try语句从单词try开始,一直到else语句下面缩进的代码结束,因为else和try为相同的缩进层级。嵌套三层如果有必要的话,嵌套甚至可以让我们再深入一步。例如,我们可以根据有效输入资料的相对大小,分支到一组替代动作上。whileTrue:reply=input('输入信息:')ifreply=='stop':breakelifnotreply.isdigit():print('输入错误,请输入数字')else:num=int(reply)ifnum
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 23:00 , Processed in 0.721343 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表