对比python学julia(第一章)--(第五节)八十天环游地球
5.1. 问题描述
《八十天环游地球》是法国作家儒勒·凡尔纳创作的一部长篇小说,讲述了这样一个神奇的故事。
在1872年的伦敦,英国绅士福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地球。在人们的质疑中,他带着新雇佣的仆人“万事通”从伦敦出发了。一路上,他们乘坐的是邮轮、蒸汽火车、马车、大象等交通工具,还经历了密探追捕、恶僧捣乱、印第安人劫车、海浪肆虐……眼看约定的时间就要到了,福格竟然奇迹般地回到了伦敦。
福格的环球路线:伦敦苏伊士→孟买→加尔各答→新加坡亠中国香港→横滨→旧金山→纽约→亠伦敦,总行程约40000km。其中,走水路穿越地中海、红海、印度洋、太平洋和大西洋,行程约32000km;走陆路穿越法国、意大利、印度次大陆、北美大陆,行程约8000km。
如果使用现在的交通工具重走一次福格环球路线,在理想情况下需要多少天?请编写一个程序,只要输入水路和陆路的前进速度,就能计算岀福格环球路线需要的时间。
5.2. 算法分析
虽然福格的环球路线曲折复杂,时而坐轮船横渡大洋,时而乘火车穿越大陆,但是归纳起来就是水路和陆路两种。已知福格环球路线的水路行程约32000km、陆路行程约8000km,只要分别计算水路和陆路需要的时间,再把两者相加即可,使用如下公式表:
环球时间=水路行程÷水路速度十陆路行程÷陆路速度
这个程序要求水路和陆路的速度由外部输入。一般来说,外部输入指的是使用键盘输入数据,这样程序就能根据输入的数据进行运算,变得很灵活。
5.3. 编程解题
编写程序通常可以分为3个步骤,即输入数据、处理数据和输出数据。下面将按这3个步骤进行编程,计算福格环球路线需要的时间。
首先来看python程序:
1 #输入数据
2 water_speed= input('请输入水路前进时速km/h:’)
3 land_speed= input('请输入陆路前进时速km/s:’)
4 #处理数据
5 water_speed =int(water_speed)
6 land _speed =int (land _speed)
7 hours=32000/water speed+ 8000/land speed
8 days=round (hours/24, 1)
9 #输出数据
10 print(‘按福格路线环游地球要'+str(days)+’天’)
再来看julia代码该怎么写。
- 在上一节“冰雹猜想”中,我们已经知道,对应python的input函数的julia函数是readline,它接受控制台输入。然而要想实现input(>在上一节“冰雹猜想”中,我们已经知道,对应python的input函数的julia函数是readline,它接受控制台输入。然而要想实现input('请输入水路前进时速km/h:)这样的效果,julia需要两行代码:
print(“请输入水路前进时速km/h”)
water_speed=readline() - 第5-8行计算水路和陆路需要的时间。我们可以看到water_speed>第5-8行计算水路和陆路需要的时间。我们可以看到water_speed=int(water_speed)时会发现,python的变量是无类型的,赋值给它的值是什么类型,它就是什么类型。事实上,python的变量相当于一个容器,里面放的是数据。相同的,julia也继承了这种特性,它的变量也是无类型的。其次int()是一个类型转换,将字符串转换位整数类型。julia必须用转换函数里实现:water_speed =parse(Int, water_speed),因为在julia中Int()函数是获取一个字符的Unicode code值,例如Int(‘3’)得到的是51,注意括号里面的单引号,不能用双引号,以及Int函数的首字母大写。。第8行在这行代码中,使用 round()函数对 hours/24的计算结果进行四舍五入,并保留1位小数。Julia中也是用round()函数,但是书写方式是这样的:days=round(hours/24;digits=1),注意括号里面的“;”,不是“,”。
- 第9行是计算结果的输出。注意其中str()函数将整数类型的变量days转换得到一个字符串,再用加号(十)把几个字符串拼接成为一个字符串,作为这个程序的处理结果。在 Julia 中,可以用string()函数,字符串拼接用的是操作符( * ),而不是( +)。之所以julia与大多数编程语言用(+)作为字符串连接符,是因为Julia 语言的缔造者们是站在抽象代数的角度来看待这一问题的。在抽象代数中, (+ )通常被用在那些满足交换律的运算中,而 (*) 常常被用在不满足交换律的运算中。对于字符串拼接来说, "A" 拼接 "B" 与 "B" 拼接 "A" 肯定不是一回事,一定会得到不同的结果。所以,操作符 (* )理应被用在这里。
- 在VSCODE中编写julia代码并运行:先在windows资源管理器中新建一个文件夹,例如:F:\work\me\julia,然后打开VSCODE,从“文件”菜单中或左侧的资源管理器中打开刚才建的文件夹,再新建一个文件hydq.jl,并在打开的编辑器中输入以下代码:
1 #输入数据
2 println("请输入水路前进时速km/h:")
3 water_speed= readline()
4 println("请输入陆路前进时速km/s:")
5 and_speed= readline()
6 #处理数据
7 water_speed =parse(Int,water_speed)
8 land_speed =parse(Int,land_speed)
9 hours=32000/water_speed+ 8000/land_speed
10 days=round(hours/24;digits=1)
11 #输出数据
12 println("按福格路线环游地球要"*string(days)*"天")
在VSCODE“运行”菜单下,选择“以非调试方式运行”,可以得到如下结果:
请输入水路前进时速km/h:
50
请输入陆路前进时速km/s:
200
按福格路线环游地球要28.3天
大家通过上面的代码,可能会觉得julia要用两行代码才能实现python的input()函数相同的功能。如果需要多次输入,显得比较繁琐。那我们是否可以自己实现这个函数,在用到的时候调用它呢?当然可以,看下面的代码:
function input(prompt::String="")::String
print(prompt)
return chomp(readline())
end
调用方式可以这样:
water_speed = parse(Int, input("请输入水路前进时速km/h:"))
这就是所谓的自定义函数,在后面的章节中我们会具体介绍。敬请期待!
对比python学julia(第一章)--(第五节)八十天环游地球的更多相关文章
- NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...
- tensorflow2.0学习笔记第一章第五节
1.5简单神经网络实现过程全览
- NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML ...
- 【软件构造】第三章第五节 ADT和OOP中的等价性
第三章第五节 ADT和OOP中的等价性 在很多场景下,需要判定两个对象是否 “相等”,例如:判断某个Collection 中是否包含特定元素. ==和equals()有和区别?如何为自定义 ADT正确 ...
- 路飞学城-Python爬虫集训-第一章
自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...
- python全栈第一章
第一章 Python基础变量定义规则:1.变量名只能是字母数字或者下划线的任意组合2.变量名的第一个字符不能是数字3.关键字不能申明为变量名定义方式:1.驼峰体AgeOfSzp2.下划线隔开Age_o ...
- 《零压力学Python》 之 第一章知识点归纳
第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...
- 通过游戏学python 3.6 第一季 第五章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆 可复制直接使用 娱乐 可封装 函数
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--账号密码登陆 #!usr/bin/env python #-*-coding:utf-8-*- #QQ12411129 ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- 《python可以这样学》第一章
一.Python基础 查看Python版本 Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AM ...
随机推荐
- 规则引擎easyRules中组合规则的使用
这两天想要做支付路由,要根据支付信息将支付请求转发到不同的支付渠道,可能要用到规则引擎,于是研究了一下开源的规则引擎产品.规则引擎核心知识与开源产品对比选型 ,这篇文章对规格引擎和开源产品有详细的介绍 ...
- rhce练习题容易错的地方
rhce练习题里容易错的地方 使用导航器的时候,ssh连接 因为导航器是一个工具,生成一个容器,在容器里面运行playbook 安装软件包的时候,多个软件包使用循环loop loop的格式 - hos ...
- LeetCode 451. Sort Characters By Frequency 根据字符出现频率排序 (C++/Java)
题目: Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Inp ...
- kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围
1.java代码里面有if else .switch-case等流程控制,kettle也有相应控件.下图便用到switch/case.过滤记录.数值范围控件. 2. switch/case步骤 1)步 ...
- journalctl 命令使用总结
转载请注明出处: journalctl 命令是 Linux 系统中一个用于查询和管理系统日志的命令行工具,它基于 systemd 的日志守护进程 systemd-journald 的功能. 1. 介绍 ...
- log4net info 方法 根据不同业务创建不同的文件名
log4net info 方法 根据不同业务创建不同的文件名 <configuration> <!-- ... 其他配置 ... --> <configSections& ...
- realtek高清晰音频管理器 WIN10
在WIN10里已经改名了: Realtek Audio Console . 在安装realtek声卡驱动后,Realtek Audio Console 会自动安装.
- javascript class 方法的this指向问题
踩坑记录 JavaScript 的 class 里面有两种定义方法的方式 普通函数(fun1) 箭头函数(fun2) class Obj { func1() { // write some code. ...
- Linux虚拟网卡TUN和TAP
简介 在 Linux 网络管理中,虚拟网卡(Virtual Network Interface)是一个重要的概念,广泛应用于虚拟化.网络仿真和隧道技术中.本文将重点介绍 TUN(Network TUN ...
- Fastjson基础环境配置与Java基础概念
Preface 此篇系列文章将会从 Java 的基础语法开始,以 Fastjson 的各个反序列化漏洞分析为结尾,详细记录如何从一个具有基础面向对象编程但毫无 Java 基础的小白成长为了解 Fast ...