1.选择结构
1.1单分支结构
1.1.1 语法:
if 表达式:语句块
1.1.2. 流程图
1.1.3 例:输入2个数,输出最大值:
a=int(input())
b=int(input())
max=a
if a<b:max=b
print(max)
1.1.4.注意:
-
表达式:一般表达式,常量,关系表达式,逻辑表达式
-
优先级:!(非)>算术>关系>and 和or>赋值运算符
-
规则:逻辑表达式只检测是否为非0或非空字符串或非None就会执行分支
-
注意:分支语句的缩进
1.2.1.语法:
if 表达式:语句块1
else:语句块2
1.2.2.流程图
1.2.3.例:输入一个整数判断奇偶数
num=input("请输入一个整数:")
if num%2==1:print('奇数')
else:print('偶数')
num=int(input("请输入一个整数:"))
if num & 1 == 1:print('奇数')
else:print('偶数')
1.2.4.例:判断一个整数能否被7或11整除但不能同时整除
num=int(input("请输入一个整数:"))
if (num%7 ==0 or num%11==0) and num%77!=0:print('yes') #and优先级高于or
else:print('no')
1.2.5.例:判断闰年:能被4整除但不能被100整除,或者能被400整除。
year=int(input('请输入四位数年份'))
if year%4==0 and year%100!=0 or year%400==0:print('闰年')
else:print('平年')
1.3.多分支结构
1.3.1.语法1:
if 表达式1:语句块1
else:if 表达式2:语句块2else:......
#逻辑嵌套推荐不超过7层
1.3.2.语法2:
if 表达式1:语句块1
elif 表达式2:语句块2
elif 表达式3:语句块3
.....
else:语句块n
1.3.3.流程图:
1.3.4.例:输入三个整数,降序输出:
a=int(input())
b=int(input())
c=int(input())
if a>b:if a>c:if b>c:print(a,b,c)else:print(a,c,b)else:print(c,a,b)
else:if a>c:print(b,a,c)elif b>c:print(b,c,a)else:print(c,b,a)
1.3.5例:输入一个百分制成绩,输出成绩
x>90 优秀
90>x>=80 良好
80>x>=60 及格
x<60 补考
x=int(input('请输入一个百分之成绩(0-100):'))
if x>100 or x<0:print('数据有误,请输入0-100范围的数字')
elif x>=90:print('优秀')
elif x>=80:print('良好')
elif x>=60:print('及格')
else :print('补考')
1.3.6.注意:
-
if else elif 之后的冒号不能省略
-
elif 与 else 不能单独使用
-
通过缩进判断是否是同一语句块
2.循环结构
2.1.while循环
while 条件表达式:循环体语句
2.1.2.流程图
2.2.for循环
2.2.1.格式:
for 迭代变量 in 对象:循环体
#数值循环:
for 迭代变量 in range(start,and,step):循环体
2.2.2.range()函数:
-
python3中内置函数,用于生成一系列连续的整数
-
start:计数起始值,若省略则为0
-
end:计算终止值,不包含(开区间),如range(9)表示产生0-8的整数,end参数不可省略
-
step:步长,默认为1
-
注意:range()函数只有一个参数,改参数表示end,二个参数时为start和end,三个参数时最后一个为step
-
例:计算1+2+3+4+......100之和
#while循环
sum=0
i=1
while i <=100:sum=sum+ii+=1
print(sum)
#for循环
sum=0
for i in range(1,101):sum+=i
print(sum)
2.2.3.注意
-
循环表达式值为非0时执行循环体
-
循环区间尽量使用开区间
-
循环嵌套时钟长循环应在内部,短循环在外,以减少内外循环跨越次数,提高效率
for i in range(10)for j in range(3):......
for j in range(3):for i in range(10):......
-
循环嵌套应限制在3层以内,以提高理解性
3.程序示例
3.1.累加和
3.1.1.框架:
sum=0
for i in range(终止值):sum=sum+新项
3.1.2.例1:计算下列多项式的值:
sum=0
for i in range(1,101):sum=sum+1/i
print('sum=%.6f'%sum)
3.1.3.例2:计算下列多项式的值
sum=1
f=-1
for i in range(2,101):sum=sum+1/i*ff=-f
print('sum=%.6f'%sum)
3.1.4.例3:计算下列多项式的值:
sum=1
t=1
for i in range(2,101):t=t+isum=sum+1/t
print(sum)
3.1.5.例4:计算下列多项式的值:
a=3
b=2
sum=0
for i in range(20):sum=sum+a/bt=aa=a+bb=t
print(sum)
3.1.6.例5:计算π的近似值,公式:
pi=1
f=-1
i=3
while 1/i>1e-6:pi=pi+1/i*ff=-fi=i+2
print('pi=%.6f'%(pi*4))#注意:多项式的迭代时某一运算结果大于1e-6时说明其值需要累加,误差较大需要运算,小于等于1e-6时则结束循环迭代,表示当前数值较小,误差可控可以结束循环
3.1.7.例6:利用泰勒级数计算e的近似值
e=1+1/1! +1/2! +1/3! + .........+1/n!
sum=1
t=1
i=1
while 1 / t > 1e-6:t = t*isum = sum+1/ti += 1
print(sum)
3.1.8.例7:计算a+aa+aaa+aaaa+aaa....aaa的值,其中计算前6项之和,a=2
sum=0
a=2
for i in range(6):sum=sum+aa=a*10+2
print(sum)
4.1.素数判断
4.1.1.break语句(结束循环):终止当前循环,执行循环外的下一条语句,一般与if搭配使用,如:
例:计算r=1到r=10时圆的面积直到面积大于100为止
import math
for r in range(1,11):area=math.pi*r*rif area>100:break
print('r:',r,'area is :%.6f'%area)
4.1.2.continue语句(加速循环):跳出当前次循环,继续执行下一次循环,一般与if语句搭配使用,若执行到continue语句,该语句之下的所有循环体语句都不执行直接跳到步长迭代出,如:
例:将100到150之间的不能被3整除的数输出,要求一行输出10个数
i=0
for n in range(100,151):if n%3==0:continueprint(n,end=" ")i+=1if i%10==0:print()
4.1.3. for-else结构:for循环执行完或者未进入循环(即for循环不是通过break语句跳出而中断的)情况下执行else,例:
for i in range(1,100):if i%2==0 and i%3==0 and i%5==0:print('%d 是2,3,5的最小公倍数' % i)break
else:print('未找到!')
执行过程:当for循环正常执行完毕则会执行else之后的语句,若执行break异常跳出则不会执行else后语句,
for i in range(1,100):if i%2==0 and i%3==0 and i%5==0:print('%d 是2,3,5的最小公倍数' % i)#break
else:print('未找到!')
若删除上列中的break会出现问题,所有公倍数都会被打印出来,有满足循环正常结束则else之后的未找到也会被打印
4.2.4.素数:只能被1和自己本身整除的数称为素数,例:输入一个整数,判断是否为素数:
prime=7 7%2 7%3 7%4 7%5 7%6 素数
prime=8 8%2 8%3 ...... 8%7 平数
prime=9 9%2 9%3
-
判断范围:[2,n-1]
-
判断方法:整除%
#方法1
prime=int(input('请输入一个正整数:'))
if prime<2: #保证输入数据大于2print('请输入大于2的正整数!')
else:for i in range(2,prime):if prime%i==0:print('平数')breakelse: #循环顺利结束后执行print('素数')
prime=7
prime%2 !=0
prime%3 !=0
prime%5!=0
prime%6!=0
prime%7!=0
prime=8
prime%2!=0
#方法:2
prime=int(input('请输入一个正整数:'))
i=2
if prime<2:print('请输入大于2的整数!')
else:while prime%i:i=i+1if i==prime:print('素数')else:print('平数')
方法3筛选法: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 素数i的倍数一定不是素数,如序列1-20中去掉2的倍数,3的倍数....剩余一定是素数
4.2.穷举法
4.2.1作用:在指定范围内寻找符号条件数
4.2.2.框架:
for i in range(起始,终止,步长):if 条件表达式:处理
4.2.3. 例1:输出100以内的素数
for i in range(2,100): #遍历2到99for j in range(2,i): #判断i是否为素数if i%j==0:breakelse:print(i,end=' ') #输出素数
4.2.4. 例2:输出200到400间的非素数
for i in range(200,400):for j in range(2,i):if i%j==0:print(i)break
4.2.5.例3:输出大于m且紧随m的k个素数,如:m=5 k=3 结果为:7 11 13
#变量初始值
m=int(input('请输入起始值:'))
k=int(input('请输入需要的素数个数:'))
i=m+1
t=0 #计数器,记录找到的素数个数
while t<k: #当自己找到的素数小于指定个数k的时候继续寻找for j in range(2,i): #判断i是否为素数if i%j==0:breakelse:t=t+1 #记录找到的素数个数print(i,end=' ') #输出素数i=i+1 #继续下一个数的寻找
4.2.6.例4:输出100以内的能被9整除余数为2的数,计算其平均值的平方根并输出
aver=0
t=0 #计算器
for i in range(1,101):if i%9==2: #计算对9取余余数为2print(i,end=' ')aver=aver+i #计算和值t=t+1 #记录个数
print('\n aver=%.2f'%((aver/t)**0.5))
4.2.7.例5:输出水仙花数,每位数的立方和等于原值,如:153==1^3+5^3+3^3
水仙花数:153 370 371 407
for i in range(100,1000):if(i%10)**3+(i//10%10)**3+(i//100)**3==i:print('水仙数:',i)
4.2.8.例6:输出1000以内的完数,完数:因子之和等于原值,如:6==1+2+3
i in range(6,1000): #遍历0到999,最小完数为6sum=0 #每判断一个i必须先清零其因子之和for j in range(1,i): #寻找i的因子if i%j==0:sum=sum+j #计算因子之和sumif sum==i: #判断因子之和是否等于原数print(i,end=' ')
4.2.9. 例7:输出100以内的同构树,同构树:若一个正整数出现在它的平方数的右侧则为同构数,如:5==25 6==36 25==625
for i in range(100):#100以内的同构数平方后可能为2位数或者3位数if i==i * i % 10 or i == i * i % 100:print(i,end=' ')
4.3.1.例8:输出200以内的回文数字
(整数倒置算法)
for i in range(100):t=0 #倒置后数m=iwhile m>0: #对i进行整数倒置t=t * 10+ i % 10m=m//10if t==i:print(i,end=' ')