对比python学julia(第一章)--(第四节)冰雹猜想
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编程的基本元素。

注释
第2行是一个单行注释语句。单行注释以“#”号开头,后面可以是任何内容。注释是给人看的,程序在执行时会自动忽略掉注释。这和python是一样的。
变量、表达式和赋值操作
从第3行可以看出,julia是通过赋值来定义变量的,这点和python相同,与其他强类型语言比如java、c#不同。有意思的是第4行数组的赋值,在python中,数组是一个对象,apend方法作为对象的成员函数,通过对象后面的点号“.”来调用的。而julia,对象(类)是不能有成员函数的,所以apend作为独立函数使用。但是不用怀疑julia的面向对象特性,只不过它为了做了更为巧妙的设计,从而带来了性能上的提升。Julia是兼具面向对象和函数式的,这些我们后面再具体介绍。
流程控制
第5行是 while循环语句,当条件n!=1成立时,循环体(第6~11行)就会被反复执行。与python不同的是,while循环语句用end作为结尾。不同于python用缩进排版,julia里面,不强制要求缩进排版,函数、循环语句等程序块,基本都是以end结尾,学过Basic语言的同学应该感觉似曾相识。不过这样是不是有点累赘?在while循环体内,有一个条件判断语句if...else,也称选择结构。另外第7行的整除函数,请参考上一节的表格中的描述。
- 函数的定义和调用
第1行是函数定义,定义了一个名为bingbao的函数,参数是n。函数定义,python用def,julia用function,并且没有冒号(:),但是用end结尾。
上面的julia代码有19行,如果在REPL环境里面书写很不方便,这时候集成开发环境就派上用场了,具体使用方法,下一节介绍,敬请期待。
对比python学julia(第一章)--(第四节)冰雹猜想的更多相关文章
- tensorflow2.0学习笔记第一章第四节
1.4神经网络实现鸢尾花分类 import tensorflow as tf from sklearn import datasets import pandas as pd import numpy ...
- 实验楼学习linux第一章第四节linux目录结构及文件基本操作
linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...
- 大白第一章第四节dp例题
入口 UVALive - 3882 #include<cstdio> using namespace std; ; int n,m,k,f[N]; int main(){ //f[i]表示 ...
- NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML ...
- 【软件构造】第三章第四节 面向对象编程OOP
第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...
- 路飞学城-Python爬虫集训-第一章
自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...
- python全栈第一章
第一章 Python基础变量定义规则:1.变量名只能是字母数字或者下划线的任意组合2.变量名的第一个字符不能是数字3.关键字不能申明为变量名定义方式:1.驼峰体AgeOfSzp2.下划线隔开Age_o ...
- 《零压力学Python》 之 第一章知识点归纳
第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...
- 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识
下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前请把 ch3-4 分支中的 code/ 目录导入微信开发工具 这一 ...
- NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...
随机推荐
- pandas、spark计算相关性系数速度对比
pandas.spark计算相关性系数速度对比 相关性计算有三种算法:pearson.spearman,kenall. 在pandas库中,对一个Dataframe,可以直接计算这三个算法的相关系数c ...
- .net core .net5 asp.net core mvc 与quartz.net 3.3.3 新版本调用方式
参照了:https://www.cnblogs.com/LaoPaoEr/p/15129899.html 1.项目Nuget引用Quartz.AspNetCore和Quartz.Extensions. ...
- MySQL入门到实战详细教程
MySQL介绍 MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品,它广泛应用于各种Web应用程序和网站,MySQL使用结构化查 ...
- radis简单学习笔记
原来写接口只用了本机缓存cache 来学习一下radis,用法应该跟cache一样吧,为了配套负载均衡的多服务器是多个服务器都可以读取缓存 一.下载 找了好长时间 github有的时候能上有的时候就上 ...
- Nginx 静态站点配置不对导致301跳转的坑
背景 是这样的,我们前端服务器统一的入口是 kong网关 ,我们还有一个Nginx静态资源站点:static.mysite.com,根配置如下: location / { root /home/web ...
- 03-Python数据类型
None类型 Python3中没有NULL,取而代之的是空类型None.空列表.空字典等. None是一个特殊的Python对象,表示无. None的类型是NoneType. 如果只想声明变量,而不想 ...
- Java面试知识点(五)hashmap、hashtable和hashset
1. 关于 HashMap 的一些说法: a) HashMap 实际上是一个 "链表散列" 的数据结构,即数组和链表的结合体.HashMap 的底层结构是一个数组,数组中的每一项是 ...
- 在Linux驱动中使用timer定时器
在Linux驱动中使用timer定时器 原文(有删改): https://www.cnblogs.com/chen-farsight/p/6226562.html 介绍 内核定时器是内核用来控制在未来 ...
- Node.js中的模块
CommonJS模块 CommonJS是一种规范,它定义了JavaScript 在服务端运行所必备的基础能力,比如:模块化.IO.进程管理等.其中,模块化方案影响深远,其对模块的定义如下: 1,模块引 ...
- 浏览器中JS的执行
JS是在浏览器中运行的,浏览器为了运行JS, 必须要编译或解释JS,因为JS是高级语言,计算机不认识,必须把它编译或解释成机器语言,其次,在运行JS的过程,浏览器还要创建堆栈,因为程序是在栈中执行,执 ...