如何教会老婆写Python?


良品铺子
良品铺子 2022-09-26 14:31:47 51105
分类专栏: 资讯

什么是code?

code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之,你给他钱,他就给你买回来让你吃到爽的西瓜。但是,你想让计算机买一个西瓜?你要告诉他:去门口的鲜丰水果店买,买沙瓤无子西瓜,若旁边的店打折,就去旁边的店买。总之,你不能让计算机做任何决定,你要清楚的告诉他所有情况下的所有的行为。而code,就是你和计算机交流的语言,或者说是对计算机的命令。

我们就把计算机理解为一个人,这个人很死板,只能按照你给他的详细命令进行工作。而这个人工作速度特别特别快,并且保证工作结果都是正确的。

编程语言其实不重要,重要的是要明白如何和计算机交流,明白了这个也就能看懂代码了。

编程=算法+数据结构

python就是一种和计算机交流的语言,这种语言单词(关键字)不多,规则也少。下面所有的内容都基于python。

1 判断

当你命令计算机做一件事情的时候,这件事情可能分一些情况进行处理。

判断通常涉及到的关键字有:if,else,elseif,and,or,<,>,=,<=,>=,==

比如,你让计算机买西瓜,希望买到打折的西瓜,不打折的话你就不吃了。

  1. if 水果店打折:
  2. 买西瓜
  3. else:
  4. 不买了

通过这个命令,计算机变得更智能了一些,他可以根据情况执行你的命令。

水果店不打折你就吃不到西瓜,你不开心。那么,我们让计算机更智能一些。假如西瓜打折,就买西瓜;不打折的话让计算机跟老板讲价,老板同意打折,就买西瓜;不同意,不吃了;

  1. if 水果店打折:
  2. 买西瓜
  3. else:
  4. 与老板讲价
  5. if 讲价成功:
  6. 买西瓜
  7. else:
  8. 不吃了。

虽然和老板讲价一般都能讲成功,但是有的老板给力给打五折,有的老板只给打九折。你就想了,若老板打五折,我就买两个,今天吃一个,明天吃一个。若老板不给力,打折不到五折,就买一个,今天先吃,明天再说。

  1. if 水果店打折:
  2. 买西瓜
  3. else:
  4. 与老板讲价
  5. if 打折成功 and 打折力度<=5
  6. 买两个西瓜
  7. elseif 打折成功 and 打折力度 > 5
  8. 买一个西瓜
  9. else:
  10. 不吃了。

此外,有没有发现,打着成功这段代码其实也可以写成:

  1. if 打折成功:
  2. if 打折力度<=5
  3. 买两个西瓜
  4. else:
  5. 买一个西瓜
  6. else:
  7. 不吃了。

由此可见,计算机也不是完全的一成不变,只要你给他的命令他能理解并且不会默认两可,他都可以完成工作。

and的意思代表且,or的意思代表或。and和or的顺序不同,结果也不同,可以通过括号来说明判断条件的优先级。

a==b是比较a和b是否相等的意思,而=代表赋值。赋值的含义,我在下面的变量章节介绍。

2 循环

python中涉及到循环的关键字包括:for…in…,while,break,continue

上面的例子我们已经让电脑成功的可以根据不同的情况去水果店买西瓜了,但是若老板不打折,你就吃不到西瓜了。这时,你就想了,咱们小区门口有三家水果店,分别是鲜丰水果、四季水果和路边摊,一家不打折不代表三家都不打折啊,所以你希望电脑可以去三家都去看看,挑一家打折的店买西瓜。

  1. for 水果店 in (鲜丰水果、四季水果和路边摊):
  2. if 水果店 打折:
  3. 买西瓜
  4. break(循环结束)
  5. else:
  6. 啥都不做
  7. 带西瓜回家

循环的意义在于,可以用电脑对不同的对象执行相同的命令。

介绍下break,break的意思就是结束循环。比如,这段代码中的break表示,我们一旦买了西瓜,那么就带西瓜回家。

3 变量

现在是时候介绍'变量'这个重要的东西了。

