循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。循环体中避免死循环。
循环语句可能包含如下4个部分:
初始化语句( init_statements ): 一条或多条语句,用于完成一些初始化工作。初始化语句在循环开始之前执行。
循环条件( test_expression ) : 这是一个布尔表达式,这个表达式能决定是否执行循环体。
循环体( body_statements ):这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。
迭代语句( iteration_statements ) :这个部分在一次执行循环体结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。
while循环
while 循环的语法格式如下:
[init_statements]
while test_expression :
body_statements
[ iteration_statements ]
循环条件:test_expression
初始化语句:(init-statement)
迭代语句:(iteration_statements)
①while循环在每次执行循环体之前,都要先对test_expression 循环条件求值,如果循环条件为真,则运行循环体部分。
②如果test_expression条件一开始就为假,则循环体部分将永远不会获得执行的机会。
③while 循环的循环体中所有代码必须使用相同的缩进,否则Python 也会引发错误。
# 循环的初始化条件 count_i = 0 # 当count_i小于10时,执行循环体 while count_i < 10 : print("count:", count_i) # 迭代语句 count_i += 1 print("循环结束!")在使用while循环时,一定要保证循环条件有变成假的时候;否则死循环。
# 下面是一个死循环 count_i2 = 0 while count_i2 < 10 : print("不停执行的死循环:", count_i2) count_i2 -=1 print("永远无法跳出的循环体")使用while循环遍历列表和元组
列表和元组的元素都是有索引的。
a_tuple = ('fkit', 'crazyit', 'Charli') i = 0 # 只有i小于len(a_list),继续执行循环体 while i < len(a_tuple): print(a_tuple[i]) # 根据i来访问元组的元素 i += 1实现对一个整数列表的元素进行分类,能整除3的放入一个列表中;除以3余1的放入另一个列表中;除以3余2的放入第三个列表中。
src_list = [12, 45, 34,13, 100, 24, 56, 74, 109] a_list = [] # 定义保存整除3的元素 b_list = [] # 定义保存除以3余1的元素 c_list = [] # 定义保存除以3余2的元素 # 只要src_list还有元素,继续执行循环体 while len(src_list) > 0: # 弹出src_list最后一个元素 ele = src_list.pop() # 如果ele % 3等于0(能被3整除) if ele % 3 == 0 : a_list.append(ele) # 添加元素 elif ele % 3 == 1: b_list.append(ele) # 添加元素 else: c_list.append(ele) # 添加元素 print("整除3:", a_list) print("除以3余1:",b_list) print("除以3余2:",c_list)for-in 循环
for -in 循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。
其格式为: for 变量in 字符串|范围|集合等: statements
说明:
for-in 循环中的变量的值受for-in 循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量赋值。for-in 循环可用于遍历任何可选代对象。所谓可迭代对象,就是指该对象中包含一个_iter_方法,且该方法的返回值对象具有next()方法。使用for-in循环来计算指定整数的阶乘
s_max = input("请输入您想计算的阶乘:") mx = int(s_max) result = 1 # 使用for-in循环遍历范围 for num in range(1, mx + 1): result *= num print(result)程序中对for-in循环的循环计数器赋值在语法上允许的,但没有什么意义,而且非常容易导致错误。
for i in range(1,5): i = 20 print("i:",i)使用for-in 循环遍历列表和元组
元组:
a_tuple = ('crazyit', 'fkit', 'Charlie') for ele in a_tuple: print('当前元素是:', ele)列表:
src_list = [12, 45, 3.4, 13, 'a', 4, 56, 'crazyit', 109.5] my_sum = 0 my_count = 0 for ele in src_list: # 如果该元素是整数或浮点数 if isinstance(ele, int) or isinstance(ele, float): print(ele) # 累加该元素 my_sum += ele # 数值元素的个数加1 my_count += 1 print('总和:', my_sum) print('平均数:', my_sum / my_count)isinstance(ele, int)函数:判断某个变量是否为指定类型的实例
参数一:要判断的变量
参数二:类型
可以根据索引来遍历列表或元组:只要让循环计数器遍历0到列表长度的区间,即可通过该循环计数器来访问列表元素。
a_list = [330, 1.4, 50, 'fkit', -3.5] # 遍历0到len(a_list)的范围 for i in range(0, len(a_list)) : # 根据索引访问列表元素 print("第%d个元素是 %s" % (i , a_list[i]))使用for-in 循环遍历字典
items():来获取字典中的所有key-value对的列表。
keys():获取字典中的所有key。
value():获取字典中的所有value。
如果要遍历字典,先调用字典的items()、keys()、value()方法之一来获取字典的所有key-value对、所有key、所有value, 再进行遍历。
my_dict = {'语文': 89, '数学': 92, '英语': 80} # 通过items()方法遍历所有key-value对 # 由于items方法返回的列表元素是key-value对,因此要声明两个变量 for key, value in my_dict.items(): print('key:', key) print('value:', value) print('-------------') # 通过keys()方法遍历所有key for key in my_dict.keys(): print('key:', key) # 在通过key获取value print('value:', my_dict[key]) print('-------------') # 通过values()方法遍历所有value for value in my_dict.values(): print('value:', value)假如用于统计列表中各元素出现的次数,考虑定义一个字典,以列表的元素为key , 该元素出现的次数为value
src_list = [12, 45, 3.4, 12, 'fkit', 45, 3.4, 'fkit', 45, 3.4] statistics = {} for ele in src_list: # 如果字典中包含ele代表的key if ele in statistics: # 将ele元素代表出现次数加1 statistics[ele] += 1 # 如果字典中不包含ele代表的key,说明该元素还未出现国 else: # 将ele元素代表出现次数设为1 statistics[ele] = 1 # 遍历dict,打印出各元素的出现次数 for ele, count in statistics.items(): print("%s的出现次数为:%d" % (ele, count))循环使用else
①当循环条件为 False 时,程序会执行 else 代码块
②循环的 else 代码块是 Python 的一个很特殊的语法(其他编程语言通常不支持)
count_i = 0 while count_i < 5: print('count_i小于5: ', count_i) count_i += 1 else: print('count_i大于或等于5: ', count_i) a_list = [330, 1.4, 50, 'fkit', -3.5] for ele in a_list: print('元素: ', ele) else: # 访问循环计数器的值,依然等于最后一个元素的值 print('else块: ', ele)
