小白自学笔记之Python入门-第三章 内置函数 & 算法-2
本章就这么多内容,简单吧!下面举个例子巩固一下。
DIY做一做
1.编写程序实现输入长方形的长和宽,计算长方形的面积。
这个题目我猜你自己目前做不出来,因为你还没有学习一个非常重要的概念(故弄玄虚),除非你参考了网络资料,那就要恭喜你,你会自学了,能自己解决问题了。
用计算机解决问题需要有方法,在咱们IT界有一个专门的名词——“算法”。算法的定义为解决问题具体的方法和步骤,这个概念似乎不是那么高大上,似乎跟日常生活比较接近,但是在计算机中算法是一个非常重要的概念,我们有必要认真研究一下。严肃起来啊!
算法著名的一个例子就是古希腊数学家欧几里得(Euclid)发现的求两个正整数 A 和 B 的最大公约数(Greatest Common Divisor,GCD)问题。描述如下:
第 1 步:比较 A 和 B 这两个数,将 A 设置为较大的数,B 为较小的数。
第 2 步:A 除以 B,得余数 R(Remainder)。
第 3 步:如果 R=0,则最大公约数就是 B;否则将 B 赋值给 A,R赋值给 B,重复进行前两步。
我们暂且不管为什么通过上面的算法就能求出最大公约数,因为这是数学家研究的问题(数学很难的,特别是高数对吧?所以我们要避重就轻,冠冕堂皇的接着往下挑简单的说),我们要做的是将算法转换为计算机能够理解的语句。
不管是复杂的算法还是简单的算法,都具有5个特性:
①确定性。算法中的每个步骤都应是确定的。就是你要描述清楚,想好到底要干啥,不要产生二义性。你不能跟计算机说如果电影好看我就去看,对于好看不好看每个人有每个人的理解,计算机不知道什么叫“电影好看”,应该描述成“如果豆瓣评分大于9.9我就去看”。
②有穷性。算法中的步骤应是有限的且在有限的时间内能够执行完毕。如果执行一个计算任务要数年才能做完,等的花儿都谢了,它就不是一个算法,不能子子孙孙无穷匮也。
③有效性。算法中的每个步骤都应该被有效地执行,并能得到一个明确的结果。比如数学里规定除数不能为零,如果在算法里出现了除数为零的情况就不符合有效性了。
④可有零个或多个输入。针对具体问题,有时候需要输入,有时不需要输入的。
⑤有一个或多个输出。输出就是看问题是否被解决,算法必须有输出,没有输出的算法是没有意义的。这里的输出不能简单理解为屏幕输出,只要问题解决了就是有输出。
算法涉及的对象是数据,算法有两类:数值算法和非数值算法。数值算法是对数值进行求解,是传统意义上的计算。由于数值运算的模型比较成熟,因此对数值算法的研究是比较深入的。非数值运算包含的面很广,如图书管理、物流管理、信息系统等,其计算问题涉及更多的是“处理”,包括排序、检索、变换和分析等,非数值运算是整个计算任务的主要部分。
Dijkstra (荷兰的计算机科学家)提出算法具有三种基本控制结构:顺序、分支和循环,这三种基本结构能够解决任何问题。顺序结构(Sequence)是算法中最简单的一种结构,表示问题求解过程按照顺序由上至下执行。事实上,程序的主结构都是顺序的:从一个入口开始,到一个出口结束。顺序结构如下图所示:

比如,把大象关进冰箱一共分几步?就是按照下面的步骤一步一步进行,做完1接着2然后3。
⑴ 打开冰箱门
⑵ 把大象关进去
⑶ 关上冰箱门
分支结构(Alteration)也称为条件结构、判断结构、选择结构,如下图所示,若条件成立,则执行分支 A,否则执行 B。

