python-控制结构
一、程序基本结构
程序流程图
二、简单分支
1、条件判断
if<condition>:<body>
else if<condition>:<body>
else:<body>
2、关系操作符:<,<=,==,>=,>,!=
and 、or 、 not
3、二分支结构 <表达式1>if<条件>else<表达式2>
#紧凑形式:简单表达式的二分支结构 guess = eval(input()) print("猜{}了".format("对" if guess == 99 else "错"))
4、例子
##求解二次方程 import math def main(): a,b,c = eval(input('请输入方程的3个参数(a,b,c):')) delta = b*b-4*a*c if a == 0: x = -b / c print('\n该方程不是二次方程,只有一个解为:', x) elif delta < 0: print('该一元二次方程无实根!') elif delta == 0: discRoot = math.sqrt(delta) ##开根号 root1 = (-b + discRoot) / (2 * a) print('\n该方程只有一个重根为:', root1) else: discRoot = math.sqrt(delta) ##开根号 root1 = (-b + discRoot) / (2*a) root2 = (-b - discRoot) / (2*a) print('\n该方程的两个实根分别为:',root1,root2) main()
三、异常处理
1、try.......except......
while True: try: x = int(input('请输入一个数字:')) break except ValueError: print('输入的不是一个有效数字!请再次输入!')
2、try......except........else......finally.....
try中有异常执行except,如无异常执行else,无论是否发生异常都要执行finally
def main(): try: num1,num2 = eval(input('请输入两个数字做除法,以逗号为分隔:')) result = num1 / num2 except ZeroDivisionError: print('0不能做除数!') except SyntaxError: print('少输入一个逗号!') except: print('输入有误!') else: print('没有错误,计算结果为:',result) finally: print('最后执行语句。。。') main()
##求解二次方程 import math def main(): try: a,b,c = eval(input('请输入方程的3个参数(a,b,c):')) delta = b*b-4*a*c discRoot = math.sqrt(delta) ##开根号 root1 = (-b + discRoot) / (2*a) root2 = (-b - discRoot) / (2*a) print('\n该方程的两个实根分别为:',root1,root2) except ValueError as excObj: if str(excObj) == 'math domain error': print('没有实根!') else: print('没有给到正确的系数') except NameError: print('输入的并非3个数字!') except TypeError: print('输入的并非数字') except SyntaxError: print('输入形式有误,可能没有输入逗号分隔') except: print('其他类型错误') main()
实例1----找出三者最大
##N个数中最大值 def main(): n = eval(input('输入数值的个数:')) max = eval(input('输入第一个数>>>>')) for i in range(n-1): x = eval(input('输入下一个数>>>>')) if x >= max: max = x print('最大值为:',max) main() ## max()函数 x,y,z = eval(input('输入3个数:')) print('最大值为:',max(x,y,z))
实例2----身体质量指数BMI
##身体质量指数BMI try: height , weight = eval(input('请输入身高/体重【以逗号隔开,例:1.66,60】:')) bmi = weight / pow(height,2) print('BMI数值为{:.2f}'.format(bmi)) who , nat = '','' if bmi <18.5: who,nat = '偏瘦','偏瘦' elif 18.5<= bmi <24: who, nat = '正常', '正常' elif 24<= bmi <25: who, nat = '正常', '偏胖' elif 25 <= bmi < 28: who, nat = '偏胖', '偏胖' elif 28 <= bmi < 30: who, nat = '偏胖', '肥胖' else: who, nat = '肥胖', '肥胖' print('BMI指标为:国际"{}",国内"{}"'.format(who,nat)) except: print('输入格式不正确')
四、循环结构
1、for循环
需要提供固定循环次数
## 循环列表中的每个元素 words = ['hello','sleeping','tommorrow'] for w in words: print(w,len(w))
for i in range(5): i是在0--4
for i in range(1,6,2): print(i,end='') ##135
2、while循环
continue---终止本次循环
break-----终止整个循环
通常搭配if使用,尽量少用
循环语句中的else
当循环没有被break退出时,执行else语句
for n in range(2,10):
for x in range(2,n):
if n % x == 0: ## 余数
print(n,'=',x,'*',n // x) ##不大于n除以x的最大整数
break
else:
print(n,'是一个素数')
3、交互式循环
##交互式循环 ##求平均数 sum = 0 count = 0 moredata = 'yes' ##字符串索引 while moredata[0] == 'y': x = eval(input('输入一个数字:')) sum += x count += 1 moredata = input('你需要输入更多数字吗(yes/no)?') print('平均数为:',sum/count)
4、哨兵循环
##哨兵循环1 ##求平均数 ##选取<0的数作为哨兵 sum = 0 count = 0 x = eval(input('输入一个数字(输入负数即停):')) while x>=0: sum += x count += 1 x = eval(input('输入一个数字(输入负数即停):')) print('平均数为:',sum/count)
##哨兵循环2 ##求平均数 ##选取空字符''(没有空格)作为哨兵 sum = 0 count = 0 xStr = input('输入一个数字(直接回车即停):') while xStr != '': x = eval(xStr) sum += x count += 1 xStr = input('输入一个数字(直接回车即停):') print('平均数为:',sum/count)
5、文件循环
##文件循环 ##求平均数 infile = open('数中', 'r') sum = 0 count = 0 for line in infile: ##遍历文件每一行 sum += eval(line) count += 1 print('平均数为:',sum/count)
##文件循环 ##求平均数 infile = open('数中', 'r') sum = 0 count = 0 line = infile.readline() while line != '': sum += eval(line) count += 1 line = infile.readline() print('平均数为:',sum/count)
6、嵌套循环
##嵌套循环 ##求平均数 infile = open('数中', 'r') sum = 0 count = 0 line = infile.readline() while line != '': for xStr in line.split(','): ## 文件只有一行数字,用,隔开 sum += eval(xStr) count += 1 line = infile.readline() print('平均数为:',sum/count)
7、死循环
while True:
8、后测循环:条件语句在循环体的后面
python没有后测循环语句,可以通过while或break实现
##后测循环,while num = -1 while num < 0: num = eval(input('请输入一个正数:'))
##后测循环,break while True: num = eval(input('请输入一个正数:')) if num >= 0 :break
五、布尔表达式
1、True /// False
2、运算符优先级 not >> and >> or
绝对值函数 abs()
3、数字:0--False,非0--True
字符串:''--False,非空--True
序列:[]--False,非空序列--True