王剑编程网

分享专业编程知识与实战技巧

白话编程-来自一老程序员的爱(一)

1.人类为什么要造编程语言

创造编程语言是为了解决人与机器的交流问题。我们知道计算机的核心CUP,它的本质是一个电路,它只能识别到高低电频,也就是说在它的世界里只认识0个1两种状态,也就是说计算机语言就是一大堆的0和1组成的。相对于机器语言,人类的语言显得过于复杂,计算机是无法直接识别的,那怎么办呢。那就想办法把人类的指令文字转换成0和1组成的字符串吧,这个翻译官叫做编译器或解释器,可是人类的语言,同一个意思有很多种表达方式,同一句话在不同语境下又有不同的含义,编译器要想翻译的准确是件不可能完成的事,所以人类必须做出让步,把指令代码按照一定的规则来编写,这样编译器才能准确的知道人类的指令,这个规则就是编程语言。

2.编程语言简介

编程语言就是为了方便编译器翻译而定的规则。目前人类共发明了3000多种编程语言,为什么会有这么多语言呢?编程语言像兵器一样,使用场景不同就会发明不同的兵器,近距离作战适合用短刀匕首,远距离作战适合用长矛弓箭等等,随着技术的进步又发明了火枪和大炮,所以人类的武器越来越多。编程语言也一样,有的擅长和硬件打交道,比如汇编语言、C语言;有的适合做复杂的后台业务的,如C++、java;有的适合做前端的页面效果的,如JavaScript等;有的适合做人工智能的,如python等等。每种语言都有自己的特色,我们根据工作场景或者自身喜好取选择一门常见热门的编程语言即可。编程语言的语法规则都是相通的,只是表达方式不同而已,学好一种再学其它编程语言将会非常容易。

3.搞懂编程先要搞懂数据

编程最终目的就是处理数据。数据到底是什么,人类眼睛看到风景,耳朵听到的音乐,大脑想到的人和事,都是数据,但是计算机无法理解。比如用人类的语言来介绍一个人:他叫小明,今年3岁了。要想让计算机明白需要转换一下,save({name:"小明",age:"3"}),假设save是某编程语言的保存方法,大括号表示一条数据,数据里面有两个子数据姓名和年龄,编译器把这句话转换成0和1给计算机去执行,这条数据就会保存到计算机里。可能有点跳跃,没关系先理思路,先知道给大概,后面会展开说。

4.数据的最小单位——变量。(变量类型、关键字)

在弄懂计算机世界里的数据之前,我们先看看人类的数据都长什么样子吧?有这样的【12,8848,0.5...】,有这样的【你好,我是张三...】,看出区别了吗?有数字,有汉字,不同类型给他们起个名字吧,数字类型叫Number,字符串类型名叫String吧,当然不同的编程语言类型名称可能不一样,不过没关系我们只要知道他代表什么就行。

像Number、String这种文字叫做关键字,关键字是方便给编辑器识别的,有特殊作用的字符,我们给变量或者方法起名时候要避开关键字。再给某个变

量起个名字吧,这种自定义的名字叫变量名。我们先看一个例子:let s1:String="你好",let和String是关键字,有特殊含义,let代表声明一个变量,String代码变量的类型是字符串,是s1是变量名由字母数字和下划线组成,注意不能用关键字,"你好"是数据内容。 声明一个名为v值为数字1的变量,不同编程语言书写方式不同:

python:v=1
c++:int v=1
js:var v=1
仓颉:var v: Int8 = 1

5.数据的处理。(内置库api)

如何处理数据,看似复杂,熟悉了其实很简单。数值类型的数据主要用于计算,加减乘除、比较大小等等。对于字符类型主要用于读取、截取、替换等操作。以python为例,

常见的数值数据处理:

v=1
v=v+2,相当于1+2再把值赋给v
也可以简写成v+=2。
v++ v-- 意思是自增自减,相当于v+1和v-1。

常见的字符数据处理:

str="hello"
str=str+" hefei"意思是将hello与hefei两个字符串连接在一起
str[0]//取出字符串第一个字符也就是h
str[1:4]//取出第二个字符开始到第五给字符结束的一段字符,ello

还有一些复杂操作比如对PI=3.1415926...四舍五入保留两位有效数字,将字符"hello"里所有字母转换成大写。看似不好处理,不用担心,每种编程语言都会自带一些常用的方法可直接使用,不用自己去写算法和逻辑了。这种自带的方法集合一般叫做内置库。以python为例:round(PI, 2)就可以将圆周率保留两位数字了,str.capitalize()就可以将str字符串转换成大写。每个编程语言都会提供自带库接口的使用说明书,也就是我们常说的api文档,我们遇到问题善于使用相关接口会大大减少开发成本。