比如有钱买什么?那得要看我有多少钱,如果我的钱小于1角,如果我的钱小于5角,如果我有一个亿,所以需要看看哪个条件满足,满足哪个条件就做哪个价位的事情。所以我现在要想一想我的一个亿怎么花了。
第三个控制结构是循环(Loop)结构,算法中的重复操作通过循环结构表示。循环有两种结构:while 结构和 do-while结构,如图所示,A 是循环体(Loop Body),即重复操作的那部分。

比如每天早晨锻炼跑3200米,在红旗操场一圈一圈的跑,跑完一圈看看够8圈了吗?没够继续跑,够了就停下。每一次都是在做重复的操作,但是这个重复的操作不是没完没了的,只要满足条件就可以停下来,否则还不得累死了。
Ok,到这儿介绍完了算法的概念,但是编程不仅要懂算法,在解决具体问题时还要理解程序设计的IPO模式,I是input,P是Process,O是output。在解决具体问题时,首先要考虑问题的输入是什么,然后考虑输出是什么,对数据如何处理。不管用什么语言编程,前面讲的算法和程序设计模式的原理都是通用的,不同编程语言的区别主要是语法不同而已。
以我们现在这个题目输入长方形的长和宽,计算长方形的面积为例,这里明确说明了输入是长和宽,输出或者说计算结果是面积,处理是面积求法为长*宽。按照这个思路,查阅前面函数表,我们编写程序如下,stop,自己想一想去编程吧。
参考答案:
length = float(input('输入长方形长: '))
width = float(input('输入长方形宽: '))
# 计算面积
area = length * width
print('长方形的面积为', area)
2.编写程序实现输入三边长计算三角形面积。
思考:输入是 三角形三边长 ,输出是 三角形面积 ,处理是啥呢?怎么根据三角形的三条边长计算面积,不会的话问问百度,或者我给个提示“海伦公式”。好了,自己编程去吧!
参考答案:
a = float(input('输入三角形第一边长: '))
b = float(input('输入三角形第二边长: '))
c = float(input('输入三角形第三边长: '))
# 计算半周长
s = (a + b + c) / 2
# 计算面积
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print('三角形面积为 %0.2f' % area)
3.编写程序实现输入分钟数折算成小时和分钟输出,如输入68分钟,输出1小时8分钟。
思考:输入是 ,输出是 ,处理是 。
我不再提示了,use your head!
参考答案:
minutes=int(input("minutes:"))
hour=minutes//60
minute=minutes%60
print(hour,"小时",minute,"分钟")
参照这个例题我们还可以试着做输入用分表示的钱数(不到一元),输出最小数目的硬币数目。如输入86分,输出1个五角硬币,3个一角硬币,1个5分硬币,1个1分硬币。这里我们考虑硬币类型为:五角、一角、5分、2分和1分这几种类型。试着完成这个程序吧。
参考答案:
The furthest distance in the world is not between life and death but when I stand in front of you yet you don't know that I love you.
Let life be beautiful like summer flowers and death like autumn leaves.
From Tagore
哈哈哈,这个参考答案是假的!自己动手,迎接挑战,祝你成功!
好,本章内容就到这里,到这里吧!
Quiz考一考
这里是通过学习,自己总结知识点和要点,设计3个本章内容相关的题目并提供参考答案。题目类型编程题。
最好你设计的题目能够有特点、够经典,这样就有机会作为最后的考题。
编程题
1.编写程序实现输入出生年月日,输出年龄和幸运数字。其中幸运数字为月日的数字累加和。如输入year=2000,month=8,day=12。则年龄20,幸运数字计算方法为2+0+0+0+8+1+2=13 1+3=4,最终幸运数字为4。
参考答案:
year=int(input("year:"))
month=int(input("month:"))
day=int(input("day:"))
y1=year//1000
y2=year%1000//100
y3=year%100//10
y4=year%10
sum=y1+y2+y3+y4+month//10+month%10+day//10+day%10
luckyNo=sum//10+sum%10
print("你2020年",2020-year,"岁了")
print("你的幸运数字是..")
print("..............")
print("..............",luckyNo)
2.还没记住呢?现在该你了!
你的笔记



The end.