热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序基本机构

任何算法(程序)都可以由顺序结构、选择结构和循环结构这三种基本结构组合来实现。1、顺序结构顺序结构中,按语句的自然顺序依次执行。2、选择结构(1)多分支决策:if-else。这是简单分之结构

任何算法(程序)都可以由顺序结构、 选择结构和循环结构这三种基本结构组合来实现。 

1、顺序结构

顺序结构中,按语句的自然顺序依次执行。

 

2、选择结构

(1)多分支决策:if-else。这是简单分之结构,

 1 import math
2 def main():
3 print("求二次方程的实根\n")#换行,反斜杠和n
4 a,b,c=eval(input("输入二次函数的系数(a,b,c):"))#用逗号隔开,同时输入三个数
5 delt=b**2-4*a*c
6 if delt>0:
7 delt=math.sqrt(b**2-4*a*c)
8 root1=(-b+delt)/(2*a)
9 root2=(-b-delt)/(2*a)
10 print("二次函数的实根为:",root1,root2)
11 # print("二次函数的实根为root1=%f,root2=%f:"%root1,%root2) 编译不通,留看
12 elif delt==0:
13 delt=math.sqrt(delt)
14 root1=(-b+delt)/(2*a)
15 print("相同的实根",root1)
16 else:
17 print('没有实根')
18
19 main()

if-elif-elif-else 多个互斥的判断语句

(2)

 1 from math import *
2 def main():
3 print("二次方程求根方法")
4 a,b,c=eval(input("输入系数:"))
5 delta=b**2-4*a*c
6 if delta<0:
7 print("方程没有实根")
8 else:
9 if delta==0:
10 root=-b/2*a
11 print("相同的实根",root)
12 else delta>0:
13 delta=sqrt(delta)
14 root1=(-b+delta)/(2*a)
15 root2=(-b-delta)/(2*a)
16 print("实根为:",root1,root2)
17
18 main()

这是from math import *这种形式,调用函数不用前面加库名;再有体会if-if-if、if-else嵌套if-else 形式和if-elif-elif-else形式区别

3、异常处理机制

如果处理错误或特殊情况的分支语句过多,那么处理正常情况的主程序就会变得不清晰

(1)

 1 def main():
2 try:
3 number1,number2=eval(input("enter two number,separated by a comma\n"))
4 result=number1/number2
5
6 except ZeroDivisionError:
7 print("Division by zero!")
8 except SyntaxError:
9 print("A comma may be missing in the input")
10 except :
11 print("Something wrong in the input")
12 else:
13 print("No excepting,the result is",result)
14 finally:
15 print("executing the final clause")
16 main()

从这段代码中可以看出,try-except的执行顺序,先执行try中的内容,如果没有错误,执行else和finally中内容;如果出错,执行except内容,最后执行finally内容。

(2)将try-except 加入二次方程根代码

 1 import math
2 def main():
3 print('this program finds the real solutions to a quadratic')
4 try:
5 a,b,c=eval(input("please enter the coefficients(a,b,c)\n"))
6 discroot=math.sqrt(b*b-4*a*c)
7 root1=(-b+discroot)/(2*a)
8 root2=(-b-discroot)/(2*a)
9 print("the solutions are:",root1,root2)
10 except:
11 print("some thing went trong")
12
13 main()

(3)标准异常

 1 import math
2 def main():
3 print('this program finds the real solutions to a quadratic')
4 try:
5 a,b,c=eval(input("please enter the coefficients(a,b,c)\n"))
6 discroot=math.sqrt(b*b-4*a*c)
7 root1=(-b+discroot)/(2*a)
8 root2=(-b-discroot)/(2*a)
9 print("the solutions are:",root1,root2)
10 except ValueError as exc0bj:
11 if str(exc0bj)=="math domain error":
12 print("No real roots")
13 else:
14 print("you didn't give me the right number of codfficients")
15 except NameError:
16 print("you didn't enter three numbers")
17 except TypeError:
18 print("you input was not the correct form")
19 except:
20 print("some thing went trong")
21
22 main()

 

 

4、分支结构——数值比较

(1)四个数值比较

<1>通盘比较 :每个数与其他数全部比较

 1 import math
2 import time
3
4 def main():
5 try:
6 a,b,c,d=eval(input("enter four numbers:\n"))
7 time.clock()
8 if a>=b and a>=c and a>=d:
9 print("max=",a)
10 elif b>=a and b>=c and b>=d:
11 print("max=",b)
12 elif c>=a and c>=b and c>=d:
13 print("max=",c)
14 else:
15 print('max=',d)
16 except:
17 print("wrong")
18 print("time is ",time.clock())
19 main()
 

此种方法,在数据多时,耗时,耗内存,存在重复比较的情况。

<2>策略2:决策树

决策树方法可以避免冗余比较,先判断x1>x2,如果成立再判断x1>x3,否则判断x2>x3,虽然效率高,但设计三个以上的方案,复杂性会爆炸性地增长 

 1 import math
