• 掌握python基础中的必备语法知识

循环语句

  • while循环

  • for循环

  • while循环的格式

1
2
3
4
5
while 条件:
    ......
    ......
    ......
# (需要缩进,建议前面空四格)
  • 先判断条件成不成立,若条件成立则执行缩进里面的代码,执行完以后返回while语句,继续判读条件是否成立,如果条件恒成立则一直循环,如果条件不成立则跳出循环。

循环语句的基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
示例1: 
print("开始")
while True:
print("Alex是个小都比")
print("结束")

# 输出:
开始
Alex是个小都比
Alex是个小都比
Alex是个小都比
Alex
是个小都比
...
1
2
3
4
5
6
7
8
9
10
11
12
示例2
print("开始")
while 1 > 2:
print("如果祖国遭受到侵犯,热血男儿当自强")
print("结束")

# 输出:
开始
结束


(这里注意,在while语句中bool值判断时,如果始终为真就一直循环,如果始终为假则不循环)
1
2
3
4
5
6
7
8
9
10
11
示例3
data = True
print("开始")
while data:
print("如果祖国遭受到侵犯,热血男儿当自强")
# 输出:
开始
如果祖国遭受到侵犯,热血男儿当自强
如果祖国遭受到侵犯,热血男儿当自强
如果祖国遭受到侵犯,热血男儿当自强
...
1
2
3
4
5
6
7
8
9
10
11
12
示例4
print("开始")
flag = True
while flag:
print("滚滚黄河,滔滔长江")
flag = False
print("结束")

# 输出:
开始
滚滚黄河,滔滔长江
结束
1
2
3
4
5
6
7
8
9
10
11
示例5
print("开始")
num = 1
while num < 3:
print("滚滚黄河,滔滔长江")
num = 5
print("结束")
# 输出:
开始
滚滚黄河,滔滔长江
结束
1
2
3
4
5
6
7
8
9
10
11
示例5
print("开始")
num = 1
while num < 3:
print("滚滚黄河,滔滔长江")
num = 5
print("结束")
# 输出:
开始
滚滚黄河,滔滔长江
结束

练习题

1
2
3
4
5
6
7
8
9
10
练习题:重复3次输出我爱我的祖国
num = 1
while num < 4:
print("我爱我的祖国")
num = num + 1

输出结果:
我爱我的祖国
我爱我的祖国
我爱我的祖国
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.    补充代码实现
猜数字,设定一个理想数字比如:66,一直提示让用户输出数字,如果比66大,则显示猜测的结果大了;如果比66小,则显示的结果小了;只有输入等于66,显示猜测结果正确,然后退出循环。
number = 66
flag = True
while flag:
...

2. 使用循环输出1-100所有整数。
3. 使用循环输出1 2 3 4 5 6 7 8 9 1 0,即,10以内除7以外的整数。
4. 输出1-100内的所有奇数
5. 输出1-100内的所有偶数
6.1-100的所有整数的和
7. 输出10-1所有整数。

思考题:
1-100的所有整数这样的结果:1-2+3-4+5-6....=?

综合小案例

  • 请实现一个用户登录系统,如果密码错误则反复提示让用户重新输入,直到输出正确才停止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
print("开始运行路飞系统")

flag = True

while flag:
user = input("请输入用户名")
pwd = input("请输入密码")
if user == "wupeiqi" and pwd = "luffy":
print("登录成功")
flag = False
else
print("用户名或密码错误")

print("系统结束")

break

  • break,用于在while循环中帮你终止循环。
1
2
3
4
5
6
7
8
9
10
11
例:
print("开始")
while True:
print("1")
break
print("2")
print("结束")
输出结果:
1
结束
注:break是直接跳出循环执行循环之后的语句
1
2
3
4
5
6
7
8
9
10
11
12
示例1
print("开始")
while True:
print("红旗飘飘,军号响。")
break
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
输出结果:
开始
红旗飘飘,军号响。
结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例2
print("开始")
i = 1
while True:
print(i)
i = i + 1
if i == 101:
break
print("结束")
输出结果:
1
2
...
100
结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
示例3
print("开始运行系统")
while True:
user = input("请输入用户名:")
pwd = input("请输入密码:")
if user == 'wupeiqi' and pwd =="oldboy"
print("登录成功")
break
else:
print("用户名或密码错误,请重新登录")
print("系统结束")
输出结果:
>>>用户名
>>>密码
正确,登录成功
系统结束
不正确,一直循环输出


