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. 7.17考试总结(NOIP模拟18)[导弹袭击·炼金术士的疑惑·老司机的狂欢]

    问灵十三载,等一不归人. 前言 这回考试全靠 T2 了,别的基本上没分(菜) 总感觉最近进度有亿点快,每天都在补坑,每天都在留坑.... T1 导弹袭击 解题思路 因为这个题的两种长度是不一定的,因此 ...

  2. 一个或多个C文件编译KO

    参考文档:.c文件如何编译为ko的MAKEFILE文件编写 - young525 - 博客园 (cnblogs.com) 文档组织结构 header目录:存放头文件 source目录:存放源文件 单个 ...

  3. 在AngularJS中,控制器没有生命周期方法

    在AngularJS中,控制器没有生命周期方法,但是$scope对象有一些事件,可以模拟生命周期方法的行为.例如,$scope.$on('$destroy', function() {...})可以在 ...

  4. react 装饰器

    使用装饰器定义 装饰器是一种函数,写成 @函数名.它可以放在类和类方法的定义前面.react脚手架创建的项目默认是不支持装饰器,需要手动安装相关模块和添加配置文件. 安装相关模块 npm i -D c ...

  5. php基本语法与安装

            // 什么是PHP         //     PHP 是 后端语言的一种          //         主要作用就是实现数据交互          //          ...

  6. Linux Topicons Plus桌面工具安装

    Topicons Plus是Linux系统GNOME桌面环境的工具,方便于在工具栏显示应用小图标. 1.进入GNOME商店搜搜下载TopIcons Plus工具.下载路径:https://extens ...

  7. FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 自定义字段 FlashDuty 已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了 Lables 进行展示.尽管如此,我们 ...

  8. LangChain让LLM带上记忆

    最近两年,我们见识了"百模大战",领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆. 在对话中,无法记住上下文的 LLM 常常会让用户感到困扰.本文探讨如 ...

  9. OSI七层网络模型和TCP/IP四层模型

    OSI七层网络模型 OSI: 开放系统互连参考模型是ISO制定的一个用于计算机或通信系统间互联的标准体系 OSI七层模型功能: 物理层: 七层模型的最底层,主要是物理介质传输媒介(网线或者无线),在不 ...

  10. 新品再袭,比RK3568J降本40%+,瑞芯微最新性价比工业平台-RK3562J