循环结构
Python中的循环语句有 2 种,分别是 while 循环和 for 循环
让程序重复不停的做一件或几件事情就需要用循环
for 循环的语法格式
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
上面语法格式中,迭代变量用于存放从序列类型变量中读取出来的元素;代码块指的是具有相同缩进格式的多行代码,由于和循环结构联用,因此代码块又称为循环体。
names = ["Jie","Yuan","Tim","Jay"]
for name in names: # for name in names 就是循环把列表中每个元素代入变量name,然后执行for下面缩进的语句
print(name)
# Jie
# Yuan
# Tim
# Jay
上面就是通过for循环不断从names列表中取出元素赋值给name变量,执行print(name)语句,循环体就是print(name)
例:计算 1+2+3+4+5+6+7+8+9 的和
sum = 0
for i in [1,2,3,4,5,6,7,8,9]:
sum = sum + i
print(sum)
range( ) 函数,返回的是一个可迭代对象(能够通过for遍历的对象),Python 内置函数,用于生成一系列连续整数,多用于 for 循环中
for i in range(0,5): # range(0,5)生成的序列是从0开始小于5的整数
print(i)
'''
0
1
2
3
4
'''
问题:结合range( )函数,如果需要把某一代码重复执行10次,该如何编写代码?
结合range( ),通过 lis( ) 函数可转换为List
l1 = list(range(0,5)) # range(0,5)可简写成range(5)
print(l1)
# [0, 1, 2, 3, 4]
l2 = list(range(5))
print(l2)
# [0, 1, 2, 3, 4]
结合range()函数,通过索引来遍历列表
names = ["Jie","Yuan","Tim","Jay"]
for index in range(len(names)): # len(names)-> 返回列表长度4,range(len(names))->range(0,4)
name = names[index]
print(name)
任务1:生成一个1-100的列表
任务2:通过for循环把goods_list1中元素添加到goods_list2中
goods_list1 = ['Huawei p40', 'Huawei p50', 'Apple iphone 12', 'Apple iphone 13 pro']
goods_list2 = ['xiaomi 10','redme k50']
for good in goods_list1 :
goods_list2 .append(good)
print (goods_list2 )
# ['xiaomi 10', 'redme k50', 'Huawei p40', 'Huawei p50', 'Apple iphone 12', 'Apple iphone 13 pro']
任务3:两个给定的列表keys, values,通过for循环,输出一个字典dic_num→{’one’:1, ‘two’:2, ‘three’: 3}
keys = ['one', 'two', 'three']
values = [1, 2, 3]
'''请完善代码逻辑,实现dic_num→{’one’:1, ‘two’:2, ‘three’: 3}'''
上述代码实现还可通过dic_num = dict( zip(keys, values) )来实现
通过for循环遍历字典
for 循环遍历字典时,经常会用到和字典相关的 3 个方法,即 items()、keys() 以及 values()
- keys() 方法用于返回字典中的所有键(key);
- values() 方法用于返回字典中所有键对应的值(value);
- items() 用于返回字典中所有的键值对(key-value)。
sorces = {'数学':90, '语文':85, '英语':95}
sorces_keys = sorces.keys()sorce = {'数学':90, '语文':85, '英语':95}
sorces_keys = sorces.keys()
print(sorces_keys)
sorces_values = sorces.values()
print(sorces_values)
sorces_items = sorces.items()
print(sorces_items)
运行结果:
dict_keys(['数学', '语文', '英语'])
dict_values([90, 85, 95])
dict_items([('数学', 90), ('语文', 85), ('英语', 95)])
注意:它们的返回值并不是我们常见的列表或者元组类型,因为 Python 3.x 不希望用户直接操作这几个方法的返回值,如果需要引用,可以通过list( )进行强制类型转换
通过for循环遍历字典的key
sorces = {'数学':90, '语文':85, '英语':95}
for key in sorces.keys():
print(key)
运行结果为:
数学
语文
英语
通过for循环遍历字典的value
sorces = {'数学':90, '语文':85, '英语':95}
for value in sorces.values():
print(value)
运行结果为:
90
85
95
通过for循环同时遍历字典的key-value
sorces = {'数学':90, '语文':85, '英语':95}
for k,v in sorces.items():
print(f'该同学的{k}分数为{v}')
运行结果为:
该同学的数学分数为90
该同学的语文分数为85
该同学的英语分数为95
练习:
给定一个字典user,key是userid, value是用户的nickname,把userid与nickname分别存放入两个列表中
user = {10001:'徐凤年', 10002:'徐晓', 10003:'李醇罡', 10004:'剑九黄', 10005:'王仙芝'}
'''
通过for循环把userid与nickname分别存放入userid_list, nickname_list中
'''
while循环
while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。
while 语句的语法格式
while 条件表达式: 代码块
while 语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行代码块...如此循环,直到条件表达式的值为假(False),才终止循环。
num = 10
while num>0:
print(num)
num -= 1 # num = num - 1
# 10,9,8,7,6,5,4,3,2,1
num = 10
while num>0:
print(num)
num += 1 # num>0条件永远为真,陷入死循环
在while循环时要注意条件的边界值,以及条件是否为永真,否则会陷入死循环
num = 10
while num>0:
num -= 1
print(num)
# 9,8,7,6,5,4,3,2,1,0
num = 10
while num >0:
print(num )
num -= 1
# 10,9,8,7,6,5,4,3,2,1
比较上面两代码块,发现了什么要注意什么?
break
在循环中break语句可提前退出循环
num = 10
while num>0:
print(num)
num -= 1
# 10,9,8,7,6,5,4,3,2,1
num = 10
while num>0:
if num < 5: # 如果num<5 执行break语句,提前退出循环
break # 循环终止
print(num)
num -= 1
# 10,9,8,7,6,5
试一试:编写一个猜数字游戏,random.randint(0,10)方法是从0-10中生成一个随机数,下面程序,会从键盘上获取一个整数,并比较这个生成的随机数,当输入’q’时退出这个程序
import random
exc_num = random.randint(0,10)
while True:
num = input("请输入一个数:")
if num == 'q':
print('已退出')
break
elif int(num) == exc_num:
print("恭喜你猜对了!!!!")
elif int(num) > exc_num:
print("你猜的数值偏大,再试试")
else:
print("你猜的数值偏小,再试试")
continue
在循环中跳过当前循环,直接进入下一轮循环
num = 10
while num>0:
num -= 1
if num % 2 == 0: # 当num为偶数时执行continue,不执行continue后面的循环语句 print(num)结束本轮循环,并进入下一轮循环
continue
print(num)
# 9,7,5,3,1
嵌套循环
i = 0
while i<10:
for j in range(10):
print("i=",i," j=",j)
i=i+1
总结:break
语句可以在循环过程中直接退出循环,而continue
语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if
语句使用。
如果程序陷入死循环,以pytharm中通过Ctrl+C
退出程序,或者强制结束Python进程。
任务:已知两list ,users= ['Jie', 'Jucy' , 'Lisy', ‘Jack’], new_users = [ ],使用while循环,把users中的元素全部移到new_users中,打印出的new_users最终结果如下:
users= ['Jie', 'Jucy' , 'Lisy', 'Jack']
new_users = []