6.把数据组合在一起

上期说到了两种常见基本数据类型,开发者常常面对的数据是大量的有关联的, 为了便于管理和计算,一个个数据往往组合在一起,这种数据组合也有很多种类,比如数组、元组、字典等。 以python为例: 数组类型 list = [ 'runoob', 786 , 2.23, 'john', 70.2 ] 元组类型 组不允许更新 tuple = ('runoob', 786 , 2.23, 'john', 70.2 ) 字典类型 tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'} 不同编程语言的命名和声明方式有所不同,我们来了解一下。 python 简单自由 list = [1, 2, 3, 4, 5 ] cj 比较严谨 var list: Array<Int64> =[1, 2, 3, 4, 5 ] 不用担心,对于复杂数据处理每个编程语言都提供了强大实用的库和内置方法,具体开发过程对应查阅相应api(接口)即可。

7.给数据加上灵魂-逻辑

上期说到了很多种数据类型,我们对数据可以进行数值运算,增删改查等操作。思考一个问题,我们什么时候添加删除数据,又是在什么情况下修改数据呢?这就需要对数据进行逻辑处理了。我来介绍两种常用的if语句和for语句,if和for是关键字。 if是用于逻辑判断,像这样写:(意思是如果分数大于60就输出及格,否则就输出不及格)

if(sorce>60)
    print(sorce+":及格") 
else 
    print(sorce+":不及格") 

for语句叫循环语句,用于遍历,像这样写:(遍历可以理解成军训报数)

for(i=0;i<list1.length;i++)
    print(list1[i])

我们稍微实战一下,比如我们有班级所用同学的分数数据,长这样list1=[98,79,56,88,100,45,77,60],我们想把数据改成是否及格,变成生成list2=["及格","及格","不及格"...]的形式,如何实现呢 我们就可以用以上面学到的方法来实现了

for(i=0;i<list1.length;i++)
    if(sorce>=60)
        list1[i]="及格"
    else 
        list1[i]="不及格"
print(list1[i])

7.让数据抽枝发芽

上期说到了数组类型,它长这样list1=[98,79,56,88,100,45,77,60],有没有发现什么问题?就是这一串数字代表什么含义?是分数?如果是分数是哪一科的分数?又哪位同学的分数?信息量太少了,为了解决这个问题,于是又一个常用的数据类型,字典类型(有的语言叫Object类型,是一种JSON格式的数据)产生了,将数字98扩展一下内容,长这样{"name":"小明",score:"98",subject:"数学"},哦,这样一下就明白数字98是什么意思了,下一个数字79再改成这样{"name":"小红",score:"79",subject:"数学"}以此类推,再组成一个新数组就成了这样list1=[{"name":"小明",score:"98",subject:"数学"},{"name":"小红",score:"79",subject:"数学"},...]。

我们发现这些都是数学科目的成绩,那就不用每条数据都写数学了,优化一下改成这样:{subject:"数学",scoreList:[{"name":"小明",score:"98"},{"name":"小红",score:"79"},...]}。经过我们的一番操作,数据就变的丰富多彩啦,想怎么扩展就怎么扩展,人能看懂,机器也明白!

8.逻辑复用-方法

上上一期我们说到一个例子,将同学的分数改成是否及格

list1=[98,79,56,88,100,45,77,60]
for(i=0;i<list1.length;i++)
    if(sorce>=60)
        list1[i]="及格"
    else 
        list1[i]="不及格"

现在又有一个类似的需求: list2=[99,78,45,77,60,88,100,43] 将这一串成绩数据也要改成是否合格,我们会怎么做?把上面的代码直接复制过来,发现不能直接用,因为上面变量是list1,于是我们把list1改成list2,又发现新问题,这门考试总分是150,90分以上才及格,这也不难把代码里的60改成90。发现复制代码问题很多,容易出错,也不灵活。我们怎么能做到完美的复用呢?我们叫做封装,封装成一个方法,也叫函数。像这样:以python为例

def estimate(s,ar) :
    list=ar.copy()
    for item in ar:
        if(item.score<s)
            item.result="不及格"
        else
            item.result="及格"
    return list

把函数理解成工厂,输入材料经过加工就生产出商品。 我们这样调用:

ar1=estimate(60,list1)
ar2=estimate(90,list2)
print(ar1)
print(ar2)

这样就实现了一个简单的逻辑封装。

(未完,请看下期)

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言