2 import time
3
4 def main():
5 try:
6 a,b,c,d=eval(input("enter four numbers:\n"))
7 time.clock()
8 if a>=b:
9 if a>=c:
10 if a>=d:
11 print("max=",a)
12 else:
13 print("max=",d)
14 else:
15 if c>=d:
16 print("max=",c)
17 else:
18 print("max=",d)
19 else:
20 if b>=c:
21 if b>=d:
22 print("max=",b)
23 else:
24 print("max=",d)
25 else:
26 if c>=d:
27 print("max=",c)
28 else:
29 print("max=",d)
30 except:
31 print("wrong")
32 print("time is ",time.clock())
33 main()

 

<3>顺序处理
逐个扫描每个值,保留最大者以max变量保存当前最大值,完成最后一个扫描时,max就是最大值 

 1 import math
2 import time
3 import random
4
5 def main():
6 try:
7 # a,b,c,d=eval(input("enter four numbers:\n"))
8 a,b,c,d=random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100)
9 print(a,b,c,d)
10 max=a
11 time.clock()
12 if max<b:
13 max=b
14 if max<c:
15 max=c
16 if max<d:
17 max=d
18 print("max=",max)
19 except:
20 print("wrong")
21 print("time is ",time.clock())
22 main()

 1 import math
2 import time
3 import random
4
5 def main():
6 try:
7 a,b,c,d=eval(input("enter four numbers:\n"))
8 print(a,b,c,d)
9 max=a
10 time.clock()
11 if max<b:
12 max=b
13 elif max<c:
14 max=c
15 elif max<d:
16 max=d
17 print("max=",max)
18 except:
19 print("wrong")
20 print("time is ",time.clock())
21 main()

可以看出 if-if-if和if-elif-elif 的区别,前者是挨个向后运行,后者是只运行符合条件的。

<4>调用自带函数

 1 import math
2 import time
3 import random
4
5 def main():
6 try:
7 a,b,c,d=random.randint(1,100),random.randint(1,100),random.randint(1,100),random.randint(1,100)
8 print(a,b,c,d)
9 print("max=",max(a,b,c,d))
10 except:
11 print("wrong")
12 print("time is ",time.clock())
13 main()

花费时间最短

<5>if-if-if 和 if-elif-elif-else

 1 from math import *
2 from random import *
3
4 def main():
5 try:
6 a=randint(50,100)
7 print(a)
8 if a>90:
9 print("优秀")
10 elif a>80:
11 print("良好")
12 elif a>70:
13 print("一般")
14 elif a>=60:
15 print("合格")
16 else:
17 print("不合格")
18 except:
19 print("出错")
20
21 main()
from math import *
from random import *

def main():
try:
a
=randint(50,100)
print(a)
if a>=90:
print("优秀")
if a>=80 and a<90:
print("良好")
if a>=70 and a<80:
print("一般")
if a>=60 and a<70:
print("合格")
if a<60:
print("不合格")
except:
print("出错")

main()

5、循环结构

(1)for 循环

Python可以使用for语句循环遍历整个序列的值
for in :

在for循环中,循环变量var遍历了队列中的每一个值,循环的语句体为每个值执行一次。 

(2)求平均数

 1 from math import *
2 from random import *
3
4 def main():
5 try:
6 n=eval(input('数字个数:'))
7 sum=0
8 for i in range(n):
9 num=randint(0,100)
10 print(num)
11 sum=sum+num
12 print("平均值为:",sum/n)
13 except:
14 print("运行出错")
15 main()

 (3)while循环无限循环

语法:while语句

while :

while语句中是布尔表达式
循环体是一条或多条语句当条件为真时,循环体重复执行当条件为假时,循环终止在while循环中,条件总是在循环顶部被判断,即在循环体执行之前,这种结构又被称为前测循环 

(4)Break 语句- 跳出最内层for/while 循环

import math
sum=0
num=0
while num<20:
num=num+1
sum=sum+num
if sum>100:
break
print("num=",num)
print("sum=",sum)

 (5)for/while 中的continue用法

continue语句, 其作用为结束本次循环。即跳出循环体中下面尚未执行的语句,对于while循环,继续求解循环条件。而对于for循环程序流程接着遍历循环列表

continue语句和break语句的区别是:

continue语句只结束本次循环,而不终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立: 

1 import math
2 num=0
3 while num<10:
4 num=num+1
5 if num%2==0:
6 print("find an even number",num)
7 continue
8 print("find a number",num)
9

(6)for/while 中的else用法

Break 语句- 跳出最内层for/while 循环

语句与循环的搭配使用,else:后的表达式在for循环列表遍历完毕后或while 条

件语句不满足的情况下执行,例如:

 1 import math
2 def main():
3 n=eval(input("输入素数范围:"))
4 for x in range(2,n):
5 for i in range(2,x):
6 if x%i==0:
7 break
8 else:
9 print(x,"是素数")
10 main()

while/for 循环和else的使用,就是执行完循环后,再执行else;

而if-else 则是,只执行if或者else。

 


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
author-avatar
假装坚持-我很不爽_547
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有