首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

控制流

以前同学聚会,人多了往往都会玩 猜数字游戏,规则就不赘述了,今天的内容大多围绕这个方面,最终简单的通过 Python 实现。

控制流

程序语句除了顺序执行,还有条件执行,通过布尔值判断选择不同的语句执行。“控制流语句”可以决定在什么情况下执行哪些语句。

布尔值

True&False

这个时候往往都会和逻辑运算符(not, and, or) 结合起来,为啥我写的是 not, and, or 这个顺序呐,因为这里是按照优先级排列的。

not > and > or

以下通过反证法证明优先级顺序 not > and > or

代码示例:

假设 and 的优先级是大于not 的, 那么过程是这样的:

先执行 True and False 根据 真值表 知道这个返回的是 False

再执行 not False 这个返回的是 True

显然不成立,所以说 and 的优先级 是小于not 的。

此时,若证得 and 的优先级大于or,那么证明结束了。

代码示例:

同理,若 or 优先级大于and,那么执行过程如下:

先执行 Ture or True ,返回 True

再执行 False and True , 返回 False

显然不成立

所以 or 优先级小于and

优先级not > and > or证毕

控制流元素

一般来说就是条件+代码块

控制流语句

if - elif - else

平时总会说,如果怎样怎样怎样怎样

if 语句也是这样的,if 后面跟着条件,条件为真 (True),那么执行代码块…

if - elif - else 好比就是把条件 分分类。

这个时候我得舔下 Python,为啥呐,因为他没有 花括号 o.o

不经意间又输出了一个知识点,哈哈

Python 通过缩进符 来 代替 花括号{ }

这也间接表示 Python 很注重缩进,缩进不对的时候会报错,例:

哈哈,关于这个缩进,选择什么方式呢,让我不禁想起了偶然间看到的《硅谷》里的片段,Richard 和 他女友 之间的 缩进战争o.o

Richard 用制表键 进行缩进,她的女友 通过空格 进行缩进o.o

为此俩人不欢而散,说散就散

制表键 说, 这锅我不背

目前而言,我是比较喜欢用 制表键 的,简单方便快捷 o.o

咔 一下 就 四个空格,何乐而不为

收!

回到 if - elif - else !

假设 a, b 俩人 正在进行 羽毛球比赛,最终如果 a 的得分 高于 b 的得分,那么 a 就赢得了这场比赛,否则(else),a输掉了比赛。再假设最终结果 a 是 21 分,b 是 16 分

while

while 和 if 都是 如果条件测试结果为真(True),那么… 执行 while 子句种的代码

两者之间的差异在于,while 会不断的循环,直到 条件测试的结果为False的时候,进而不再执行 while 子句中的代码。

代码实例

while 中只要 a 小于 10,那么 while 子句就不断被执行

break,continue可以退出循环

break 退出整个循环

continue 退出此次循环

插播

此时,我想引出迭代

维基百科给出的定义是这样的:

Iteration is the act of repeating a process, to generate a (possibly unbounded) sequence of outcomes, with the aim of approaching a desired goal, target or result. Each repetition of the process is also called an “iteration”, and the results of one iteration are used as the starting point for the next iteration.

通俗的理解,强调过程的重复,目的是达到预设的目标或结果,一次迭代的终点是下一次迭代的起点。

然而,在计算机科学背景下,给出的定义是:

In the context of computer science, iteration is a standard building block of algorithms.

Iteration in computing is the technique marking out of a block of statements within a computer program for a defined number of repetitions. That block of statements is said to be iterated ; a computer scientist might also refer to that block of statements as an “iteration”.

好吧,其实关于这个定义 不多提了

[黑人脸]

至于此,简述两个和迭代相关的案例

Newton Raphson 算法&0,1 之间的整数转换为 二进制

Newton Raphson 算法

这里只提 利用 Newton Raphson 算法进行求平方根,具体的公式证明推导不赘述了,简单的来说就是下面这张图,o.o 还不知道公式的语法便手写代替了

我觉得基本思想还是强大的极限

存在一个 yi mu xu rong… 区间无限小时,曲线近似为切线。

通过不断做切线来找到那个 与 x 轴的交点,其实会遇到好多问题的,因为你不知道那个根在哪儿,找的第一个点可能会影响结果,就像聚类分析一样,会受到初值的影响。

比如说,你就是运气好,找到个驻点,然后做切线,咔,你发现与 x 轴没交点,你说尴尬不尴尬,后续迭代还怎么进行 o.o

好了 , 收 o!o

… lol …

简单代码示例:

这里也体现出 当两个浮点数需要进行相等判断的时候。

应该是当俩数之间的距离小于某个设定的值时,则相等

abs(a - b)

Newton-Raphson 算法在此告一段落吧 o.o

十进制 转 二进制

这里主要简述 0至1 数字的转换

其实这个转换过程中包含了 整数的转换

至于负数,只需要在一开始判断是否为负数,在转换过程中 先转换为正的,最后再把 负号 加上就好了。

关于 小数,分数之间这个关系就不谈了 …

主要思路是

找到 某个数,这个数 与 该小数相乘以后要能得到 一个整数

这个 某个数,不是别的,是 2的n 次幂

哈哈,存在 n 属于 N+,使得… 再写下去就丑死了

我觉得我这个 找到 一词用的还是比较可以的

因为我认为,上面的 Newton-Raphson 算法 是找到一个数的方法,找到那个数 是某个数的平方根。也就是说 算平方根 也是在 找数o.o

代码示例:

自己写的代码… 可读性有待改善 o.o

运行下 会发现:

若输入的是整数,则直接打印该整数的 二进制格式,

因为自身与1相乘也便是整数,找这个数的过程简单些。

好吧,我在编写的时候,发生的一件尴尬的事儿

1 % 2 不知道等于多少了

% 是取余 !!!1 = 0 *2 + 1

二进制转换也在此别过了。

那么,在 Python 中哪些是可迭代对象

可以通过 collections 模块 的Iterable类型判断

代码示例:

之前提到的 字符串、列表 都是可迭代对象

进而可以 通过 for 循环进行 遍历

for

for 可以和 range() 结合一起使用

range() 有三个参数

start 起始值

stop 这个叫什么值呐,哈哈,末尾值?

step 步长,e.g. 每隔一个数 步长为2

其实 和 列表 中切片那几个参数一样的

左闭右开的

for … in 作用于 可迭代对象

在要点击 ‘保存并群发’ 的那一瞬间 突然想到 未给 for 循环敬上例子

然而,转换为 Markdown 之后,又直接做了修改,便回不去了

为此,敬上的小例子,是图片格式

以下是问题:

简述:需要编写一段代码,将左边的样子变成右边的样子。

分析:

左边 grid 变量是列表形式,大列表里面套着9个小列表,小列表是由两种字符串 ('0' & '.') 组成,每个小列表有6个字符串;

再来看右边,从右边的格式上来看,这个应该是print函数作用的结果,形式上就是左边 掉 了 个 个,好吧 叫旋转 。

via 代码实现

我觉得这个例子便于理解这个for循环

for word in ‘来不及说再见

未来几个星期可能几个月?都比较忙

o!o

最后 让我们以猜数字游戏结束吧 :)

exit()

2018/04/13

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G1P4S600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券