一、while循环
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
其基本形式为:
while 判断条件(condition):
执行语句(statements)
执行语句可以是单个语句或语句块。判断条件可以是任何表达式;任何非零、或非空(null)的值均为true。
执行流程图如下:
1、实例
跳出循环
通常如果while后跟的条件是恒等式,则容易出现死循环,项目中是不允许死循环出现的,解决方案是要么条件不要恒等式,要么在循环中添加某种判断条件进行中断
下面这个案例是通过添加外部变量counts来在循环中进行控制的 当其值超过等于3的时候 就不再运行循环了 避免死循环的产生
counts = 0
while 1 > 0:
print("ok")
counts = counts + 1
if counts == 3:
print("程序运行三次后退出")
break
#break用来跳出循环,不再执行后续的命令
无限while循环写法;
while True:
print(True)
while 1:
print(1)
name = 'abc'
while name:
print(name)
你可以这样理解,因为它们的条件为true,是恒等式,所以它们会一只执行下去;
范围内的条件的while循环
num = 0
while num <= 10:
print(num)
num += 2 # 等同于 num = num + 1
先定义num=0,如果num值小于等于10,输出num,此时num=num+2,也就是num现在的值为2;再拿num现在的值2进行判断num值是否小于等于10;
直到num>10,不符合条件num<10,不再进行循环;
练习题
练习题1:请使用while循环 输出0-10以内的偶数和奇数
num = 0
while num <= 10:
if num % 2 == 0:
print("偶数:" + str(num))
else:
print("奇数:" + str(num))
num += 1
注意:这个逻辑一定是先判断num是奇数还是偶数,然后再给num加一,使它实现循环
练习题2:编写一个用户登录系统,当用户的账号或密码有一个输错可以继续让用户重新输入账号或密码,当用户输错密码超过5次后,提示用户密码输入错误超过5次,锁定账户5秒钟,之后可以继续进行输入;
# 锁定可以使用time的sleep函数去模拟;
# 先在代码最开始导入import time包,在使用time.sleep(t) t表示休眠几秒;
# 例如:
import time
time.sleep(5)
import time
menu = """
**********************
欢迎来到用户登录系统
1、登录
2、退出
**********************
"""
print(menu)
choose_num = input("请输入您想选择的序号:")
count = 0
while True:
if choose_num == '1':
input_user = input("请输入账号:")
input_passwd = input("请输入密码:")
if input_user == 'admin' and input_passwd == '123456':
print("登录成功!")
break
elif input_user == 'admin' and input_passwd != '123456':
print("你输入的密码错误,请重新输入密码!")
input_passwd = input("请输入密码:")
passwd2 = input_passwd
if input_passwd == '123456':
print("登录成功!")
break
else:
count2 = 0
while True:
if input_passwd == '123456':
print("登录成功!")
elif input_passwd != '123456':
print("你输入的密码错误,请重新输入密码!")
input_passwd = input("请输入密码:")
if input_passwd == '123456':
print("登录成功!")
exit()
count2 += 1
if count2 > 5:
print("您输入的密码错误次数超过5次,请等待5秒...")
time.sleep(5)
elif input_user != 'admin' and input_passwd == '123456':
print("你输入的账号错误,请重新输入账号!")
input_user = input("请输入账号:")
if input_user == 'admin':
print("登录成功!")
break
else:
count3 = 0
while True:
if input_user == 'admin':
print("登录成功!")
elif input_user != 'admin':
print("你输入的账号错误,请重新输入账号!")
input_user = input("请输入账号:")
if input_user == 'admin':
print("登录成功!")
exit()
count3 += 1
if count3 > 5:
print("您输入的账号错误次数超过5次,请等待5秒...")
time.sleep(5)
else:
print("你输入的账号和密码均错误,请重新输入!")
count += 1
if count > 5:
print("您输入的账号和密码错误次数超过5次,请等待5秒...")
time.sleep(5)
elif choose_num == '2':
print("您已退出系统!")
break
else:
print("请输入正确的序号!")
break
思路:首先输出用户登录界面,并且让用户输入序号来选择想要的功能;
如果选择1、登录:
就判账号和密码是否正确,如果账号错误密码正确,就提示“你的账号输入错误,请重新输入”,但是一旦输入账号的错误次数超过5次,就提示你“输入账号的错误次数超过5次,请等待5秒”,直到输入正确账号,提示“登录成功”;
如果账号正确密码错误,就提示“你的密码输入错误,请重新输入”,但是一旦输入密码的错误次数超过5次,就提示你“输入密码错误次数超过5次,请等待5秒”,直到输入正确密码,提示“登录成功”;
如果账号错误密码都错误,就提示“你输入的账号和密码均错误,请重新输入!”,但是一旦输入的账号和密码的错误次数超过5次,就提示你“输入账号和密码错误次数超过5次,请等待5秒”,直到输入正确账号和密码,提示“登录成功”;
选择2、退出,则提示"您已退出系统!"
如果输入的序号不是1或2,则提示"请输入正确的序号!
2、break
break,用于在while循环中帮你终止循环。
while True:
print("1")
break
print("2")
print("结束")
如你所见,虽然有print("2")这个语句,但是没有执行,这是为什么呢?
因为在执行完 print("1")后,执行了break语句,它就从循环中终止了,不再进行下面的语句了
注意:print("结束")是在执行完while循环后才执行的语句,这条语句不参与循环,只执行一次
通过示例来更深入理解break的应用。
print("开始")
while True:
print("红旗飘飘,军号响。")
break
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
print("开始运行系统")
while True:
user = input("请输入用户名:")
pwd = input("请输入密码:")
if user == 'admin' and pwd == "123456":
print("登录成功")
break
else:
print("用户名或密码错误,请重新登录")
print("系统结束")
所以,以后写代码时候,想要结束循环可以通过两种方式实现了,即:条件判断 和break关键字,两种在使用时无好坏之分,只要能实现功能就行。
3、continue
continue,在循环中用于 结束本次循环,开始下一次循环。回到循环开始执行
print("开始")
while True:
print(1)
continue
print(2)
print(3)
print("结束")
print("开始")
while True:
print("红旗飘飘,军号响。")
continue
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
# 输出
开始
红旗飘飘,军号响。
红旗飘飘,军号响。
红旗飘飘,军号响。
红旗飘飘,军号响。
# 案例:输出0-10的偶数 使用continue实现 注意continue前面要有a的变更处理
a = 0
while a <= 10:
if a % 2 != 0:
a += 1
continue
else:
print(a)
a += 1
最开始给a赋值为0.当a<10时,判断a是否为奇数,如果a为奇数,a的值加1,然后跳出循环,如果a的值为偶数则输出a;
也可以这么理解:当a的值为1,3,5,7,9时因为不能被2整除所以1,3,5,7,9都要加1,然后这些值变成了2 ,4,6,8,10满足a可以被2整除,此时输出a,也就是输出了2 ,4,6,8,10
4、while else
当while后的条件不成立时,else中的代码就会执行。
while 条件:
代码
else:
代码
num = 1
while num < 5:
print(num)
num = num + 1
else:
print(666)
# 输出
1
2
3
4
666
当num值小于5时输出num,此时num被赋予新的值num+1,一旦num大于5,就输出666
二、for循环
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for iterating_var in sequence:
statements(s)
#for循环语句 通常结合range()函数使用较多 range代表范围 其参数分为(start,end,step) 如果只给一个参数,则代表只有end参数 而且最终拿不到end值
# 单个参数的range使用
for i in range(10):
print(i)
print()
# 多个参数的range使用
for j in range(1, 10):
print(j)
print()
# 三个参数的range使用
for k in range(0, 10, 2): # 输出0-10的偶数
print(k)
print()
for l in range(1, 10, 2): # 输出0-10的奇数
print(l)
print()
也就是说比如你输出# 单个参数的range使用中,range(10),默认取值是从0开始,但是取不到10,所以输出结果就是0,1,2,3,4,5,6,7,8,9
# 使用for循环实现1-10的和
sum2 = 0
for i in range(1, 11):
sum2 += i
print("使用for循环实现1-10的和为:" + str(sum2))
# 使用for循环遍历字符串序列
myname = "china"
for i in myname:
print(i)
三、运算符
提到运算符,我想大家首先想到的就是加、减、乘、除之类, 本节要系统的跟大家 来聊一聊,我们写代码时常见的运算符可以分为5种:
1、算数运算符
例如:加减乘除
2、比较运算符
注意:python3中不支持 <>
3、赋值运算
例如:变量赋值
4、成员运算
例如:是否包含
# 让用户输入一段文本,检测文本中是否包含敏感词。
text = input("请输入内容:")
if "血腥暴力" in text:
print("少儿不宜")
else:
print(text)
5、逻辑运算
例如:且或非
6、运算符优先级
运算符的优先级有很多,常见的没几个,推荐你记住3个即可:
算数优先级优先级 大于 比较运算符
if 2 + 10 > 11:
print("真")
else:
print("假")
比较运算符优先级 大于 逻辑运算符
if 1>2 and 2<10:
print("成立")
else:
print("不成立")
逻辑运算符内部三个优先级 not > and > or
上述这3个优先级从高到低总结: 加减乘除 > 比较 > not and or 。
想要提升运算优先级:加括号。
四、字符串格式化
字符串格式化,使用更便捷的形式实现字符串的拼接。
%
# (1) %s的占位符的使用 %代表通配 s代表string的缩写 d代表digit数字的缩写
name1 = '小绿'
name2 = '小蓝'
age1 = 22
age2 = 23
name3 = '系统'
print("有两位帅哥,分别叫做"+ name1 + "和" + name2)
print("有两位帅哥,分别叫做%s和%s" % (name1, name2))
format(推荐)
# (2)s.format(var1,var2) s代表字符串 format()方法接收多个变量值,这里面的变量不需要区分数据类型
name1 = '小绿'
name2 = '小蓝'
age1 = 22
age2 = 23
score1 = 99.1
score2 = 70.4
print("{}的成绩为{},{}的年龄为{}".format(name1, score1, name2, age2))
# {}代表占位 如果没有其中的数字 代表从左至右依次匹配右侧format里面的参数 如果指定对应的序列数字(通常从0开始,从左至右依次递加),如果有参数,相当于先给变量从0开始编号,再利用参数调用变量
print("{0}的年龄为{1},成绩为{2}".format(name1, age1, score1))
print("{2}的年龄为{1},成绩为{0}".format(name1, age1, score1))
# 如果我们不想按照从左至右的参数顺序调用,可以通过关键字参数指定去进行调用
name1 = '小绿'
name2 = '小蓝'
print("有两位帅哥,男生分别为{name1},{name2},".format(name1=name1,name2=name2 ))
print("有两位帅哥,男生分别为{name1},{name2},".format(name1=name2,name2=name1 ))
f
# (3) f{string}的方法实现字符串格式化输出
name1 = '小绿'
name2 = '小蓝'
age1 = 22
age2 = 23
score1 = 99.1
score2 = 99.4
print(f"班级中的{name2}的成绩为{score1}")
print(f"班级中的总成绩为{score1+score2}")
print(f"班级中的总年龄为{age1+age2=}") # 比较少用 在3.8才引入的 可作为扩展知识学习