对比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 ...
随机推荐
- Python 潮流周刊#53:我辈楷模,一个约见诺奖得主,一个成为核心开发者
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 解决java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone
错误描述: 使用JDBC连接数据库是产生错误 应该是数据库时区问题,在url配置时设置serverTimezone = GMT即可 url = "jdbc:mysql://localhost ...
- java springboot 指定运行端口
java springboot 指定运行端口 方法1: 修改源代码里的"\src\main\resources\application.properties" 文件,增加或修改 s ...
- 使用final shell 连接使用 ubuntu server linux
书接上回,VM 安装ubuntu server:https://www.cnblogs.com/runliuv/p/16880599.html 1.从 https://www.hostbuf.com/ ...
- C#.NET FRAMEWORK ASP.NET MVC 获取客户端IP
C#.NET FRAMEWORK ASP.NET MVC 获取客户端IP 工具类: using System; namespace CommonUtils { public static class ...
- .net程序反编译教程(附反编译工具)
一.以windows服务和winform项目为例,此处用的是winform,发布后的程序都会生成.exe文件,如果有其它关联的程序集,会打包成.dll的动态库文件,一般打包后exe和dll都会带.pd ...
- 雪花算法(SnowFlake)
引言 唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种: 依赖数据库,使用如MySQL自增列或Oracle序列等. UUID随机数 snowflake雪花 ...
- [TinyRenderer] Chapter1 p3 Line
(注:本小节不是对划线算法事无巨细的证明,如果你需要更加系统的学习,请跳转至文末的参考部分) 如果你是一名曾经学习过图形学基础的学生,那么你一定对画线算法稔熟于心,中点划线算法,Bresenham算法 ...
- python pika rabbitmq demo
import pika import json # https://www.cnblogs.com/zhaohuaxishi/p/12107392.html # https://www.cnblogs ...
- svn服务端安装和使用
首先去官网下载安装包 点我下载 下载完了以后选择安装路径然后一直next就可以了 安装完了以后在开始菜单里面找到svn 打开 如何使用? 这里是创建代码管理的存储库 点击 repositories ...