for循环结构、range方法
内容总结
-
whlie补充说明
1、死循环
真正死循环是一旦执行 CPU功耗会急速上升 直到系统采取紧急措施 尽量不要让CPU长时间不断运行
2、whlie循环嵌套
重点:一个break只能结束他所在的那一层循环 重点:有几个while的嵌套 想要一次性结束 就得写几个break 重点:如果不想反复写break 可以使用全局标志位 牵一发而动全身 eg: is_flag = True while is_flag: user = input('user>>>>:') pwd = input('pwd>>>:') if user == 'jason' and pwd == '123': while is_flag: choice = input('请输入您的指令>>>:') if choice == 'n': is_flag = Flase print('正在执行你的指令:%s' % choice) else: print('用户名或密码错误')
graph TB A(is_flag = true)-->B(输入用户名和密码) B-->C(判断用户名和密码是否正确) C-->D(正确进入循环判断指令) C-->E(错误回到while条件判断处) D-->F(有q ) F-->K(将is_flag = Flase退出 条件不成立) D-->G(没有q 循环并打印指令) E-.->B -
for循环结构
for循环的能够做到的事情while都能做到 而for的循环语法更加简洁 并且在循环取值问题上更加方便
1、语法结构
for 变量名 in 带遍历数据: for循环体代码 eg: res = ['jason', 'marry', 'kevin', 'tony'] # 待遍历数据 循环打印出res中的每一个数据值 while方法: count = 0 while count < 4: print(res[count]) count += 1 for方法: for i in res: print(i) for循环的特点: 1、擅长遍历取值 2、不需要结束条件 遍历完自动结束 for循环结构中的变量名如何命名: 1、见名知意 2、如果遍历出来的数据值没有具体意义 可以使用常用的 i j k item v 来指代变量名 for循环的主要遍历数据类型有(常见的有:字符串、列表、元组、字典、集合) eg: l1 = 'jason' for i in l1: print(i) # 打印出来的是单个单个字符 num_dict = {'name': 'jason', 'pwd': 123} for i in nmu_dict: print(i) # 打印出来的只有键
2、for+break
在循环体代码中如果执行到break也会结束整个for循环 eg: res = ['jason', 'kevin', 'oscer', 'marry'] for i in res: print(i) if i == 'kevin': break
3、for+continue
在循环体代码中如果执行到continue也会结束当前循环直接开始下一次循环 eg: res = ['jason', 'kevin', 'oscer', 'marry'] for k in res: if k == 'oscer': continue print(k)
-
range方法
1、range的3个使用方法
range可以理解为是帮我们产生一个内部含有多个数字的数据 第一种:一个参数 从0开始 顾头不顾尾 for i in range(10): print(i) # 打印出来的是0 1 2 3 4 5 6 7 8 9 第二种:两个参数 自定义起始位置 顾头不顾尾 for i in range(1, 10): print(i) # 打印出来的是1 2 3 4 5 6 7 8 9 第三种:三个参数 第三个数字为等差值 默认不写为1 for i in range(1, 10, 2): print(i) # 打印出来的是1 3 5 7 9 range实战: https://movie.douban.com/top250 第一页 https://movie.douban.com/top250?start=25&filter= 第二页 https://movie.douban.com/top250?start=50&filter= 第三页 https://movie.douban.com/top250?start=75&filter= 第四页 base_url = 'https://movie.douban.com/top250?start=%s&filter= ' for i in range(0, 250, 25): print(base_url % i)
2、range在Python2与python3的不同
Python2中: range() # 它产生的是一个列表 内部含有多个数值 xrange() # 其实就是python3中的range
python3中: range() #类似一个工厂 不会占用多大的空间 要的话就生产
-
练习
1、计算出1-100所有的数之和
# 引入计数器 num_count = 0 for i in range(1, 100): # num_count = num_count + i num_count += i print(num_count)
2、判断列表中数字2出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]count = 0 for k in l1: if k == 2: count += 1 print(count)
3.编写代码自动生成所有页网址(注意总共多少页)
https://movie.douban.com/top250https://movie.douban.com/top250 https://movie.douban.com/top250?start=25&filter= https://movie.douban.com/top250?start=50&filter= https://movie.douban.com/top250?start=75&filter= base_url = 'https://movie.douban.com/top250?start=%s&filter=' for v in range(0, 250, 25): print(base_url % v)
4、编写代码打印出下列图形(ps:for循环嵌套)
# ***** # ***** # ***** # ***** for i in range(4): for k in range(5): #print("*****",end="") print('*', end='') print()
5.时间进度条
import time """ 1,\r 一般用在print()中对要打印的结果做格式化处理, 表示将光标的位置回退到本行的开头位置。 2,其中end="",表示不换行 3,其中%s,格式化进行输出,位置进行预留,这里预留了50个字符 """ list1 = [12,23,34,45,56,67,78,89] j = 1 leng = len(list1) for i in list1: time.sleep(0.5) percent = j / leng strvar = int(percent * 50) * "#" print("\r[%-50s] %d%%" % (strvar, percent * 100), end="") j += 1