第三章 Python基础
1. while循环语句
生活中我们经常会遇到一些重复的情况,例如:每天奔波于家和公司之间、循环播放音乐、网站密码输错时需重新输入、老婆对你说还要 等。
代码中想要实现一些重复行的操作,可以借助while循环语句来实现。例如实现:提示用户输入用户名和密码,如果输入错误则重新提示用户输入用户名和密码 等。
while循环语句的基本结构:
while 条件:
...
...
可能有很多行码(这种在while缩进里面的代码统称循环体)
关于执行过程:如果while后面的条件为假,则不会进入循环体;如果while后面的条件为真,则进入执行循环体中的所有代码。循环体中代码执行完之后,会再次回到 while条件判断的位置,再次判断此时条件是否为真,如果为真,则循环体中的代码会再执行一遍,然后再回到while条件判断…
如果某次执行完循环体中的代码之后,再次回到while条件判断的位置时,条件为假,则循环体中代码不再执行,跳过while语句继续向下执行其他代码。
1.1 循环语句
接下来我们通过示例和练习来快速学习循环语句,并让结合之前的知识点写出一些逻辑更加严谨的代码。
示例1:
print("开始")
while True:
print("如果祖国遭受到侵犯,热血男儿当自强。")
print("结束")
示例2:
print("开始")
while 1 > 2:
print("喝干这碗家乡的酒,壮士一去不复返。")
print("结束")
示例3:
print("开始")
flag = True
while flag:
print("滚滚黄河,滔滔长江。")
flag = False
print("结束")
示例4:
print("开始")
num = 1
while num < 3:
print("滚滚黄河,滔滔长江。")
num = 5
print("结束")
示例5:
print("开始")
num = 1
while num < 5:
print("给我生命,给我力量。")
num = num + 1
print("结束")
示例6:
print("开始运行系统")
flag = True
while flag:
user = input("请输入用户名:")
pwd = input("请输入密码:")
if user == 'wupeiqi' and pwd = "oldboy":
print("登录成功")
flag = False
else:
print("用户名或密码错误,请重新登录")
print("系统结束")
通过示例可以发现,只要能判断while后台的条件是真/假,就把循环的事搞定了,接下来再来搞几个练习题,大家可以参考上面的示例来做一下。
1.2 break关键字
通过上面的循环语句示例的学习,我们了解到可以通过 变量+条件 配合来实现终止循环语句的执行。
接下来我们来学习break,他可以让你快速实现终止循环。
while True:
...
break
...
关于执行过程:while循环体一旦遇到break,则立即终止while循环,从break的位置直接跳出while,去执行while之后的代码。
注意:break只能出现在循环体中,用于终止循环。
通过示例来更深入理解break的应用。
示例1:
print("开始")
while True:
print("红旗飘飘,军号响。")
break
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
示例2:
print("开始")
i = 1
while True:
print(i)
i = i + 1
if i == 101:
break
print("结束")
示例3:
print("开始运行系统")
while True:
user = input("请输入用户名:")
pwd = input("请输入密码:")
if user == 'wupeiqi' and pwd = "oldboy":
print("登录成功")
break
else:
print("用户名或密码错误,请重新登录")
print("系统结束")
所以,以后写代码时候,想要结束循环可以通过两种方式实现了,即:条件判断 和 break关键字,两种在使用时无好坏之分,只要能实现功能就行。
1.3 continue关键字
接下来,我们来学习另外一个关键字continue,他用于结束本次循环,开始下次循环。
while True:
...
continue
...
执行过程:在循环体中遇到continue之后,本次循环不再执行continue下面的代码,直接回到while条件判断的位置,开始下一次循环。
示例1:
print("开始")
while True:
print("红旗飘飘,军号响。")
continue
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
示例2:
print("开始")
i = 1
while i < 101:
if i == 7:
i = i + 1
continue
print(i)
i = i + 1
print("结束")
示例3:
print("开始")
i = 1
while True:
if i == 7:
i = i + 1
continue
print(i)
i = i + 1
if i == 101:
break
print("结束")
写在最后,对于break和continue都是放在循环语句中用于控制循环过程的,一旦遇到break就停止所有循环,一旦遇到continue就停止本次循环,开始下次循环。
当然,通过如果没有了break和continue,我们用while条件的判断以及其他协助也能完成很多功能,有了break和continue可以在一定程度上简化我们的代码逻辑。
2. 字符串格式化
在开发的过程中我们经常遇到,将多个数据拼接,然后再处理的情况。之前,我们都是使用字符串相加来实现的拼接,今天我们来学习另外一种方式:字符串格式化。
2.1 占位符:%s
示例1:
data = "我叫%s,今年%s岁" %("Jesse",18)
print(data)
# 输出:我叫Jesse,今年18岁
代码解析过程:
- 现有一个含有特殊
%s
的字符串 【”我叫%s,今年%s岁”】;- 在字符串后面紧跟 %(“替换第一个%s位置”,”替换第二个%s的位置”),就会把字符串中的特殊%s替换,最终得到替换的字符串【”我叫wupeiqi,今年18岁”】;
- 将这个已被替换完成字符串赋值给data,输出data就得到结果了。
注意:一般称字符串中的%s
叫占位符,而占位符被替换的过程叫字符串格式化。
示例2:
name = "王哥"
message = "Alex今天不在家,%s你什么时候过来?" %(name)
print(message)
# 输出:Alex今天不在家,王哥你什么时候过来?
示例3:
name = "王哥"
template = "Alex今天不在家,%s你什么时候过来?"
message = template %(name)
print(message)
# 输出:Alex今天不在家,王哥你什么时候过来?
示例4:
user = input("请输入用户名:")
address = input("请输入地点:")
action = input("请输入行为:")
data = "%s在%s,一直在%s。" %(user,address,action)
print(data)
2.2 占位符:%%
上面通过 %s 占位符可以实现格式化,但如果想要在页面上输出输出百分比的话,就比较难搞了,例如:
# 正确
message = "兄弟们,这个片我已经下载 90 %了,马上就可以开看了啊。
print(message)
# 报错
message = "兄弟们,这个片我已经下载 %s %了,马上就可以开看了啊。" %(99,)
print(message)
# 正确
message = "兄弟们,这个片我已经下载 %s %%了,马上就可以开看了啊。" %(99,)
print(message)
在字符串格式化时,如果想要输出%
,则必须写两个 %%
才能正确输出 %
。
写在最后,关于字符串格式化还有其他方式(如:format/f-string),但为了让初学者更好掌握,在此不再一一进行赘述,因为 %s基本上就可以完成所有的字符串格式化的任务,目前只要掌握 %s 就行。
2.3 常用的格式符号
格式符号 | 转换 |
---|---|
%c | 字符 |
%s | 通过str() 字符串转换来格式化 |
%i | 有符号十进制整数 |
%d | 有符号十进制整数 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写字母) |
%X | 十六进制整数(大写字母) |
%e | 索引符号(小写’e’) |
%E | 索引符号(大写“E”) |
%f | 浮点实数 |
%g | %f和%e 的简写 |
%G | %f和%E的简写 |
3. 运算符
提到运算符,我想大家首先想到的就是加、减、乘、除之类, 本节要跟大家聊的就是这些话题,但会系统的跟大家来聊一聊,我们写代码时常见的运算符可以分为以下几种:
-
算数运算符,例如:加减乘除
-
比较运算符,例如:大于、小于
注意:python3中不支持<>
-
赋值运算,例如:变量赋值
-
成员运算,例如:是否包含
-
位运算(了解即可)
-
逻辑运算,例如:且或非
3.1 逻辑运算(重要补充)
通常情况下逻辑运算一般都用在含有 条件判断 的位置,用于判断真假,例如:
# 示例1
if 1 == 1 and 2 > 3:
print("真")
# 示例2
name = input("请输入用户名:")
if "wupeiqi" == name or 1 == 1:
print("真")
# 示例3
flag = False
if not flag:
print("来了老弟")
# 示例4
while 1 == 2 and 2 == 9:
print("来了老妹")
相信大家能明白逻辑运算在以上的示例,但在python中逻辑运算还具有赋值的功能,让我们写代码简便,并且也是 面试题中的常见题型。
温馨提醒:目前常见转换为布尔值为False的有
""
和0
(空字符和0)
示例1:
data = "alex"
# 如果第一个值转换为布尔值为True,则 name = 第一个值
# 如果第一个值转换为布尔值为False,则 name = 第二个值
name = data or "武沛齐"
print(name)
# 练习题
v1 = 1 or 2
v2 = -1 or 3
v3 = 0 or -1
v4 = 0 or 100
v5 = "" or 10
v6 = "wupeiqi" or ""
print(v1,v2,v3,v4,v5,v6)
示例2:
# 如果第一个值转换布尔值为True,则 num = 第二个值
num = 1 and 2
# 如果第一个值转换布尔值为False,则 num = 第一个值
num = 0 and 9
# 练习题
v1 = 4 and 8
v2 = 0 and 6
v3 = -1 and 88
v4 = "" and 7
v5 = "武沛齐" and ""
v6 = "" and 0
v7 = 0 and "中国"
print(v1,v2,v3,v4,v5,v6,v7)
对上述的示例中的or和and做赋值操作做一个总结,以方便记忆:
or, 看第一个值,如果是 `真` 则选择第一个值,否则选择第二个值。
and,看第一个值,如果是 `假` 则选择第一个值,否则选择第二个值。
示例3:
此示例是将or和and合并起来使用( 面试题)。合并使用时候需要遵循优先级: 先处理and再处理or
。
v1 = 1 and 6 or 8 and 0 or ""
# 结果:v1 = 6
# 流程分析:
# 第一步:处理 1 and 6,得到 v1 = 6 or 8 and 0 or ""
# 第二步:处理 8 and 0,得到 v1 = 6 or 0 or ""
# 第三步:处理 6 or 0 ,得到 v1 = 6 or ""
# 第四步:处理 6 or "",得到 6
# 练习题
v1 = 0 or 4 and 3 or 7 or 9 and 6
v2 = 8 or 3 and 4 or 2 and 0 or 9 and 7
v3 = 0 or 2 and 3 and 4 or 6 and 0 or 3
3.2 运算符优先级
关于所有的运算符都有一个优先级需要遵循,优先级从高到低依次是:
哈哈哈,上图优先级太多是不是有点记不住?
记不住?没关系,因为常见的就没几个,推荐你记住3个即可:
-
算数优先级优先级 大于 比较运算符
if 2 + 10 > 11: print("真") else: print("假")
-
比较运算符优先级 大于 逻辑运算符
if 1>2 and 2<10: print("成立") else: print("不成立")
-
逻辑运算符内部三个优先级 not > and > or
if not 1 and 1>2 or 3 == 8: print("真") else: print("假")
以上优先级从高到低总结:加减乘除 > 比较 > not and or
4. 作业
-
猜年龄游戏
要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。print("猜年龄游戏") n = 1 while True: if n == 4: # print("最多尝试3次") break input_age = input("请输入年龄:") if input_age == "35": print("恭喜猜对了") break else: print("请重试,你还有%s次机会"%(3-n)) n += 1
-
猜年龄游戏升级版
要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜3次,以此往复,如果回答N,就退出程序,如何猜对了,就直接退出。print("猜年龄游戏升级版") n = 1 while True: if n == 4: input_times=input("3次机会已用完,是否继续?(Y/N)") if input_times == "Y": n = 1 else: break input_age = input("请输入年龄:") if input_age == "35": print("恭喜猜对了") break else: print("请重试,你还有%s次机会"%(3-n)) n += 1
-
实现用户登录系统,并且要支持连续三次输错之后直接退出,并且在每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)。
print("开始运行系统") n = 1 while True: if n == 4: print("输入错误次数过多!") break user = input("请输入用户名:") pwd = input("请输入密码:") if user == 'user' and pwd == "123456": print("登录成功") break else: print("用户名或密码错误,剩余次数%s"%(3-n)) n += 1
-
判断下列逻辑语句的True,False
-
1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
解:(以下T = True,F = False) F or T or F and T and T or F #先处理比较运算符,后处理逻辑运算符 F or T or F or F #先处理and,后处理or T or F or F T or F T
-
not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
解:(以下T = True,F = False) not T and F or F and T and T or F #先处理比较运算符,后处理逻辑运算符 F and F or F and T and T or F #处理顺序从左往右,not>and>or F or F or F F
-
-
求出下列逻辑语句的值。
-
8 or 3 and 4 or 2 and 0 or 9 and 7
解: 8 or 4 or 0 or 7 8
-
0 or 2 and 3 and 4 or 6 and 0 or 3
解: 0 or 4 or 0 or 3 4 or 0 or 3 4 or 3 4
-
-
下列结果是什么?
- 6 or 2 > 1
- 3 or 2 > 1
- 0 or 5 < 4
- 5 < 4 or 3
- 2 > 1 or 6
- 3 and 2 > 1
- 0 and 3 > 1
- 2 > 1 and 3
- 3 > 1 and 0
- 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2