while循环与for循环
1.运算符的补充
and
print(1 < 2 and 1)
输出的结果为 False
print(1 < 2)
输出的结果为 False
'''当链接的条件时表达式时 计算机会帮你自动装换成布尔值然后在判断'''
print(1 == 1 and 2) # 输出结果为 2
'''
由于and前面的结果输出为True 所以and链接的条件的结果取决于and的后面的条件
当后面是一个明确的数据值时 最后输出的结构就是改数据值(改数据值得布尔值必须是True)
'''
print(1 == 1 and 1) # 1 因为and的前面的表达式为True那么就看and后面的条件 如果是数据值就会输出数据值
print(10 > 20 and 1) # False 因为and前面的表达式为False 所以就会输出False
print(10 < 20 and 10) # 10
print(1 and 1 == 1 ) # True
or
print(1 == 1 or False) # True
print(1 or True) # 1
print(1 or False) # 1
'''
and和or链接的多个条件在返回结果时会返回True 也有可能返回具体的数据值
我们在编写代码的时候不需要考虑它返回的是什么 直接当成布尔值处理即可
'''
not
因为not需要计算所以它返回的肯定是一个布尔值
2.循环结构之while循环
1.while的语法结构
while 条件:
条件成立时循环执行的子代码
2.while语法的步骤
1.首先判断while后面的条件
2.如果条件成立那么执行while的子代码
3.当子代码执行完之后 就会返回到条件出判断
4.如果条件继续成立 就会继续执行子代码 子代码执行完之后 继续返回到条件出判断
5.以此往复 直到条件不成立就会退出while循环
count = 1
while count < 4:
print(123)
count += 1
这个代码的意思是循环打印123打印一次count就加1 当count等于4时while的条件不成立 就会退出循环
while循环的条件可以是布尔值也可以是表达式
2.1while+break
1.while + break 的语法结构
while 条件:
条件成立时循环打印子代码
break
2.while+break语法的步骤
1.首先判断while后面的条件 如果条件成立那么执行它的子代码
2.当子代码运行完之后就会执行break
3.break 的意思是强制结束本层while循环
3.演示
count = 1
while count < 10:
print(count)
这条代码的意思是循环打印1到9 当count等于10时 while的条件不成立 然后退出while循环
count = 1
while count < 10:
print(count)
if count == 7:
break
这条代码的意思是打印1到6就会结束while循环 因为当count=7时就会进入if分支
if的子代码只有break break会强制结束本层while循环 所以只能打印1到6
'''break只能结束本层while的循环'''
2.2while + continue
1.while + continue的语法结构
while 条件:
条件成立时循环执行的子代码
continue
2.while+continue的流程
1.首先判断while后面的条件 当条件成立时执行while的子代码
2.当while的子代码执行完之后 会执行 continue
3.continue关键字的意思是 结束本次循环直接开始下一次循环
3.演示
count = 1
while count < 11:
print(count)
if count == 6:
count += 1
continue
这条代码的意思是 打印1到5 7到10 因为当count等于6时 代码就会进入到if分支
if分支里会把count += 1 然后执行continue
continue会结束本次代码然后直接返回到while后面的条件 然后继续循环
'''continue也只能结束本层循环然后继续执行循环'''
2.3 while + else
1.while + else的语法结构
while 条件:
条件成立时循环执行子代码
break
else:
循环体按照提前定义好的条件正常结束 则会执行
count = 1
while count < 11:
print(count)
if count == 7:
break
count += 1
else:
print('因为不是正常结束 所以不会执行')
打印的结果为 1,2,3,4,5,6,7 竖着打印
当count等于7时 代码就会执行break 就会强制结束本层代码 因为不是按照条件结束的循环 所以就不会执行else
因为想要执行else 的前提是while循环是正常结束的
count = 1
while count < 11:
print(count)
count += 1
else:
print('因为是正常结束 所以可以执行else的代码')
打印的结果为 1,2,3,4,5,6,7,8,9,10,正常结束
因为这个while循环是正常结束的 所以才会执行else的子代码print
作业
1.准确说出下列判断的结果(不要执行代码)
# v1 = 1 or 3 # 1
# v2 = 1 and 3 # 3
# v3 = 0 and 2 and 1 # 0
# v4 = 0 and 2 or 1 # 1
# v5 = 0 and 2 or 1 or 4 # 1
# v6 = 0 or False and 1 # False
2.编写一个用户登录程序1
# 要求:
# 用户如果登录失败
# 则只能尝试三次
# 用户如果登录成功
# 则直接结束程序
# 1.加入计数器
count = 1
# 2.加入循环
while count < 4:
# 3.获取用户信息
username = input('请输入你的用户名>>>:')
password = input('请输入你的密码>>>:')
# 4.判断用户名和密码
if username == 'jason' and password == '123':
# 5.正确结束循环
break
else:
print('用户名或密码错误')
count += 1 # 计数器自增1
3.编写一个用户登录程序2
# 要求:
# 用户如果登录失败
# 可以无限制尝试
# 用户如果登录成功
# 则进入内层循环
# 获取用户输入的指令
# 并打印该指令
# eg: 用户输入cmd指令
# 则程序打印
# '正在执行您的指令:cmd'
# 给用户提供一个退出命令
# 用户一旦输入则退出这个程序
# eg: 用户输入q指令
# 则程序先打印该指令再结束
Flag = True
# 1.加入循环
while Flag:
# 2.获取用户信息
username = input('请输入你的用户名>>>:')
password = input('请输入你的密码>>>:')
# 3.判断用户名与密码
if username != 'jason' and password != '123':
# 4.错误就重新循环
continue
else:
# 5.加入小循环
while Flag:
# 6.获取用户的指令
res = input('请输入您的指令(q指令退出)>>>:')
# 7.打印用户的指令
print('正在执行您的指令:%s' % res)
# 8.判断用户的指令是否为q
if res == 'q':
Flag = False # 将Flag的布尔值变为False
4.猜年龄
# 编写猜年龄的游戏(拔高练习 尝试编写)
# 用户有三次猜测的机会
# 如果用完则提示用户是否继续尝试
# 用户输入y则继续给三次机会
# 如果用户输入q则直接结束程序
# 6.加入一个计数器
count = 1
# 1.定义一个真实的年龄
real_age = 18
# 3.加入循环
while True:
# 7.判断用户输入了几次
if count == 4: # 当计数器等于4时执行改代码
# 8.获取用的 y或q
is_again = input('您已经输入了三次是否继续(y/q)>>>>:')
# 9.判断用户是否继续
if is_again == 'y':
count = 1 # 计数器归0
elif is_again == 'q':
print('下次继续')
break # 结束循环
else:
# 提示信息
print('请输入 y 或 q')
continue
else:
# 2.获取用户输入的年龄
age = input('请输入您猜测的年龄>>>:')
# 4.将用户输入的数据装换为整数
age = int(age)
# 5.判断用户猜测的年龄
if age > real_age:
print('猜大了')
count += 1 # 每次猜错 计数器加1
elif age < real_age:
print('猜小了')
count += 1 # 每次猜错 计数器加1
else:
print('恭喜您猜对了')
break # 猜对就退出循环
3.循环结构之for循环
- for循环的语法结构
for i in 可迭代的对象: # 可以是列表 字典 字符串 元祖 集合
for循环的子代码 - for循环与while循环的不同
eg: l1 = [1, 2, 3, 4, 5, 6]
循环打印l1的所有数据值
上述操作都可以完成 但是利用for循环两行代码就可以完成 for循环比while循环更简单
当列表里的值修改时 while循环的条件也需要修改 而for循环不需要修改条件
- for循环的流程
首先i会先取出l[0]的值然后会给for循环的子代码使用 子代码运行完之后
i就会取下一个值就是l[1] 然后继续给for循环的子代码使用
一直把l1列表里值取完为止
3.1 常见的取值操作
- 字典的取值
for循环字典 默认只能拿到key v是不会暴露到外面的
- 字符串的取值
for循环字符串 最小单位为单个字符
- 元祖的取值
for循环元祖 默认取值的最小单位是单个数据值
- 集合的取值
for循环集合 默认取值的最小单位也是单个数据值 - 整型与浮点型不能被for循环 因为整型与浮点型不是可迭代对象
3.2 for + break
break跟for的使用与break跟while的使用是一样的
都是强制结束本层循环
break也只能结束它所在的for循环
3.3 for+ continue
continue跟for的使用与continue跟while的使用是一样的
都是结束本次循环 直接开始下一次循环
continue也只能结束它所在的for循环
3.4 for + else
else跟for的使用与else跟while的使用是一样的
都是如果循环体代码是正常结束的那么就会执行else
如果for循环是正常结束的那么else是可以被运行的 但是如果for循环不是正常结束的那么else是不会运行的
4.range关键字
range就是可以快速生成一个可以包含多个数据值的列表
- 只有一个参数
如果只有一个数字 那么就生成0到数字减1的列表然后给for一个一个调用(顾头不顾尾)
- 只有两个参数
如果有两个数字 那么第一个数字是启始位置(包含) 第二数字是结束位置(不包含)
- 有三个参数
如果有三个数字 那么第一个数字是启始位置(包含) 第二个数字是结束位置(不包含) 第三个数字可以看作是步长
作业
1.计算1-100所有的数之和
sum = 0
for i in range(101): # i循环拿到0到100的值
sum += i # sum = sum + i
print(sum) # 5050
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 i in l1: # 循环拿到l1里面所有的值
if i == 2: # 每个值都会判断 如果不是2就会拿下一个值继续判断
count += 1 # 如果等于2count自增1
print(count) # 13
3.编写代码自动生成所有页网址
# https://movie.douban.com/top250
# 第一页 https://movie.douban.com/top250
# 第二页 https://movie.douban.com/top250?start=25&filter=
# 第三页 https://movie.douban.com/top250?start=50&filter=
web_url = 'https://movie.douban.com/top250?start=%sfilter='
for i in range(0, 251, 25): # i循环拿到0到250的值 然后按照25递增
print(web_url % i)
4.编写代码打印出下列图形(ps:for循环嵌套)
# *****
# *****
# *****
# *****
for i in range(4): # 循环四次
for k in range(5): # 循环五次 外层每循环一次内层就会循环五次
print('*', end='') # 内层每循环一次就会打印一次 end=''每次打印都不换行
print() # 打印完五次换行