前言

之前写过一篇用python 仿写 js 算法,当时以为大部分语法都已经能很好的在python找到对应的语法结构,直到前几天我用 python 仿写了 慕课网解析视频加密的算法,我发现很多之前没遇到过的问题

for循环问题

js中的for循环

for (var i = 0; i < 10; i++) {
i = i+1
console.log(i)
}

其中的 i变量每一次循环都自增 1,然后在循环内部有增加 1
输出结果:

1
3
5
7
9
11

这种 for循环在 python中是不能用for循环写的,因为循环内部进行了 i 变量的更改,所以在python中这种for循环只能仿写成while循环,像这样:

i = 0
while i < 10:
i = i + 1
i = i + 1
print(i)

在循环中 第一个 i=i+1 相当于 js的循环内部中的 i=i+1
第二个 i=i+1 相当于 js for循环中的 i++,换句话说也就是python 在循环体结尾加了一句 i=i+1 相当于 for循环中的 i++

而在循环体 内部没有改变 i变量的值的语句可以用python中的for循环来仿写

总结:
1.用python 仿写js算法时,对于没有更改 判断循环是否结束时的变量(例子中的i) 可以用 python的 for循环来仿写
2. 对于更改了判断循环是否结束时的变量(例子中的i),可以用 python中的 while 来仿写

与或语法

在仿写过程中我遇到了这种神奇的语法

0 != (i = n[r] % 3) && r + i < n.length && o = n[r + 1]

简单解释一下这种语法的执行顺序
首先执行 i = n[r] % 3)
然后 进行判断 0 != i
如果为假,执行结束
如果为真,继续执行
(这段就是用到了 && 只要找到一个为假的就执行结束,否则继续判断)

在继续执行的时候 判断 r + i < n.length 如果为真继续执行,如果为假结束执行
注:这里的 i已经等于 n[r] % 3)

如果继续执行,做一步赋值操作 o = n[r + 1]

所以这段用 Python 可以这样来仿写

i = n[r] % 3
if 0 != i:
if r + i < len(n):
o = n[r + 1]

循环体结束问题

仿写的时候,遇到很多for循环或者if 后面不加大括号,导致我刚开始逻辑写错很多
正常规范 js

for (var i = 0; i <= 10; i++)
{
i = i+1;
console.log(i);
}

我遇到的js代码:

for (var i = 0; i <= 10; i++)
i = i+1,
console.log(i);

这两行代码是相同的效果,这里解释一下:
1.首先换行相当于加 ;
2. for循环后面下一句就是循环体
3. ",“隔开内容,相当于一句代码不表示代码结束,只有换行和”;"才表示一段代码结束
所以这里的循环体相当于 i = i+1, console.log(i);

真是各种恶心不规范的语法,加一个大括号什么都解决了,真不知道 慕课网的js是谁写的

python仿写js算法二的更多相关文章

  1. 程序代写, CS代写, 代码代写, CS编程代写, java代写, python代写, c++/c代写, R代写, 算法代写, web代写

    互联网一线工程师程序代写 微信联系 当天完成 查看大牛简介特色: 学霸代写,按时交付,保证原创,7*24在线服务,可加急.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor ...

  2. js算法集合(二) javascript实现斐波那契数列 (兔子数列)

    js算法集合(二)  斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解.     Javascript实 ...

  3. 机器学习:Python实现聚类算法(二)之AP算法

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  4. TensorFlow 入门之手写识别(MNIST) softmax算法 二

    TensorFlow 入门之手写识别(MNIST) softmax算法 二 MNIST Fly softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...

  5. 利用神经网络算法的C#手写数字识别(二)

    利用神经网络算法的C#手写数字识别(二)   本篇主要内容: 让项目编译通过,并能打开图片进行识别.   1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...

  6. FLASH CC 2015 CANVAS (二)html中写JS调用flash中的元件、函数、变量

    注意 此贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新 当你导出第一个canvas后,你会在保存fla的文件夹里 (每个项目默认位置)看到 如下文件,(请先 ...

  7. 优雅的python 写排序算法

    arr=[] while True: #输入数据 当输入q结束 a=raw_input() if a=="q": break arr.append(int(a)) s=len(ar ...

  8. JS算法练习二

    JS算法练习 1.生成4位的随机验证码,可取大小写字母和数字 ? var validateCode = "", /*--存放生成好的验证码字符串--*/ count = 0; /* ...

  9. DWZ主从表界面唯一性验证(自写js)(二)

    上篇介绍了自写js判断的前三项,本篇博客介绍第四步,关于触发课程代码文本框的离开事件后,判断一整列的课程代码之间是否有重复的值. 此问题可以提取为判断一个数组里是否有重复值,重复值是什么. 第四步→判 ...

  10. js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

随机推荐

  1. 1000粉!使用Three.js实现一个创意纪念页面 🏆

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 不知不觉,掘金关注者人数已经超过 1000 人,因此特地做了这个页面纪念一 ...

  2. 萌新码农的第一篇:MarkDown的使用方法

    MarkDown的使用方法 使用的编辑软件Typora 1.标题的使用方法 输入''#''然后空格,输入标题名字即可生成标题. 随着''#''的增多,标题的大小会依次减小,最多到六级标题 2.排字 字 ...

  3. 面试说:聊聊JavaScript中的数据类型

    前言 请讲下 JavaScript 中的数据类型? 前端面试中,估计大家都被这么问过. 答:Javascript 中的数据类型包括原始类型和引用类型.其中原始类型包括 null.undefined.b ...

  4. CentOS7.X yum安装MySQL8.0 数据表不区分大小写切换默认存储路径

    查看当前系统版本的详细信息 # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) yum源下载 地址:https://dev.m ...

  5. git commit 规范

  6. 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问

    前言:目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做.而且大多数处于局域网内,所以访问在线的api也显得比较尴尬.于是,就有了以下这篇文章,自己搭建一套简单的离线翻 ...

  7. C#-11 接口

    一 什么是接口 接口是指定一组函数成员而不实现它们的引用类型. class Program { static void FlyFunc(IFly obj) { obj.Fly(); } static ...

  8. C++面向对象编程之虚指针、虚表

    1.当编译器看到一个函数调用,有2个考量:静态绑定or动态绑定 静态绑定是"call xxx",xxx 是表示地址,call 是汇编语言的一个动作,它一定会调用到某个地址: 当符合 ...

  9. 记一个深层的bug

    1. 业务场景 产品需要每隔几天进行一次组件的更新,在自动化测试中,每隔30s检测一次更新源上的某个文件MD5值是否与本地一致,不一致代表有更新的版本,开始更新. 2. 问题出现 一个再平常不过的繁忙 ...

  10. .Net 文件导出下载

    //1.首先要有文件路径 2.要知道文件扩展名 3.根据扩展名在Provider Map对应的contentType 4.return FileSteam public IActionResult E ...