所以,以后写代码时候,想要结束循环可以通过两种方式实现了,即:条件判断和break关键字,两种在使用时无好坏之分,只要能实现功能就行。

continue

  • continue,在循环中用于结束本次循环,开始下一次循环。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
print("开始")
while True:
print(1)
continue
print(2)
print(3)
print("结束")
输出结果:
1
1
1

注意:continue是结束本次循环,进行下一次循环,不执行continue之后的语句。
break的跳出循环需要区分开来。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例1
print("开始")
while True:
print("红旗飘飘,军号响")
continue
print("剑已出鞘,雷鸣电闪。")
print("从来都是狭路相逢勇者胜。")
print("结束")
输出结果:
开始
红旗飘飘,军号响
红旗飘飘,军号响
红旗飘飘,军号响
红旗飘飘,军号响
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
示例2
print("开始")
i = 1
while i < 101:
if i == 7:
i = i + 1
continue
print(i)
i = i + 1
print("结束")
输出结果:
开始
1
2
3
4
5
6
8
9
10
...
100
结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
示例3
print("开始")
i = 1
while True:
if i == 7:
i = i + 1
continue
print(i)
i = i + 1
if i == 101:
break
print("结束")
输出结果:
开始
1
2
3
4
5
6
8
9
10
...
100
结束
  • 对于break和continue都是放在循环语句中用于控制循环过程的,一旦遇到break就停止循环,一旦遇到continue就停止本次循环,开始下一次循环。

  • 当然,通过如果没有break和continue,我们用while条件的判断以及其他协助也能完成很多功能,有了break和continue可以在一定程度上简化我们的代码逻辑。

while else

  • 当while后的条件不成立时,else中的代码就会执行。
    while 条件:

    代码
    

    else:

    代码
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
while False:
pass
else:
print(123)

num = 1
while num < 5:
print(num)
num = num + 1
else:
print(666)
输出结果:
1
2
3
4
666

注意:只有条件不成立的时候else的语句才会执行,如果在此之前用break跳出循环则不会执行

while True:
print(123)
break
else:
print(666)
这种情况else后面的语句是不会执行的
输出结果:
123

字符串格式化

百分号(%)

基本格式化操作

  • 根据占位符进行一一对应
1
2
3
4
5
6
7
8
9
10
11
name = "武沛齐"
# %s叫做占位符
text = "我叫%s,今年18岁" %"武沛齐"
other = "我叫%s,今年18岁" %name
print(text)
print(other)
# 输出结果:
# 我叫武沛齐,今年18岁
# 我叫武沛齐,今年18岁


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = "武沛齐"
age = 18
text = "我叫%s,今年%岁" %("武沛齐",18)
text = "我叫%s,今年%s岁" %(name,age)
text = "我叫%s,今年%d岁" %(name,age)

# 注:这里的%d是专门为整型进行占位的

# 根据名称进行一一对应

message = "%(name)s你什么时候过来呀?Alex今天不在呀。" %{"name":"死鬼"}

# 可以有多个占位符

message = "%(name)s你什么时候过来呀?%(user)s今天不在呀。" %{"name":"死鬼","user":"李杰"}
print(messgae)

百分比

1
2
3
4
5
6
7
8
9
10
text = "兄弟,这个片我已经下载了90%了,居然特么的断网了"

text = "兄弟,这个片我已经下载了90%了,居然特么的断网了"
print(text)
text = "%s,这个片我已经下载了90%%了,居然特么的断网了" %"兄弟"
print(text)
# 输出:
# 兄弟,这个片我已经下载了90%了,居然特么的断网了

# 一旦字符串格式化中存现百分比的显示,请一定要加%%以实现输出%。