我们依然把电脑理解为帮我们工作的一个人,那么作为一个人,他需要有记忆力,而我们就可以通过变量去控制、利用计算机的记忆力。

变量可以理解为计算机的一个记忆单元,计算机拥有极好的记忆力,所以,可以随心所欲的使用,用完了就扔,需要了就要。(当然,说随心所欲是不严谨的,但是你可以理解为随心所欲)

那为什么叫变量呢,就是因为可以改变。为什么要改变呢?比如我们都有自己的年龄,我今年18,明年就19了。所以,'年龄'在我的记忆里是每年改变的。

变量对应的一个东西叫常量,在我的记忆力,我的老婆是江江同学。而这个'老婆'这个记忆单元在我的脑子里是不会变的,她永远都是江江同学。常量你现在可以不用理解,我写主要是为了秀恩爱。

现在,计算机又要去买西瓜了。不过这次,你希望计算机可以在三个水果店中,找到一个打折力度最大的水果店去买水果。

  1. 之前所有水果店的最大折扣 = None
  2. 之前给最大折扣的水果店 = None
  3. for 水果店 in (鲜丰水果、四季水果和路边摊):
  4. 当前水果店折扣 = 老板给的折扣
  5. if 当前水果店折扣 < 之前所有水果店的最大折扣:4折比5折力度大
  6. 之前所有水果店的最大折扣 = 当前水果店折扣
  7. 之前给最大折扣的水果店 = 水果店
  8. 去 之前给最大折扣的水果店 买一个西瓜

以上有以下几个记忆单元:

1、之前所有水果店的最大折扣

2、之前给最大折扣的水果店

3、当前水果店折扣

4、水果店注意,for a in b,a也是一个变量,他在每次执行的时候都是b中的当前执行的一个元素。

这里需要介绍一些概念:

1、None在python中表示空,表示这个记忆单元现在啥都没有。比如在我情窦初开时,脑海中就已经有了情人这个记忆单元,我一直在寻找,但遇到你之前一直没有找到,所以那段时间这个记忆单元里面一直是空。

2、赋值符号:=。注意,在计算机语言里面,一个'='号表示赋值,两个等号'=='表示比较前后元素。赋值的意思是,把后面的元素,放到前面的变量里面。

3.1变量的作用域

作用域这个东西非常重要,但是真心不想讲,因为没办法结合现实的例子,不过还是大体说明下。

还是刚才的例子,我加了行号,并且我使用-代表空格,表示代码的缩进。

  1. 1 之前所有水果店的最大折扣 = None
  2. 2 之前给最大折扣的水果店 = None
  3. 3 for 水果店 in (鲜丰水果、四季水果和路边摊):
  4. 4 ---当前水果店折扣 = 老板给的折扣
  5. 5 ---if 当前水果店折扣 < 之前所有水果店的最大折扣:4折比5折力度大
  6. 6 ------之前所有水果店的最大折扣 = 当前水果店折扣
  7. 7 ---之前给最大折扣的水果店 = 水果店
  8. 8 去 之前给最大折扣的水果店 买一个西瓜

你看这个例子可能纳闷,为什么要先给'之前所有水果店的最大折扣'、'之前给最大折扣的水果店'这两个变量赋值为None呢。就是因为作用域问题。

你看这个程序,每行代码的缩进都是不一样的。变量作用域可以理解为:一个变量,只有在其第一次出现的地方的缩进,以及缩进更多的代码里面,才有效。我们第1、2行的变量,就可以用于3-8行,因为这些代码的缩进都在1、2行的后面。而第四行的变量'当前水果店折扣',只在5、6、7行有效

  1. 1 A = None
  2. 2 ————B = None
  3. 3 ————..
  4. 4 ————————C = None
  5. 5 ————————..
  6. 6 ————D = None
  7. 7 ————..
  8. 8 ————————..
  9. 9 ————————..
  10. 10 ..
  11. 11 ..

