共计 2255 个字符,预计需要花费 6 分钟才能阅读完成。
程序是什么?就是一堆代码啰。然而代码是有组织而来的,不是凭空堆砌进去的。有一个“古老”的说法:程序 = 数据结构 + 算法,意思是,程序是由一些数据结构(数据的组织构造)加上某些算法而造成的。从这个角度,算法才是主驱动力,而数据结构是服务于算法的(当然你可能因为有了某个很好用的数据结构而设计了某个算法,但算法依然是配角)。那算法又是什么?算法就是设计好的,达成某个事件的步骤。所以,从这个角度,程序只是某些步骤的体现,这些步骤也叫流程,而程序就是流程体现。
我赞成这个“古老”说法(或者是我对它的解读),程序只是封装流程的外壳,因此,程序跟算法是两码事,尽管它们是有关联的。程序只是算法的一种体现,但不是惟一的体现,算法还能够用笔写到纸上,还能够用算盘体现进去,还能够通过一些对答、比喻或类比表达出来,还能够通过实际操作体现进去。算法能够是通用的设计步骤,也能够是某个畛域的特有的设计步骤。算法有专门的设计与剖析,它并不需要程序来撑持。 算法是魂,程序是壳 ,存在这些状况:“算法很强,但程序很烂”(壳写不好)、“程序很强,但算法很烂”(魂设计不好,但很会封装)。
如果程序只是一个壳,那是不是就不重要了呢?必定不是了,写壳,也是技术活,也要设计,也讲教训,也要学习。而且,程序能手是能够通过程序去设计算法的,比方他们能够相熟地通过 if/while 这些构造去设计算法,当然,这不是必须的,也未必是好的设计算法的方法。特地是,对于程序开发,比方前后端、客户端等开发,你不相熟把握写程序(写壳)的技能与常识,你是站不住脚的,但未必要求你要有很强的算法设计能力。
好了,说了一堆废话。其实我是想说 python 的语言个性,把握这些个性能力更快更好地把壳写好。跟练习打篮球一样,一开始先把合成动作做好,之后再连贯起来 – 那如果不练合成而间接连贯,行不行?也行,练合成不是必须的,特地是对工具的应用,边用边搜寻也是个好方法,但本文的介绍,是从合成开始。
python 的语言个性能够分:变量、数据类型(数据结构)、语句、代码组织等。
(1)变量
变量,就是值能够扭转的量,所以变量是用来寄存值的。在 python 中定义一个变量,就是把一个值给这个变量,所以你想遗记初始化都不行,你肯定要把值给变量的,而在给值时,这个变量的类型就确定下来了,是的,变量都有类型。python 内置了不少好用的类型(也能够叫数据结构),这个后续再具体介绍。
须要什么变量?这个跟流程无关,比方,假如流程是把输出的两个数相加,那就能够思考应用两个变量,用于保留输出的值,比方这样:
最简略的想法,就是流程中须要保留(长期或长期保留)什么值,就设计什么变量。
(2)流程
流程是配角。
如果说一个程序的逻辑不行,个别是说程序在流程解决上不行,而常常说的“程序算法”,说的就是流程的设计。程序是对流程的封装,前提是,这个流程要想好,要设计好,当然,流程(或算法)也不肯定要你来设计,他人设计你来翻译也是能够的。
程序就是对流程的翻译。所以,以前有一段时间,部门主管教我写代码,是要我先用正文把流程的每一步写好,而后再写代码翻译。当然因为正文可能是不必要的累赘,才缓缓地不写步骤上的正文,但意思就是要造成习惯:先设计好流程,再来写代码。
不论流程的具体内容是什么,从构造来看,流程能够辨别成三种:程序流程、分支流程、循环流程。
程序流程,就是从上到下一句一句地执行的流程,这样的流程必然会存在。分支流程(if/else),就是依据不同的条件,抉择执行的操作。循环流程,就是反复地执行某些操作。
这三种流程,基本上都是混合应用,以组合拳的形式呈现,比方上面的“猜数字”:
# -*- coding: utf-8 -*-
import random
secret=random.randint(0,100)
temp=input("请说出我想的数字:");
guess=int(temp)
while guess!=secret:
if guess>secret:
print("没有这么大,说个小的!")
else:
print("太小了,说个大的!")
temp=input("猜错了,再来一次吧:")
guess=int(temp)
print("厉害,猜对了!")
下面这个“猜数字”游戏,用到了循环(while) 与分支(if..else)的流程。
具体上,对于分支流程,个别有两种表达形式:
if … else
if … elif … else
对于循环流程,个别有两种表达形式:
while xx:
for xx in []:
再写两个程序,一个打印“钻石”,一个打印九九乘法表:
i=1
while i<=17:
cnt = i
if i>9:
cnt = 18-i
starcnt = (cnt-1)//2
spacecnt = 4-starcnt
print(""*spacecnt, end="")
print("*"*starcnt,end="")
print("*", end="")
print("*" * starcnt, end="")
print(" " * spacecnt)
i+=2
j=1
while j<=9:
i=1
while i<=j:
print("%d * %d = %d"%(i,j,i*j), end="\t")
i+=1
print("")
j+=1
发现法则并设计,是失去流程的重要方法。
打印成果如下:
好了,以上介绍了变量跟流程,特地是对流程的翻译即语句的应用。一门语言是一种工具,你要学着去用,边用边试错,能力更好更快地把握它,不要拘泥于细节,除非细节影响到你解决问题了。
有缘再见,see you。