九九乘法表c语言编程伪代码,py_11分支和循环

一、程序执行的三大流程

1.顺序执行 2.分支:选择条件执行 3.循环执行

二、if分支执行的几种方式:1.if 2.if else 3.if elif elif else 4.嵌套

三、三元表达式: c = a if a > b else b 条件为真时的值 if (条件表达式) else 条件为假时的值

四、循环

1.whlie 循环:

2.for 循环

3.break和continue

break用于结束当前循环,continue用于结束本次循环,直接开始下次循环

break/continue在嵌套循环中,只对最近的一层循环起作用

continue 如果遇到while循环里面有计数器,if条件里的continue上面修改计数器条件,否则会死循环

4.循环中的else

break 可以阻止 else 语句块的执行

else在循环结构中,只有循环正常结束后才执行else,如果使用break跳出了循环,不会执行else

5.使用 zip()并行迭代:for name, age, job in zip(names, ages, jobs):

names, ages, jobs是可迭代对象

五、循环代码优化:

1. 尽量减少循环内部不必要的计算

2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

3. 局部变量查询较快,尽量使用局部变量

其他优化手段:

1. 连接多个字符串,使用 join()而不使用+

2. 列表进行元素插入和删除,尽量在列表尾部操作

# 预告:下一篇 4种推导式

xmind总结:

1.分支

9a8b773b75a7

image.png

2.循环

9a8b773b75a7

image.png

分支和循环

一、程序执行的三大流程

1.顺序执行

2.分支:选择条件执行

3.循环执行

9a8b773b75a7

image.png

二、if分支执行的几种方式

if

条件表达式的值为 False 的情况如下:

False、0、0.0、空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)

if 条件:

满足条件时要做的事情1

满足条件时要做的事情2

满足条件时要做的事情3

age = 18

if age >= 18:

print("恭喜你,你可以去网吧上网了")

if else

条件满足执行if下面的代码,不满足执行else下面的代码

if 条件:

条件满足干的事

else:

条件不满足要干的事

有车票可以进火车站,没车票不能进火车站

chePiao = 1 # 用1代表有车票,0代表没有车票

if chePiao == 1:

print("有车票,可以上火车")

print("终于可以见到Ta了,美滋滋~~~")

else:

print("没有车票,不能上车")

