python语句多如牛毛,对于很多初学者来说,不知道该如何下手。今天本文将着重讲述python语句中for语句和while语句。都知道这2种语句都属于循环语句,for语句属于遍历循环,while语句属于当型循环。除循环语句之外,今天本文还介绍了break、continue与pass三个用于控制循环结构中的程序流向的语句。在此延申基础上,还介绍了关于列表推导式,希望可以帮助大家更好地学习python语句。
循环语句又称为重复结构,用于反复执行某一操作。面对大数量级的重复运算,即使借助计算机,重复编写代码也是费时的,这时就需要借助循环语句。使用循环语句一般要用到条件判断,根据判断式的返回值决定是否执行循环体。
循环分为两种模式,一种是条件满足时执行循环体;另一种则相反,在条件不满足时执行循环体。前者称为当型循环,后者称为直到型循环。
在图1中,虚线框内是一个当型循环结构,此结构包含判断条件和循环体,以及连接各部分的流向线。程序执行时,先判断条件的真假。判断为真时,则执行循环体;判断为假时,不再执行循环体,循环结束。当型循环先进行条件判断,如果满足循环条件,再执行循环体,因此又被称为前测试型循环。
图1 当型循环结构
在图2中,虚线框内是一个直到型循环结构,此结构包括判断条件和循环体,以及连接各部分的流向线。程序执行时,先执行一次循环体,再判断执行循环的结果是否满足判断条件。满足条件时,再次执行循环体;不满足条件时,不再执行循环体。直到型循环在执行判断前先进入循环体运行,因此又被称为后测试型循环。
图2 直到型循环结构
Python中主要有两种循环语句,即for语句和while语句。前者采用遍历的形式指定循环范围,后者视判断式返回值的情况而决定是否执行。要更灵活地操纵循环的流向,就要用到break、continue和pass等语句。
01 for
for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。不同于C语言,Python中的for语句将遍历系列中的所有成员,遍历顺序为成员在系列中的顺序。需要注意,在for循环中改变任何序列的内容都是危险的!
for语句不属于当型循环或直到型循环,它遍历序列对象内的元素,对每个元素运行一次循环体,循环的步数在程序开始执行时已经指定,不属于条件判断。
在for语句中,for和in搭配组成for-in循环结构,for-in循环依次把list或tuple中的每个元素迭代出来。for语句的基本语法格式如下。
for 变量 in 序列: 操作语句
for语句常用的语法格式及其参数说明如下所示:
序列:接收序列,表示遍历范围。无默认值
操作语句:接收操作语句,表示执行一段代码。无默认值
程序的执行从“for变量in序列”开始,该语句把序列中的每个元素代入变量,执行一遍操作语句1,重复的次数就是序列中元素的个数。
为了展示for循环的遍历功能,依次打印list中的姓名,如代码清单1所示。
代码清单1:for语句遍历提取str
# 单纯遍历的for语句names = ['Michael', 'Bob', 'Tracy']# 遍历输出names中的元素for name in names: print(name)
输出结果:
MichaelBobTracy
for语句同样可以实现dict的遍历方法,如代码清单2所示。
代码清单2:for语句遍历查询dict
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}# 遍历键值对print('key_value:', end = '')for key, value in dic.items: print(key, value, sep = ':', end = ' ')# 遍历键print('keys:', end = '')for key in dic.keys: print(key, end = ' ')# 遍历值print('values:', end = '')for value in dic.values: print(value, end = ' ')
输出结果:
key_value:a:1 b:2 c:3 d:4keys:a b c dvalues:1 2 3 4
从代码清单2可以看到,for语句中用于遍历的“变量”不仅可以是Python默认的指代词,也可以是常规的变量。
和条件语句一样,循环语句也可以使用嵌套,作用同样是丰富程序的功能性。设计一个成绩录入系统,就必然要录入姓名和课程这两类信息,仅靠一层循环是无法实现的,可使用两层循环结构,如代码清单3所示。
代码清单3:嵌套for语句
students = ['小明', '小红']subjects = ['语文', '数学'] sum1 = avg = for i in students: print ('开始录入%s的考试成绩!'%i) sum = 0 for j in subjects: print('请输入%s成绩:'%j) score = int(input) sum += score average = sum / 2 avg.append(average) sum1.append(sum)print(students, '的总分依次是', sum1, ',', '平均分依次是', avg)print('完成成绩录入!')
输出结果:
开始录入小明的考试成绩!请输入语文成绩:97请输入数学成绩:90开始录入小红的考试成绩!请输入语文成绩:89请输入数学成绩:100['小明', '小红'] 的总分依次是 [187, 189] , 平均分依次是 [93.5, 94.5]完成成绩录入!
理论上,for循环也可以无限嵌套,但并不推荐。
02 while
while语句是Python中最常用的递归结构。区别于for循环,while循环结构包含条件判断式,是一种条件循环,属于当型循环。
while语句最基本的形式包括一个位于顶部的布尔表达式,一个或多个属于while代码块的缩进语句。也可以在结尾处包含一个else代码块,它与while代码块是同级的,组成while-else的形式。while语句的基本语法格式如下。
while 条件表达式: 操作语句 1 操作语句 2
while语句常用的参数及其说明如下所示:
条件表达式:接收布尔表达式,表示判断条件是否成立。无默认值
操作语句:接收操作语句,表示执行一段代码。无默认值
执行while语句时,只要顶部的条件表达式返回真值,就一直执行while部分嵌套的递归代码,当条件表达式返回假值时,不再执行操作语句,程序跳出while结构。
while语句的基础使用方法如代码清单4所示。
代码清单4:while语句
sum = 0n = 99while n > 0: sum += n n -= 2print(sum)
输出结果:2500
如果布尔表达式不带有<、>、==、!=、in、not in等运算符,仅仅给出数值之类的条件,也是可以的。当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。
如果布尔表达式始终返回1,while语句就变成无限循环,如代码清单5所示。
代码清单5:while语句无限循环
# 布尔表达式为常数1,始终为真值while 1: print('循环')
输出结果:
循环循环…
# 布尔表达式每次递归运算都为2,始终为真值x, y = 2, 1while x / y: print('循环') x = x * 2 y = y * 2
输出结果:
循环循环…
运行代码清单5,将会不断打印出“循环”。代码清单5展示了制造无限循环的两种方式,既可以在while后写入一个固定的真值,也可以写入一个一直生成真值的表达式。要终止无限循环,可以使用快捷键Ctrl+C中断循环的执行,也可以用循环终止语句,这将在下文中介绍。
灵活地利用while语句中的布尔表达式及代入表达式的递归值,可以实现特别的功能,如代码清单6所示。
代码清单6:while语句实现str截取
string = 'abcd'while string: print(string)# 该语句的递归计算是,每次从str的第2个字符开始截取 string = string[1:]
输出结果:
abcdbcdcdd
代码清单6包含一个自减迭代值,它并不通过明显的运算符实现自减,而是利用索引法则,x变量一直从str中第2个值截取至结尾,每次都将位于str最前面的字符截取掉,最终只剩下一个字符时,再次截取就只有空的结果,布尔表达式返回0,循环终止。
通过代码清单5和代码清单6可以看到,灵活地利用递归式,可以实现程序流向的控制。
while循环同样可以使用嵌套,嵌套的while循环实现成绩录入系统如代码清单7所示。
代码清单7:嵌套while语句
j = 1while j <= 2: sum = 0 i = 1 name = input('请输入学生姓名:') while i <= 2: print ('请输入第%d门的考试成绩: '%i) sum += int(input) i += 1 avg = sum / (i-1) print(name, '的平均成绩是%d'%avg) j += 1print('学生成绩输入完成!')
输出结果:
请输入学生姓名:小明请输入第1门的考试成绩: 98请输入第2门的考试成绩: 88小明 的平均成绩是93请输入学生姓名:小红请输入第1门的考试成绩: 65请输入第2门的考试成绩: 100小红 的平均成绩是82学生成绩输入完成!
代码清单7的第1层while语句用于录入人名,第2层则在各人名下录入多门成绩,布尔表达式决定录入的人数和课程数。
03 break、continue与pass
在前两节中,已经介绍了Python中的两种循环语句。循环语句中还可以嵌入break、continue和pass语句,以灵活地改变流向,实现更多功能。
1. break
在Python中,break语句用于终止循环语句的执行。使用该语句时,即使循环条件判断为真,或序列未被完全递归,循环语句也会被立刻停止。
break语句一般配合条件判断使用,因为程序的终止必须是在某一条件被满足时执行。
转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:少儿编程网,谢谢!^^
*文章为作者独立观点,不代表少儿编程网立场