python应用(4):变量与流程

程序是什么?就是一堆代码啰。可是代码是有组织而来的,不是凭空堆砌出来的。有一个“古老”的说法:程序=数据结构+算法,意思是,程序是由一些数据结构(数据的组织结构)加上某些算法而造成的。从这个角度,算法才是主驱动力,而数据结构是服务于算法的(固然你可能由于有了某个很好用的数据结构而设计了某个算法,但算法仍然是主角)。那算法又是什么?算法就是设计好的,达成某个事情的步骤。因此,从这个角度,程序只是某些步骤的表现,这些步骤也叫流程,而程序就是流程表现。python

我同意这个“古老”说法(或者是我对它的解读),程序只是封装流程的外壳,于是,程序跟算法是两码事,虽然它们是有关联的。程序只是算法的一种表现,但不是惟一的表现,算法还能够用笔写到纸上,还能够用算盘表现出来,还能够经过一些对答、比喻或类比表达出来,还能够经过实际操做表现出来。算法能够是通用的设计步骤,也能够是某个领域的特有的设计步骤。算法有专门的设计与分析,它并不须要程序来支撑。算法是魂,程序是壳,存在这些状况:“算法很强,但程序很烂”(壳写很差)、“程序很强,但算法很烂”(魂设计很差,但很会封装)。算法

若是程序只是一个壳,那是否是就不重要了呢?确定不是了,写壳,也是技术活,也要设计,也讲经验,也要学习。并且,程序能手是能够经过程序去设计算法的,好比他们能够熟悉地经过if/while这些结构去设计算法,固然,这不是必须的,也未必是好的设计算法的办法。特别是,对于程序开发,好比先后端、客户端等开发,你不熟悉掌握写程序(写壳)的技能与知识,你是站不住脚的,但未必要求你要有很强的算法设计能力。后端

好了,说了一堆废话。其实我是想说python的语言特性,掌握这些特性才能更快更好地把壳写好。跟练习打篮球同样,一开始先把分解动做作好,以后再连贯起来--那若是不练分解而直接连贯,行不行?也行,练分解不是必须的,特别是对工具的使用,边用边搜索也是个好办法,但本文的介绍,是从分解开始。数据结构

python的语言特性能够分:变量、数据类型(数据结构)、语句、代码组织等。dom

(1)变量

变量,就是值能够改变的量,因此变量是用来存放值的。在python中定义一个变量,就是把一个值给这个变量,因此你想忘记初始化都不行,你必定要把值给变量的,而在给值时,这个变量的类型就肯定下来了,是的,变量都有类型。python内置了很多好用的类型(也能够叫数据结构),这个后续再详细介绍。工具

须要什么变量?这个跟流程有关,好比,假设流程是把输入的两个数相加,那就能够考虑使用两个变量,用于保存输入的值,好比这样:
设计变量学习

最简单的想法,就是流程中须要保存(临时或长期保存)什么值,就设计什么变量。spa

(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。

相关文章
相关标签/搜索