print("亲爱的,那就下次见了,一票难求啊~~~~(>_

if elif elif else

if条件满足,循环直接结束。不会执行elif

if xxx1:

事情1

elif xxx2:

事情2

elif xxx3:

事情3

else:

不满足干的事

说明:

当xxx1满足时,执行事情1,然后整个if结束

当xxx1不满足时,那么判断xxx2,如果xxx2满足,则执行事情2,然后整个if结束

当xxx1不满足时,xxx2也不满足,如果xxx3满足,则执行事情3,然后整个if结束

score = 77

if score>=90 and score<=100:

print('本次考试,等级为A')

elif score>=80 and score<90:

print('本次考试,等级为B')

elif score>=70 and score<80:

print('本次考试,等级为C')

elif score>=60 and score<70:

print('本次考试,等级为D')

elif score>0 and score<60:

print('本次考试,等级为E')

else:

print("恭喜你得了一个宇宙大鸭蛋")

嵌套

if 条件1:

满足条件1 做的事情1

满足条件1 做的事情2

...(省略)...

if 条件2:

满足条件2 做的事情1

满足条件2 做的事情2

...(省略)...

说明:

外层的if判断,也可以是if-else

内层的if判断,也可以是if-else

根据实际开发的情况,进行选择

注意:

条件表达式后面必须跟冒号:,遇到冒号下面的代码必须缩进

else和elif 不能单独存在,后面必须要有判断条件

chePiao = 1 # 用1代表有车票,0代表没有车票

daoLenght = 9 # 刀子的长度,单位为cm

if chePiao == 1:

print("有车票,可以进站")

if daoLenght < 10:

print("通过安检")

print("终于可以见到Ta了,美滋滋~~~")

else:

print("没有通过安检")

print("刀子的长度超过规定,等待警察处理...")

else:

print("没有车票,不能进站")

print("亲爱的,那就下次见了,一票难求啊~~~~(>_

判断一个ip地址合不合法

# 判断一个ip 地址是否合法

ip = '192.168.100.3'

list_ip = ip.split(".")

# 1.list_ip的长度必须要等于4,不等于是4就不适合ip地址规范

# 2.list_ip这个列表里面的字符串元素,必须是数字而且范围必须在[0,256]之间

'''

伪代码:

if 长度==4:

pass

if list_p每一个元素是数字and 0<=int(元素)<=255:

是一个合法的ip地址

'''

is_ip = True # 事先假设ip合法

if len(list_ip) == 4:

for num in list_ip:

if all([num.isdigit(),0 <=int(num)<=255]):

is_ip = True

else:

is_ip = False

else:

is_ip = False

if is_ip:

print("{}是ip地址".format(ip))

else:

print("{}不是ip地址".format(ip))

上面代码优化一下:方向判断

# 上面 is_ip =True下面的代码我们判断的是符合ip地址的条件走向,如果方向判断会怎么样呢?

# 会发现能节约一点带码呢

# 判断一个ip 地址是否合法

ip = '192.168.100.3'

list_ip = ip.split(".")

is_ip = True # 事先假设ip合法

if not len(list_ip) == 4:

is_ip = False

for num in list_ip:

if not all([num.isdigit(),0 <=int(num)<=255]):

is_ip = False

if is_ip:

print("{}是ip地址".format(ip))

else:

print("{}不是ip地址".format(ip))

猜拳游戏

# 猜拳游戏

import random

player = input('请输入:剪刀(0) 石头(1) 布(2):')

player = int(player)

computer = random.randint(0, 2)

if ((player == 0) and (computer == 2)) or ((player == 1) and (computer == 0)) or ((player == 2) and (computer == 1)):

print('获胜,哈哈,你太厉害了')

elif player == computer:

print('平局,要不再来一局')

else:

print('输了,不要走,洗洗手接着来,决战到天亮')

三、三元表达式: c = a if a > b else b

条件为真时的值 if (条件表达式) else 条件为假时的值

"""三元表达式: c = a if a > b else b

条件为真时的值 if (条件表达式) else 条件为假时的值

"""

a = 10

b = 5

c = a-b if a >b else a-b

print(c)

四、循环

whlie循环:

样式

9a8b773b75a7

image.png

案例1:

我是阿登打印5次怎么用while循环实现呢?

i = 5

while i >=1:

print(name)

i -= 1

案例2:1-100的和,偶数和,奇数和

# 案例 计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和,

# 计算 1-100 之间奇数的累加和。

i = 1

sum = 0 # 累积和

sum1 = 0 # 计算偶数和

sum2 = 0 # 计算基数和

while i <= 100:

sum += i

if i %2 == 0:

sum1 += i

else:

sum2 += i

i += 1 # 修改循环条件

else:

print(sum)

print(sum1)

print(sum2)

案例:打印多种三角形

打印三角形:正着打

# 打印三角形:正着打

i = 1

while i<=5:

j = 1

while j <= i:

print("*", end='')

j += 1

print() # 内层循环 换行

i += 1

结果:

*

**

***

****

*****

打印三角形:倒着打

# 打印三角形:倒立三角形

i = 1

while i<=5:

j = 5

while j >= i:

print("*", end='')

j -= 1

print() # 内层循环 换行

i += 1

结果:

*****

****

***

**

*

打印三角形:先正后倒

i = 1

while i <= 9:

# print("*")

if i <=5:

j = 1

while j <=i:

print("*",end="")

j += 1

print()

else:

j = 9

while j >=i:

print("*", end= "")

j -= 1

print()

i += 1

结果:

*

**

***

****

*****

****

***

**

*

案例:打印九九乘法表

# 打印九九乘法表

i = 1

while i<= 9:

j =1

while j <= i:

print("{}*{}={}".format(j, i,j*i), end="\t")

j += 1

print() # 内层循环结束打印换行

i += 1

结果:

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

for循环

格式:

for i in iterable:

循环执行的代码

else:

循环结束执行的代码

iterable:可以是字符串 列表 元组 range() 字典 enumerate() eval() 生成器 文件对象

for i in "":

print(i)

else:

print("我是阿登")

结果:

我是阿登

for循环几种案例

1.遍历字符串中的字符

for x in "sxt001":

print(x, end=" ")

结果:

s x t 0 0 1

2.遍历字典

# 2.遍历字典

d = {'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}

for x in d: #遍历字典所有的 key

print(x,end=" ")

print() # for循环结束换行

for x in d.keys():#遍历字典所有的 key

print(x,end=" ")

print()

for x in d.values():#遍历字典所有的 value

print(x,end=" ")

print()

for x in d.items():#遍历字典所有的"键值对"

print(x,end=" ")

print()

结果:

name age address

name age address

gaoqi 18 西三旗 001 号楼

('name', 'gaoqi') ('age', 18) ('address', '西三旗 001 号楼')

3.range 对象

range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:

range(start, end [,step])

生成的数值序列从 start 开始到 end 结束(不包含 end)。若没有填写 start,则默认从 0

开始。step 是可选的步长,默认为 1。如下是几种典型示例:

for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9

for i in range(3,10) 产生序列:3 4 5 6 7 8 9

for i in range(3,10,2) 产生序列:3 5 7 9

利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和, 计算 1-100 之间奇数的累加和.

sum = 0 #求累积和

sum1 = 0 # 求偶数和

sum2 = 0 # 求基数和

for i in range(101):

sum += i

if i %2 ==0:

sum1 += i

else:

sum2 += i

else:

print(f"1--100累积和:{sum}")

print(f"1--100偶数和:{sum1}")

print(f"1--100基数和:{sum2}")

for循环嵌套:

案例:

# 打印如下图

"""

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

4 4 4 4 4

"""

for x in range(5): # 外层控制行数

for y in range(5): #内层控制列数

print(f"{x}",end="\t")

print() # 内层循环换行

利用嵌套循环打印九九乘法表

# 利用嵌套循环打印九九乘法表

for n in range(1,10):

for m in range(1,n+1):

print("{}*{}={}".format(m,n, m*n), end="\t")

print()

"""

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

"""

break和continue

1.break

语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只

能跳出最近一层的循环。

案例:打印1-5数字,打印到4的时候结束

# 案例:打印1-5数字,打印到4的时候结束

i = 1

while i <=5:

if i ==4:

break

print(i)

i +=1

else:

print(i) # 这里else下面的语句不会执行,因为 i==4的时候,break结束循环

当有嵌套循环时,break 语句只能跳出最近一层的循环

# 当有嵌套循环时,break 语句只能跳出最近一层的循环

# 打印三角形:正着打

i = 1

while i<=5:

j = 1

while j <= i:

print("*", end='')

j += 1

break

print() # 内层循环 换行

i += 1

# 打印的结果为:

"""

*

*

*

*

*

"""

# 说明 嵌套的while循环 break只影响就近的循环,for循环也是如此。

#当外层while循环结束,整个循环才会停止。

2.continue

continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最

近的一层循环。

案例:

要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪资

# continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环

# 案例:要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪资

empNum = 0 # 员工数

salarySum= 0 # 记录工资总额

salarys = [] # 录入薪资

while True:

s = input("请输入员工的薪资:(按 Q 或 q 结束)")

print(s)

if s.upper()=='Q':

print("录入完成,退出")

break

if float(s)<0:

continue

empNum +=1

salarys.append(float(s))

salarySum += float(s)

print("员工数{0}".format(empNum))

print("录入薪资:",salarys)

print("平均薪资{0}".format(salarySum/empNum))

结果:

请输入员工的薪资:(按 Q 或 q 结束)44

44

请输入员工的薪资:(按 Q 或 q 结束)44

44

请输入员工的薪资:(按 Q 或 q 结束)22

22

请输入员工的薪资:(按 Q 或 q 结束)44

44

请输入员工的薪资:(按 Q 或 q 结束)22

22

请输入员工的薪资:(按 Q 或 q 结束)Q

Q

录入完成,退出

员工数5

录入薪资: [44.0, 44.0, 22.0, 44.0, 22.0]

平均薪资35.2

continue 如果遇到while循环里面有计数器,if条件里的continue上面修改计数器条件,否则会死循环

# continue 如果遇到while循环里面有计数器,if条件里的continue上面修改计数器条件,否则会死循环

# 案例: 打印1-5,等于3的时候不打印

num = 1

s = 1

while num <= 5:

if num ==3:

num += 1

continue # continue在while循环里面的条件语句中跳出下个循环时,记得一定要修改计数器的条件。不然容易死循环

print(num)

num += 1

循环中的else

while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句

结束,则会执行 else 子句,否则不执行

语法格式如下:

while 条件表达式:

循环体

else:

语句块

for 变量 in 可迭代对象:

循环体

else:

语句块

案例

员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录

入 4 名员工的薪资”。最后,打印输出录入的薪资和平均薪资

# 员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录

# 入 4 名员工的薪资”。最后,打印输出录入的薪资和平均薪资

salarySum= 0 # 记录工资总额

salarys = [] # 录入薪资

for i in range(4): # 录入4次员工的工资

s = input("请输入员工的薪资:(按 Q 或 q 结束)")

print(s)

if s.upper()=='Q':

print("录入完成,退出")

break

if float(s)<0:

continue

salarys.append(float(s))

salarySum += float(s) # 记录录入的工资总额

else:

print("录入4位人员的工资完成")

print("录入薪资:",salarys)

print("平均薪资{0}".format(salarySum/len(salarys)))

请输入员工的薪资:(按 Q 或 q 结束)400

400

请输入员工的薪资:(按 Q 或 q 结束)500

500

请输入员工的薪资:(按 Q 或 q 结束)600

600

请输入员工的薪资:(按 Q 或 q 结束)800

800

录入4位人员的工资完成

录入薪资: [400.0, 500.0, 600.0, 800.0]

平均薪资575.0

使用 zip()并行迭代

# 我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停

names = ("薛鹏磊","薛老二","薛老三","薛老四")

ages = (18,16,20,25)

jobs = ("老师","程序员","公务员")

for name, age, job in zip(names, ages, jobs):

print("{}--{}--{}".format(name,age,job))

# zip在迭代对象参数个数和其他不一至时,已最少的为准。如jobs这个元组,元素只有3个,其他有4个。最后以jobs的元素个数为准

结果:

薛鹏磊--18--老师

薛老二--16--程序员

薛老三--20--公务员

五、循环代码优化

尽量减少循环内部不必要的计算

嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

局部变量查询较快,尽量使用局部变量

# 案例

import time

start = time.time()

for i in range(1000):

result = []

for m in range(100000):

result.append(i*1000+m*100)

end = time.time()

print("耗时: {0}".format((end-start)))

start2 = time.time()

for i in range(1000):

result = []

c = i * 1000

for m in range(100000):

result.append(c+m*100)

end2 = time.time()

print("耗时2: {0}".format((end2-start2)))

if ((end2-start2) - (end-start)) < 0:

print(f"减少内层循环计算代码速度较快,提升了{(end-start)-(end2-start2)}秒")

print("{:+.10f}".format((end2-start2) - (end-start)))

结果

耗时: 20.654181241989136

耗时2: 16.660953044891357

减少内层循环计算代码速度较快,提升了3.9932281970977783秒

-3.9932281971

其他优化手段

连接多个字符串,使用 join()而不使用+

列表进行元素插入和删除,尽量在列表尾部操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值