再举个例子,ABCD是变量,..代表某些代码。A的作用域就是1-11行,即1-11行都可以使用A。B的作用域是2-9行,C的作用域只有4-5行,注意,8-9行就不能再使用C了,虽然他的缩进和4、5行一样,作用域遇到第一个不能用缩进行代码即结束。D的作用域就是6-9行。

4 函数

看懂以上几节,大概应该明白计算机如何执行代码的了。

而函数和模块,和之前的介绍不太一样。之前是介绍如何让计算机工作,是面向计算机的。而这一节,是面向人的,是如何让我们写给计算机的代码看起来更加简洁、明了。函数和模块都是对代码结构的优化,否则一个稍微大点的项目,一大坨代码,计算机看得懂人看不懂,不利于管理和交流。

首先说函数。函数是一系列代码的集合,用函数一般是有几个原因:

1、给一段代码起个名字。

2、这段代码和使用它的代码关系不大,所以可以抽出来,抽出来后代码更简洁。关系不大的意思就是:使用函数的代码通过传给函数几个参数,函数就可以执行。

3、代码集合起来就可以在代码的不同地方使用。

依然我们去买西瓜,不过我们希望电脑可以今天买完西瓜明天再买一个。按照之前的方式,这个逻辑应该写成这样:

  1. for 水果店 in (鲜丰水果、四季水果和路边摊):
  2. if 水果店打折:
  3. 买西瓜
  4. else:
  5. 与老板讲价
  6. if 打折成功 and 打折力度<=5
  7. 买两个西瓜
  8. elseif 打折成功 and 打折力度 > 5
  9. 买一个西瓜
  10. else:
  11. 不吃了。
  12. 休息一天。
  13. for 水果店 in (鲜丰水果、四季水果和路边摊):
  14. if 水果店打折:
  15. 买西瓜
  16. else:
  17. 与老板讲价
  18. if 打折成功 and 打折力度<=5
  19. 买两个西瓜
  20. elseif 打折成功 and 打折力度 > 5
  21. 买一个西瓜
  22. else:
  23. 不吃了。

上面的代码可以实现我们的要求,但是买西瓜的代码其实是重复的,对于重复代码,管理起来比较麻烦,比如你想改一点,那么就要去各个地方都改一次。

那么,我们把买西瓜的代码弄成一个函数,代码就可以整理为:

  1. def 买西瓜_函数():
  2. for 水果店 in (鲜丰水果、四季水果和路边摊):
  3. if 水果店打折:
  4. 买西瓜
  5. else:
  6. 与老板讲价
  7. if 打折成功 and 打折力度<=5
  8. 买两个西瓜
  9. elseif 打折成功 and 打折力度 > 5
  10. 买一个西瓜
  11. else:
  12. 不吃了。
  13. 买西瓜_函数()
  14. 休息一天。
  15. 买西瓜_函数()

这一次,代码整洁多了,而且,我们每次想修改买西瓜的代码,都只需要改这个函数一处代码都可以。

在python中,使用def function_name():定义函数,函数下面所有的缩进都属于这个函数,叫函数体。

使用function_name()调用函数。

4.1 函数参数

现在你又不满足与电脑只会买西瓜了,你又想吃柚子。怎么办呢,那么是不是我们又要写一个买柚子的函数呢。当然可以再写一个买柚子函数,但是买柚子函数的逻辑和买西瓜函数的逻辑都是一样的,命令也一样,唯一的区别就是之前是卖西瓜,现在是买柚子。如果再写一个类似的买柚子函数,那么又出现刚才说的问题,每次修改买水果的逻辑,都需要同时去修改买西瓜、买柚子函数,如果柚子吃腻了,又要买香蕉、苹果、梨,岂不是要写非常多的函数?

为了解决这个问题,其实有一个更好的方法,就是使用函数参数。

由于我们买水果(无论是西瓜、还是柚子)的功能都是一样的,所以我们可以写一个买水果函数,买水果函数定义了买一个水果的流程,当我们使用这个函数的时候,我们只要告诉这个函数我们要买什么水果,函数就可以根据你告诉他的水果名,去买对应的水果。

买水果函数的代码如下:

  1. def 买水果函数(水果名):
  2. for 水果店 in (鲜丰水果、四季水果和路边摊):
  3. if 水果店打折:
  4. 买[水果名]
  5. else:
  6. 与老板讲价
  7. if 打折成功 and 打折力度<=5
  8. 买两个[水果名]
  9. elseif 打折成功 and 打折力度 > 5
  10. 买一个[水果名]
  11. else:
  12. 不吃了。
  13. 买水果函数(西瓜)让电脑去买西瓜
  14. 买水果函数(柚子)让电脑去买柚子

这三个func调用的结果都是一样的。

5 模块

刚才我们已经讲了函数,函数就是把代码整合起来。而模块,就是把更多代码整合起来。

模块和函数的引入是为了解决类似的问题:管理代码段,并且给他们起一个名字。

一般来说,一把模块就是一个py文件,里面可能包括很多函数,也可以包括一些类的定义(这个我们后面讲哦)。

模块的引入就是为了将代码更好地管理。

我们把代码放在一个py文件中,这个py文件就是一个模块,在其他py文件里面,我们就可以使用import关键字,将模块引入。

比如,我们现在有一个a.py文件,里面有一些函数,比如buyxigua,buyyouzi等,若我们想在b文件中使用这些函数,那么我们必须在使用前,导入a模块。

导入一个模块并使用模块里面的函数有很多方法,我把常见的方法列在下面.

方法一:

  1. import a
  2. a.buy_xigua()
  3. a.buy_youzi()

这种方法导入模块a,然后通过模块.函数调用函数。

方法二:

  1. from a import *
  2. buy_xigua()
  3. buy_youzi()

这个方式导入模块a中的所有内容,可以直接使用。

方法三:

  1. from a import buy_xigua,buy_youzi
  2. buy_xigua()
  3. buy_youzi()

这个方式导入模块a中的指定内容,可以直接使用,一般这种方法在软件开发过程中使用的比较多,原因是我们只把需要的内容导入使用,不需要的不导入。(按需使用别浪费,在哪里都是个好习惯,深层原因超出教程范围)

6 类和对象

类和对象的概念,对于没有接触过编程的同学来说,可能稍微有些不好理解。我记得当年第一次接触这个概念,也迷糊了段时间。

之前,我们介绍过'变量'。变量的引入,是为了描述程序内的记忆单元。一个变量可以是一个数字,也可以是一个字符串(比如设置一个变量 名字='水风')。

但是,有些东西需要使用很多变量共同描述才可以。比如,一个买西瓜的人。买西瓜的人有很多特征,比如:名字、存款,持有西瓜数量。此外,买西瓜的人也有一些行为,比如 买西瓜 这个行为。为了实现 买西瓜的人 这个功能,我们引入类和对象的概念。注意,类/对象引入想解决的问题和函数、模块所解决的问题不一样。函数和模块的引入更多的是为了管理代码,而类/对象的引入是为了把状态和行为封装在一起。

那么,类和对象分别是什么意思呢。类是我们定义的一种东西有哪些状态和行为,比如 买西瓜的人 有状态和行为,我们提前定义好他们,类的概念是一种虚拟的。而对象就是代码在执行的过程中,去动态创建、生成的一个实体。

比如 买西瓜的人

我们之前写了买西瓜的流程,现在我们想创建两个买西瓜的人,每人负责一天,这样买西瓜的人也可以休息了。

转载自:https://mp.weixin.qq.com/s?__biz=MjM5ODUzMDYzMg==&mid=2654744589&idx=1&sn=4967b45a47108d6f9e6f53559917963a&chksm=bd01cb2a8a76423c4a8b7e65e77791d146f4791fb6d8d3a4f7a522e44af08b9e2899ef57207d&mpshare=1&scene=23&srcid=rd

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10429
赞同 0
评论 0 条
良品铺子L0
粉丝 0 发表 6 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2956
【软件正版化】软件正版化工作要点  2875
统信UOS试玩黑神话:悟空  2839
信刻光盘安全隔离与信息交换系统  2733
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1267
grub引导程序无法找到指定设备和分区  1231
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!