format(推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 例如:
text = "我叫{0},今年18岁".format("武沛齐")

text = "我叫{0},今年{1}岁".format("武沛齐",18)

text = "我叫{0},今年{1}岁,真实的姓名是{0}。".format("武沛齐",18)
# 从0开始 武沛齐被标为0, 18被标为1
# 所以{0}占位的是武沛齐,{1}占位的是18

text = "我叫{},今年18岁".format("武沛齐")

text = "我叫{},今年{}岁".format("武沛齐",18)

text = "我叫{},今年{}岁,真实的姓名是{}。".format("武沛齐",18,"武沛齐")


text = "我叫{n1},今年18岁".format(n1="武沛齐")

text = "我叫{n1},今年{age}岁".format(n1="武沛齐",age=18)

text = "我叫{n1},今年{age}岁,真实的姓名是{n1}".format(n1="武沛齐",age=18)


  • 补充
1
2
3
4
5
6
7
8
9
text = "我叫{0},今年{1}岁"
data1 = text.format("武沛齐"666)
data2 = text.format("alex",73)



text = "我叫%s,今年%d岁"
data1 = text %("武沛齐",20)
data2 = text %("武沛齐",84)

f

  • 到python3.6版本出现的字符串格式化,更便捷。
    text = f”嫂子喜欢{‘跑步’},跑完之后满身大汗”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
action = "跑步"

text = f"嫂子喜欢{action},跑完之后满身大汗"
# 输出:嫂子喜欢跑步,跑完之后满身大汗

name = "喵喵"
age = 19
text = f"嫂子的名字叫{name},今年{age}岁"
print(text)
# 输出结果:嫂子的名字叫喵喵,今年19岁

text = f"嫂子的名字叫喵喵,今年{ 19 + 2 }岁"
print(text)
# 输出结果:嫂子的名字叫喵喵,今年21岁


  • 在Python3.8中引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
text = f"嫂子的名字叫喵喵,今年{ 19 +  2  = }岁"
print(text)
# 输出:嫂子的名字叫喵喵,今年19 + 2 = 21岁


#进制转换
text = f"嫂子今年{22:#b}岁"
print(text) #输出:嫂子今年0b10110岁

text = f"嫂子今年{22:#o}岁"
print(text) #输出:嫂子今年0o26岁

text = f"嫂子今年{22:#x}岁"
print(text) #输出:嫂子今年0x16岁

# b表示着二进制
# o表示着八进制
# x表示着16进制

# 以下理解即可 :
text = f"我是{'alex'},我爱大铁锤"
# 输出:我是alex,我爱大铁锤
name = "alex"
text = f"我是{name},我爱大铁锤"
# 输出:我是alex,我爱大铁锤
name = "alex"
text = f"我是{name.upper()},我爱大铁锤"
# 输出:我是ALEX,我爱大铁锤
# 可以将字母变成大写


运算符

  • 提到运算符,我想大家首先想到的就是加、减、乘、除之类,本节要系统的跟大家来聊一聊,我们写代码时常见的运算符可以分为5种:

算数运算符 例如:加减乘除

1
2
3
4
5
6
7
8
9
运算符	描述	实例:a = 10 ,b = 20
+ 加-两个对象相加 a + b输出结果 30
- 减-得到负数或是一个数减去另一个数 a – b 输出结果 -10
* 乘-两个数相乘或是返回一个被重复若干次的字符串 a * b输出结果 200
/ 除-x除以y b / a 输出结果 2
% 取余-返回除法的余数 b % a 输出结果 0
** 幂-返回x的y次幂 a ** b为1020次方,输出结果为10000000000000000000
// 取整除-返回商的整数部分 9//2输出结果 4
9.0//2.0输出结果4.0

比较运算符 例如:大于、小于

1
2
3
4
5
6
7
8
9
10
运算符	描述	实例:a = 10 ,b = 20
== 等于-比较对象是否相等 (a == b)返回False
!= 不等于-比较两个对象是否不相等 (a != b)返回True
<> 不等于-比较两个对象是否不相等 (a <> b)返回True。这个运算符类似!=
> 大于-返回x是否大于y (a > b)返回False
< 小于-返回x是否小于y。所有比较运算符返回1表示真,返回表示假。这分别与特殊的变量True’和False等价。注意,这些变量名的大写。 (a < b)返回True
>= 大于等于-返回x是否大于等于y (a >= b)返回False
<= 小于等于-返回x是否小于等于y (a <=b)返回True
注意:python3中不支持<>

赋值运算符 例如:变量赋值

1
2
3
4
5
6
7
8
9
10
11
运算符	描述	实例
= 简单的赋值运算 c = a + b 将a+b的运算结果赋值为c
+= 加法赋值运算 c += a 等效于 c = c+a
-= 减法赋值运算 c -= a 等效于 c = c – a
*= 乘法赋值运算 c *= a 等效于 c = c*a
/= 除法赋值运算 c /= a 等效于 c = c/a
%= 取余值运算 c %=a 等效于 c = c%a
**= 幂赋值运算 c **= a 等效于 c = c**a
//= 取整数赋值运算 c //= a 等效于 c = c//a
套娃模式:
c += c+a<->c = c+a+c

成员运算 例如:是否包含

1
2
3
4
5
6
7
8
9
10
运算符	描述	实例
in 如果在指定的序列中找到值返回True,否则返回False x在y序列中,如果x在y序列中返回True
not in 如果在指定的序列中没有找到值返回True,否则返回False x不在y序列中,如果x不在y序列中返回True
例如: v1 = “le” in “alex”#True/False #判断le有无在alex里面有就True,无就False
逻辑运算,例如:且或非
运算符 描述 实例:a = 10 , b = 20
and 布尔“与”-如果x为False,x and y返回False,否则它返回y的计算值。 (a and b)返回True
or 布尔“或”-如果x是True,它返回True,否则它返回y的计算值 (a or b)返回True
not 布尔“非”-如果x为True,返回False。如果x为False,它返回True not (a and b)返回False

运算符优先级

  • 运算符的优先级有很多,常见的没几个,推荐你记住3个即可

算数优先级: 算数运算符 大于 比较运算符

1
2
3
4
5
if 2 + 10 > 11:
print("真")
else:
print("假")

比较运算符优先级:

1
2
3
4
if 1 > 2 and 2 < 10:
print("成立")
else:
print("不成立")

逻辑运算符内部三个优先级:

1
2
3
4
if not 1 and 1 > 2 or 3 == 8:
print("真")
else:
print("假")
  • 上述这3个优先级从高到低总结:加减乘除 > 比较 > not and or
    绝招:加括号(括号优先级最高)

面试题

  • 逻辑运算中:and or
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
v1 = name =="alex" and pwd =="123"
# v1 = True and False
if name == "alxe" and pwd == "123":
pass


v1 = name =="alex" and pwd =="123"
# v1 = True and False
if name == "alxe" and pwd == "123":
pass

v2 = "wupeiqi" and "alxe"
# 第一步:将and前后的值转换为布尔值 True and True
# 第二步:判断本次操作取决于谁?由于前面的是True,所以本次逻辑判断拒绝于后面的值
# 所以,后面的值等于多少最终结果就是多少。v2 = "alex"

v3 = "" and "alex"
# 第一步:将and前后的值转换为布尔值 False and True
# 第二步:判断本次操作取决于谁?由于前面的是False,所以本次逻辑判断取决于前面的值
# 所以,前面的值等于多少最终结果就是多少。 v2 = "" 注意等于的是初始的值

v4 = 1 or 8
# 第一步:将or前后的值转换为布尔值 True and True
# 第二步:判断本次操作取决于谁?由于前面的是True,所以本次逻辑判断取决于前面的值。
# v4 = 1

v5 = 0 or 8
# 第一步:将or前后的值转换为布尔值 False and True
# 第二步:判断本次操作取决于谁?由于前面的是True,所以本次逻辑判断取决于后面的值。
# v4 = 8

练习题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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)
# or,看第一给值,如果第一个值为真,结果就应该是第一个值,否则结果就是第二个值

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)
# and,看第一个值,如果第一个值为真,结果就应该是第二个值,否则结果就是第一个值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
面试题
如果多个andor的情况,先计算and在计算or
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





