分支/选择结构——单分支、双分支、多分支
顺序结构、选择结构、循环结构
选择中再做选择,就是选择嵌套
1、单分支和双分支
是否先执行否事件的问题
2、多分支和分支嵌套
多条件、多语句块
if……elif……else……
前面分支不满足后,再进行后面分支的判断(范围小的先选,大的后选)
mark = eval(input("输入成绩:"))
if mark < 60:
print("不及格")
elif mark < 70:
print("及格")
elif mark < 80:
print("中")
elif mark < 90:
print("良")
else:
print("优")
选择结构的嵌套
在if语句中又包含一个或者多个if语句
应用:求一元二次方程的根
a,b,c=eval(input("请输入三个系数,以逗号隔开:"))
if a == 0:
print("不是一元二次方程")
else:
delta = b*b-4*a*c
if delta == 0:
print("两个相同实根")
elif delta > 0:
print("两个不同实根")
else:
print("有不同虚根")
应用:判断三角形
import math
a,b,c = eval(input("输入三角形的三条边,以逗号隔开:"))
if a+b>c and a+c>b and b+c>a:
mark = 0
if a=b or b=c or a=c:
mark = 1
if a=b=c:
print("等边",end="")
else:
print("等腰",end="")
if a*a+b*b=c*c or a*a+c*c=b*b or c*c+b*b=a*a:
# if math.fabs(a*a+b*b-c*c)<0.001 or math.fabs(a*a+c*c-b*b)<0.001
#or math.fabs(c*c+b*b-a*a)<0.001: #这一行是因为有时候在判断直角三角形时,输入边长为小数时,在python的计算中,不满足勾股定理
mark = 1
print("直角",end="")
if mark = 0:
print("一般",end="")
else:
print("不能构成",end="")
print("三角形")
循环结构
条件循环(while)、遍历循环(for)、break和continue、循环的嵌套(多循环)、循环与else搭配
条件循环(while)
while<条件>表达式:
循环体语句块
#求1到100相加的和
i = 1
sum = 0
while i < 101:
sum = sum + i
i = i + 1
# i = i + 2 奇数和
print("总和")
先判断再执行,因此循环语句块有可能出现不执行的情况
遍历循环(for)
for 循环变量 in 遍历结构:循环体语句块
出现range()函数,有start,end,step(可省略,默认步长为1)
可遍历字符串、range函数产生的数字序列、列表、元组、字典、文件
#计算1-2+3-4+5-6+...n的值
n = eval(input("请输入n的值:"))
s = 0
for i in range(1,n+1):
s = s + i*(-1)**(i+1) #或者用幂函数s = s + i*pow(-1,i+1)
print(s)
当循环次数很明确的时候,采用遍历循环
循环辅助控制语句:break和continue
break:for或者while循环体执行时候,当满足某个条件,需要中止当前循环跳出循环体时,用break语句跳出并结束当前整个循环,执行循环后的语句。
continue:跳过当前这次循环,继续进行下次循环
# 求100-200之间所有非3的倍数之和
sum = 0
for i in range(100,201):
if i % 3==0:
continue #跳过3的倍数进入相加的循环
sum=sum+i
print("sum=",sum)
循环嵌套
循环体内又循环
应用1:打印九九乘法表
# 打印九九乘法表
for i in range(1,10)
for j in range(1,10)
#print(i,'*',j,'=',i*j) # 九九乘法式子打印成一列
#print(i,'*',j,'=',i*j,end='') #不再每个式子都换行了
print('%d*%d=%2d'%(i,j,i*j),end='') #可以避免因为结果一位数和两位数导致的不对齐
print() # 就可以在1*9后2*9后...每九个式子换行了
# 打印九九乘法表下三角
for i in range(1,10)
for j in range(1,i+1) #i还是1~9,但是此时j不再是1~9了
print('%d*%d=%2d'%(i,j,i*j),end='')
print()
#打印九九乘法上三角
for i in range(1,10)
print(''*(i-1)*7,end='') # 每行前面打印7*(i-1)个空格,得到上三角
for j in range(i,10) #i还是1~9,但是此时j此时是i~9了
print('%d*%d=%2d'%(i,j,i*j),end='')
print()
应用2:求2-100之间所有素数
判断一个整数n是否为一个素数,就是用2~n-1的每个数去除它,有因子不是素数,无因子,是素数
import math
#n = eval(input("请输入一个整数:"))
for n in rang(2,101):
m = int(math.sqrt(n)) #比如36只需要判断2,3,4,5,6
for i in range(2,m+1):
if n%i = 0:
break
else:
print(n,'是素数')
应用3:随机数求圆周率
一个半径为1的圆(为正方形内切圆),圆心为原点,同心边长为2的正方形
采用撒点,看落在圆内几率的方式计算圆周率
import random
s = eval(input("请输入循环次数:")) #单位正方形内总的撒点数
n = 0 #n表示1/4圆内部的撒点数
for i in range(1,s+1):
x,y = random(),random() #撒点的x和y坐标
if x*x+y*y<=1: #如果点在圆的内部则计数
n = n+1
pi = 4 *(n/s) #计算pi
print("圆周率是:{}".format(pi))
程序调试的方法:
print:在程序代码怀疑出错的代码附近,用print语句打印变量,看变量是否正确
断点法,打断点
常见异常:
类型错误(TypeError),是字符串和数字相加发生的错误
值错误(ValueError),转字符串为整数时导致错误
语法错误(SyntaxError),少了冒号
下标错误(IndexError),试图引用不存在的下标
异常处理:
try:
expect: