1.选择结构
1.1单分支结构
1.1.1 语法:
if 表达式:
语句块
1.1.2. 流程图
1.1.3 例:输入2个数,输出最大值:
a=int(input())
b=int(input())
max=a
if a
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:
语句块2
else:
......
#逻辑嵌套推荐不超过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+i
i+=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*f
f=-f
print('sum=%.6f'%sum)
3.1.4.例3:计算下列多项式的值:
sum=1
t=1
for i in range(2,101):
t=t+i
sum=sum+1/t
print(sum)
3.1.5.例4:计算下列多项式的值:
a=3
b=2
sum=0
for i in range(20):
sum=sum+a/b
t=a
a=a+b
b=t
print(sum)
3.1.6.例5:计算π的近似值,公式:
pi=1
f=-1
i=3
while 1/i>1e-6:
pi=pi+1/i*f
f=-f
i=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*i
sum = sum+1/t
i += 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+a
a=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*r
if 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:
continue
print(n,end=" ")
i+=1
if 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: #保证输入数据大于2
print('请输入大于2的正整数!')
else:
for i in range(2,prime):
if prime%i==0:
print('平数')
break
else: #循环顺利结束后执行
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+1
if 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到99
for j in range(2,i): #判断i是否为素数
if i%j==0:
break
else:
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
4.2.6.例4:输出100以内的能被9整除余数为2的数,计算其平均值的平方根并输出
aver=0
t=0 #计算器
for i in range(1,101):
if i%9==2: #计算对9取余余数为2
print(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,最小完数为6
sum=0 #每判断一个i必须先清零其因子之和
for j in range(1,i): #寻找i的因子
if i%j==0:
sum=sum+j #计算因子之和sum
if 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=i
while m>0: #对i进行整数倒置
t=t * 10+ i % 10
m=m//10
if t==i:
print(i,end=' ')