4.1 依葫芦画瓢

冰雹猜想是一种非常有趣的数字黑洞,曾让无数的数学爱好者为之痴迷。它有一个非常简单的变换规则,具体来说就是:任意取一个正整数n,如果n是偶数,就把n变成n/2;如果n是奇数,就把n变成3n+1。如此反复进行变换运算,最终一定会得到1,确切地说是落入4-2-1的循环之中。

例如,对于整数3,按照冰雹猜想的规则进行运算,它的变换过程为:10,5,16,8,4,2经过7次操作,就把整数3变换为1。

原书中是用自然语言描述验证冰雹猜想的算法步骤,不够直观,这里我们用流程图来描述,便于理解:

这个程序并不复杂,原书Python程序只有10几行。我把它翻成了julia程序,并且加上scratch(一种用于编程教育的可视化编程软件)程序一起进行对比,因为scratch能直观地看出算法逻辑。

4.2 刨析程序结构

我们再来仔细看看julia的冰雹猜想代码。麻雀虽小五脏俱全,虽然只有19行,但是包含了许多julia编程的基本元素。

    1. 注释

      第2行是一个单行注释语句。单行注释以“#”号开头,后面可以是任何内容。注释是给人看的,程序在执行时会自动忽略掉注释。这和python是一样的。

    2. 变量、表达式和赋值操作

      从第3行可以看出,julia是通过赋值来定义变量的,这点和python相同,与其他强类型语言比如java、c#不同。有意思的是第4行数组的赋值,在python中,数组是一个对象,apend方法作为对象的成员函数,通过对象后面的点号“.”来调用的。而julia,对象(类)是不能有成员函数的,所以apend作为独立函数使用。但是不用怀疑julia的面向对象特性,只不过它为了做了更为巧妙的设计,从而带来了性能上的提升。Julia是兼具面向对象和函数式的,这些我们后面再具体介绍。

    3. 流程控制

      第5行是 while循环语句,当条件n!=1成立时,循环体(第6~11行)就会被反复执行。与python不同的是,while循环语句用end作为结尾。不同于python用缩进排版,julia里面,不强制要求缩进排版,函数、循环语句等程序块,基本都是以end结尾,学过Basic语言的同学应该感觉似曾相识。不过这样是不是有点累赘?在while循环体内,有一个条件判断语句if...else,也称选择结构。另外第7行的整除函数,请参考上一节的表格中的描述。

    4. 函数的定义和调用

第1行是函数定义,定义了一个名为bingbao的函数,参数是n。函数定义,python用def,julia用function,并且没有冒号(:),但是用end结尾。

上面的julia代码有19行,如果在REPL环境里面书写很不方便,这时候集成开发环境就派上用场了,具体使用方法,下一节介绍,敬请期待。

对比python学julia(第一章)--(第四节)冰雹猜想的更多相关文章

  1. tensorflow2.0学习笔记第一章第四节

    1.4神经网络实现鸢尾花分类 import tensorflow as tf from sklearn import datasets import pandas as pd import numpy ...

  2. 实验楼学习linux第一章第四节linux目录结构及文件基本操作

    linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...

  3. 大白第一章第四节dp例题

    入口 UVALive - 3882 #include<cstdio> using namespace std; ; int n,m,k,f[N]; int main(){ //f[i]表示 ...

  4. NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译

    NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译   第一章第二节Mapping a class with XML ...

  5. 【软件构造】第三章第四节 面向对象编程OOP

    第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...

  6. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  7. python全栈第一章

    第一章 Python基础变量定义规则:1.变量名只能是字母数字或者下划线的任意组合2.变量名的第一个字符不能是数字3.关键字不能申明为变量名定义方式:1.驼峰体AgeOfSzp2.下划线隔开Age_o ...

  8. 《零压力学Python》 之 第一章知识点归纳

    第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...

  9. 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识

    下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前请把 ch3-4 分支中的 code/ 目录导入微信开发工具 这一 ...

  10. NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class

    Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...

随机推荐

  1. numpy基础--random模块:随机数生成

    以下代码的前提:import numpy as np numpy.random模块对python内置的random进行了补充,增加了一些高效生成多种概率分布的样本值的函数.例如可以用normal来得到 ...

  2. MFC 好像不太智能

    我的想法就是这个MFC可能十靠鼠标和点击啥的偏主力 自己配消息处理函数容易出错,一旦代码坏了,不可逆向寻找失去的代码 多以能用鼠标设计的尽量用用编译器提供的界面去设计 当然啊这个API还是要自己找 这 ...

  3. C#.NET Winform承载WCF RESTful API (App.config 方式)

    1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...

  4. # android studio启动虚拟机长时间无响应,无法启动

    问题 虚拟设备长时间不响应,无法启动设备 方案 根据 android studio启动虚拟器失败 尝试删除锁文件 失败,.android 目录下不存在锁文件 电脑内存或计算配置不足 查看了模拟器需要的 ...

  5. IDEA生成类和方法注释模板详细说明 绝对好用

    吐槽 今天心血来潮,将使用了很久的IDEA旗舰版卸载了,想换社区版用一段时间,毕竟社区版开源免费.精简不卡顿,如果够用的话以后就省去了破解的烦恼,而且可以紧跟官网使用最新版 旧的IDEA配置忘记保存了 ...

  6. Python遥感影像叠加分析:基于一景数据提取另一数据

      本文介绍基于Python中GDAL模块,实现基于一景栅格影像,对另一景栅格影像的像元数值加以叠加提取的方法.   本文期望实现的需求为:现有一景表示6种不同植被类型的.tif格式栅格数据,以及另一 ...

  7. 解决Mixed Content:the page at‘https://' was loaded over HTTPS,but requested an insecure resource 'http://'

    问题:在Vue项目中使用axios访问了一个http协议的接口,报错如下 查资料后发现原因是在https中请求http接口或引入http资源都会被直接blocked(阻止),浏览器默认此行为不安全,会 ...

  8. 嵌入式 Arduino 期末复习

    1 基础知识 1.1 概述 对嵌入式的定义 国内定义:以应用为中心,以计算机技术为基础,软件硬件可裁剪,且适应系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统. IEEE定义:用于控制,监 ...

  9. Numpy技巧: 由label获得相等矩阵

    Numpy技巧: 由label获得相等矩阵     假设Label为:  [ABAC] , 如何方便的得到一个矩阵, 其元素i,j表示第i位和第j位相等呢?   先把Label复制扩展成: m,m 的 ...

  10. python重拾第九天-进程、线程、协程

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...