解析:
v1 = 0 or 4 and 3 or 7 or 9 and 6
0 or 3 or 7 or 9 and 6
0 or 3 or 7 or 6
3 or 7 or 6
3 or 6
3
v2 = 8 or 3 and 4 or 2 and 0 or 9 and 7
8 or 4 or 0 or 7
8 or 0 or 7
8 or 7
8
v3 = 0 or 2 and 3 and 4 or 6 and 0 or 3
0 or 3 and 4 or 0 or 3
0 or 4 or 0 or 3
4 or 0 or 3
4 or 3
4

先计算not,再计算and,最后计算or
v4 = not 8 or 3 and 4 or 2
False or 3 and 4 or2
False or 4 or 2
4 or 2
4

总结

1. while循环语句

2. break和continue关键字的作用

3. 三种字符串格式化的方式

4. 基本运算符(逻辑运算符涉及的相关面试题)

作业

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.判断下列逻辑语句的TrueFalse
1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
2.求出下列逻辑语句的值
8 or 3 and 4 or 2 and 0 or 9 and 7
0 or 2 and 3 and 4 or 6 and 0 or 3
3.下列结果是什么?
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
4.实现用户登录系统,并且要支持连续三次输错之后直接退出,并且在每次输错误时显示剩余错误次数(提示:使用字符串格式化)
5.猜年龄游戏
要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
6.猜年龄游戏升级版
要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜3次,以此往复,如果回答N,就退出程序,如果猜对了,就直接退出