几句话编程入门(已完结)

0048 日常琐事

电脑是很笨的,每一件事情我们都要非常细致的给它讲清楚所有的步骤,它才能够照本宣科的去完成。

这也没有什么问题,只不过是多一点耐心就可以了。但是如果一件事情需要重复做许多次,当然你会立刻想到循环。可是有时候情况会更加复杂,并不一定可以简单的用循环去描述。

比如我现在做木工活,其中有一个简单的操作就是拿钉子。但是拿钉子这件事情就很难用循环去描述,因为两次拿钉子之间,我要做什么事情以及做多少事情是不一定的。

如果每一次需要拿钉子,我们都认真的描述:

  • 首先打开工具箱
  • 找到放耗材的格子
  • 在里面找到需要类型的钉子
  • 数出我们需要的数量
  • 拿出钉子关好工具箱

一次两次可以接受,次数多了……你会认为我是在给这个教程凑字数。

怎么办呢?把上面这些操作打包成一个整体,然后起一个名字,就叫做拿钉子。那么在需要钉子的时候就执行拿钉子这个操作,也就是进行一遍上面的这些步骤。在工作的效果上没有区别,但描述起来就显得简洁了许多。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0049 什么是函数

我们前面讲过代码块或者说代码段的概念,就是把一些代码看作一个整体,可能会用大括号来包裹一下,说明这是一个整体。

后面在判断和循环中也有相应的应用,在这里面使用代码段,主要是为了避免层级上的混淆。比如当条件成立的时候,哪些代码是要被执行的;而如果条件不成立,哪些代码是忽略不被执行的。那么通过代码块的标记,我们就可以清晰的分辨出来。

在循环中,代码块作为一个整体被多次的使用。但是这只是在同一个位置去多次使用,如果我们想在其他的地方也执行相同的操作,当然你不会希望把这些内容再抄写一遍。如果你非说复制一遍也不算麻烦的话,那么如果有许多地方需要使用这样的操作呢?就算全都复制过去,万一需要对这些操作进行修改呢?这很快就会让人抓狂的。

所以如果我们可以给某一个代码块进行一下命名,然后在需要的地方通过这个命名去引用这部分代码,那么许多问题就都被解决了。这就是代码中函数的概念。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

46、47重复了哦

已知,不改(懒得改后续编号,就这样了。

2 个赞

0050 简单的举例

function 拿钉子(){
    首先打开工具箱
    找到放耗材的格子
    在里面找到需要类型的钉子
    数出我们需要的数量
    拿出钉子关好工具箱
}

首先里面的操作我们是熟悉的,那么我给给这一系列操作整体上取了一个名字,叫做“拿钉子”。这里的格式就看一个大概,因为在不同的语言下会有一些区别,我们更侧重对于道理上的讲解。

在其他地方如果需要使用就通过名字去调用这个函数:

这里我做一些木工的工作,做了什么就不详细讲了
拿钉子()
继续做木工的工作,比如把钉子敲进去
然后又发现钉子不够用了
拿钉子()

并不难理解,对不对?但你现在一定有一个疑问:无论是上面还是下面,小括号是用来做什么的?

我们下回分解。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

4 个赞

0051 关于参数

有一些操作我们是可以无脑进行重复的,但有一些操作看起来一致,而细节上是有一定变化的。

就比如拿钉子这个操作,如果我们只有一种类型的钉子,每一次只拿一个,那就是无脑重复的。但如果每次拿的类型可能不同,而数量也可能不同,那么我们在每次执行这个操作的时候,就需要对这两个数据进行说明。

但是当我们定义函数的时候,我们知道要用到类型和数量这两个数据,但是这两个数据的值是什么这是未知的。虽然未知,可是我们还是要描述这个事情,就只好先假设一下。对,就像设一个未知数。

function 拿钉子(type, count){
    首先打开工具箱
    找到放耗材的格子
    在里面找到 type 类型的钉子
    数出 count 个
    拿出钉子关好工具箱
}

那么小括号里的内容被称作为参数,这个函数有两个参数。参数嘛,就是参与这些事情的数据。但是这两个并不是真实的数据,只是为了能够便于我们描述而假设的数据。我们也可以说它们是形式上的参数,所以被称作为形参。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

3 个赞

0052 带参数的调用

拿钉子("自攻木螺丝", 12)

这里是对前面函数的调用,显然你一看就知道我要拿什么钉子,以及要拿多少。那么把这两个数据带入前面的函数就可以完成对应的操作。

这两个数据显然也是参数,这就不是假设的了,而是实际存在的。那么这样实际参与运算的参数被称作为实参。

形参和实参的区分是很重要的,但其实你只要能够理解前面所讲的道理,它也是很容易的。那么下面我们来实际举例应用一下。

就比如说做加法这个事情,当然这很简单,根本没有必要去定义一个函数。不过用这样简单的操作去举例,就更容易让你读明白。那么我们定义一个函数用来让两个数进行相加,显然这个函数需要两个参数,就是这两个数字,我们要告诉程序把谁和谁加到一起去:

function add(a, b){
    a+b
}

这样假设了两个参数,a 和 b,在函数里面我们把它们相加。

那在其他的地方,如果我需要进行加法这个操作就可以:

add(6, 2)

我传入了两个参数,6 和 2,就把它们加在一起。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

4 个赞

0053 返回值

考虑这样两件事情:

如果老师让你把这些作业搬到教室里,你完成这个指示工作就算完成了。

如果老师让你统计所有同学的兴趣爱好,你到班里完成了统计,这个事情就算完成了吗?显然还差一点儿,你要把统计的结果交给老师,这才算完成了这个任务。

第一件事情,完成相应的操作不需要进行反馈。

第二件事情,完成相应的操作之后,要把获得的结果反馈回来。

那么函数里面也有类似的细节。如果我交代你收拾一下工具,那么你把它们整理整齐就算完成了;但如果我叫你拿钉子,你不能只是把钉子拿在自己手里,你要把钉子递给我才算完成任务;如果我们让程序做一个加法,那显然我们是期待程序把计算之后的结果告诉我们,而不是相加之后它在那里发呆。

所以有一些函数在完成之后要有相应的反馈,这个反馈被称作为返回值。

下节课我们再进行实际的举例,你先记住两个要点:

  • 一个函数最多只能有一个返回值
  • 当函数返回结果时就标志这个函数执行完成了

无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0054 获得结果

function add(a, b){
    result = a+b
    return result
}

我们计算两个数相加,并把这个结果储存进一个变量,然后返回(return)这个变量,这样函数计算了两个数相加,并且把结果反馈了回来。

在使用的时候我们如何获得这个结果呢:

c = add(6, 2)

这个函数对相应参数的计算结果会储存进前面的变量 c。

最开始的一段代码也可以书写的简单一点,只的是为了让大家能够快速理解,所以用变量中转了一下。那我们把这个写的更加直接一些:

function add(a, b){
    return a+b
}

当到达 return 语句时函数会返回结果并停止运行。所以函数里面如果在 return 之后还有内容,并不会被执行。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0055 毫无结果

俗话说,“抬杠长能耐”,那么我们在这里杠一下,我的函数就是没有返回值,就没有 return 这句话,我就是统计完了数据不告诉你结果,咱就是玩儿。那像前面一样用一个变量去获取这个函数的计算结果,会获得什么?

当然什么也没有,但什么也没有是什么,零吗?不是,而是一个更加彻底的结果,没有被定义(或者是空)。

我们说这里有一个变量 a。好,变量有了,但是我没有给它任何的值,我也没有说明它的类型。你说它是什么,理所当然的,它还没有被定义。

这就是一个全新的数据,undefined,还没被定义。当然在某些语言里,这个结果也可能是 null(空)。或者在你的语言里,这两个数据都有。那么它们两个的区别并不是很大,具体的分析就要根据你所使用的语言去具体查阅了。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

上一篇 | 返回目录 | 下一篇

2 个赞

0056 一切皆对象

数组是特殊的对象,这个我们可以理解。

那么函数其实也是特殊的对象,这个不太好理解,不过如果你接触到一些复杂的操作会发现这也变得理所当然的。

数字、字符串……它们也可以算是一种对象,我们对这些数据的操作方法都是放在他们原型上的,听不太懂没有关系,因为你也确实没有接触到这一部分。

但到这里你忍不住会问,难道一切皆对象?是的,一切皆对象,所以才是面向对象编程。

这里我解释的非常不严谨,但是以目前我们所掌握的知识量,先这样讲,好歹算是能够具有一定的理解。

如果一切皆对象,也就是说所有的东西都是差不多的,或者说在某一个层面都具有相似性。于是也就意味着可以用一套通用的方法或者思维方式,去处理和理解它们。这样事情就变得更加统一了,而显然这也已经上升到我们认识一个事物的哲学层面了。

这里点到为止,初期也不建议大家深究,当你学习深入到一定程度,自然而然就会去理解这些。


无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。

就这样,就这么简单。

点击这里开启新的征程

2 个赞

讲的真好,浅显易懂,真的很厉害 ,谢谢 :grinning:

1 个赞

爱学习的孩子最可爱了

这段写的好。我用了Quicker自己去编辑动作,反复实验了好久才弄明白布尔到底表示的什么。。。。

我很喜欢你讲的这些东西,但是,到这里,我开始看不太懂了,看到这里,我还不知道你要讲的编程是什么语言,以前我喜欢过批处理,自己无意中得到的一份PDF文档,没有坚持学习下去,感觉自学太难了,看到你发贴的时间,不知道还会不会收到你的回复?

不仅会收到回复,还会及时回复你呢。甚至你的每一次点赞,我都认真的在看提醒。

看一看,到现在为止这样逐篇点赞下来的,你是第2个,很厉害呦!

这份入门我并没有讲特定的语言,而是讲了一下各种语言基本都会用到的基础。把这些全都看下来,我觉得似乎差不多都看懂了呢,但好像也并没有学会什么。如果现在去看其他编程入门教程,就会觉得以前看着看着就看不懂的教程似乎变得通顺了,这就是我这篇入门的作用。

然后编程语言并没有好坏之分,只有适不适合自己,适不适合当前要做的任务。反正多数时候大家都不会满足,只学会一种语言,不过学会第一种语言之后,后面的就都好些了。所以第一种语言学什么其实并没有那么重要,或者说无论学什么,只要先把它学会就很好!

一般我是会推荐学 js,因为我教这个,2333。优势是语法简单,重要的是不需要特殊的运行环境,打开浏览器就能用,这对新人来说真的特别友好。哪怕就学了一点儿在日常也可以方便的去应用。

如果想要深入学习,在我的观念中,最好是仔细的去学习一下类似 C 语言这种,语法和数据类型要求比较严格的语言,学到的基础知识和编程思想,在其他各种语言中都是很有用的。但是这个理由听起来很不错,而现实是直接给新手一个这么难的任务,基本上就直接劝退了。

所以只要感兴趣,学什么语言都好,学下去才是最重要的!

1 个赞

再补:
C类语言如果不遵从上述规定会变得极其难以阅读,如下面的程序:
(可参考IOCCC,应该是这样拼写的吧……)

int a = 1;int b = 2;
if (a == 1)
    if (b == 1)
        b = 2;
else
    b = 3;
    else
        b = 4;

逻辑极其混乱对吗?也看不明白对吧,所以不要这样写!
注,早期的部分编译器if不写括号也能运行,但这会使得你的程序更加混乱。

正确的缩进以及括号(){}的使用对你的程序有益无害!!!
千万不要因为编译器“能识别”而拒绝修改你的烂代码!!!

这是我们应当写的样子:

    int a = 1;
    int b = 2;
    if (a == 1){
        if (b == 1){
            b = 2;
        } else {
            b = 3;
        }
    }
    else{
        b = 4;
    }

注,python不存在此问题,python万岁(狗头)【但是编写的程序逻辑的混乱只能人为修正……】

再补:
以python为例,python专门提供了数学专用的相关库以进行高精度的运算,但实质上正如稻米鼠所说,是用性能换精度。

python的部分计算也只能说精确到小数点后XX位,以在你所要求的精度范围内进行相关计算。
如,你需要小数点后50位的精度,python会自动将你的运算进行极限逼近,直到你所要求的精度,但是小数点后51位时,可能就会出现上述的相关情况。

即,精度损失。

另:一个小彩蛋,windows10之前某个版本的计算器就有此问题,计算1+1,按等于后显示2,再减0.1,减1.9后会显示0.000000000001啥的,后来被推送的补丁修复。

缩进是坏文明,括号才是正义
你缩略了括号的例子不止能正常工作,而且也不是不能看懂,甚至不换行也没问题。更重要的是,编辑器可以一键格式化完成缩进
这在Python上恰恰就是灾难,空格错了可能就是完蛋

注,不同语言表示字符串的方法不同,学习需要注意区分,不要混淆。

如,python可以使用单引号‘’或者双引号“”,但是其中部分函数(如pandas模块中的某些奇葩)只允许其中一种符号表示字符串,用其他符号时提示错误…………

一些编程语言还允许使用"“” “”" 三引号(亦可以作为注释符号使用)进行表示,另一些奇怪语言如aardio等请自行探究