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代码该怎么写。

  1. 在上一节“冰雹猜想”中,我们已经知道,对应python的input函数的julia函数是readline,它接受控制台输入。然而要想实现input(>在上一节“冰雹猜想”中,我们已经知道,对应python的input函数的julia函数是readline,它接受控制台输入。然而要想实现input('请输入水路前进时速km/h:)这样的效果,julia需要两行代码:
    print(“请输入水路前进时速km/h”)
    water_speed=readline()
  2. 第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),注意括号里面的“;”,不是“,”。
  3. 第9行是计算结果的输出。注意其中str()函数将整数类型的变量days转换得到一个字符串,再用加号(十)把几个字符串拼接成为一个字符串,作为这个程序的处理结果。在 Julia 中,可以用string()函数,字符串拼接用的是操作符( * ),而不是( +)。之所以julia与大多数编程语言用(+)作为字符串连接符,是因为Julia 语言的缔造者们是站在抽象代数的角度来看待这一问题的。在抽象代数中, (+ )通常被用在那些满足交换律的运算中,而 (*) 常常被用在不满足交换律的运算中。对于字符串拼接来说, "A" 拼接 "B" 与 "B" 拼接 "A" 肯定不是一回事,一定会得到不同的结果。所以,操作符 (* )理应被用在这里。
  4. 在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(第一章)--(第五节)八十天环游地球的更多相关文章

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

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

  2. tensorflow2.0学习笔记第一章第五节

    1.5简单神经网络实现过程全览

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

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

  4. 【软件构造】第三章第五节 ADT和OOP中的等价性

    第三章第五节 ADT和OOP中的等价性 在很多场景下,需要判定两个对象是否 “相等”,例如:判断某个Collection 中是否包含特定元素. ==和equals()有和区别?如何为自定义 ADT正确 ...

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

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

  6. python全栈第一章

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

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

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

  8. 通过游戏学python 3.6 第一季 第五章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆 可复制直接使用 娱乐 可封装 函数

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--账号密码登陆 #!usr/bin/env python #-*-coding:utf-8-*- #QQ12411129 ...

  9. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  10. 《python可以这样学》第一章

    一.Python基础 查看Python版本 Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AM ...

随机推荐

  1. 规则引擎easyRules中组合规则的使用

    这两天想要做支付路由,要根据支付信息将支付请求转发到不同的支付渠道,可能要用到规则引擎,于是研究了一下开源的规则引擎产品.规则引擎核心知识与开源产品对比选型 ,这篇文章对规格引擎和开源产品有详细的介绍 ...

  2. rhce练习题容易错的地方

    rhce练习题里容易错的地方 使用导航器的时候,ssh连接 因为导航器是一个工具,生成一个容器,在容器里面运行playbook 安装软件包的时候,多个软件包使用循环loop loop的格式 - hos ...

  3. 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 ...

  4. kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围

    1.java代码里面有if else .switch-case等流程控制,kettle也有相应控件.下图便用到switch/case.过滤记录.数值范围控件. 2. switch/case步骤 1)步 ...

  5. journalctl 命令使用总结

    转载请注明出处: journalctl 命令是 Linux 系统中一个用于查询和管理系统日志的命令行工具,它基于 systemd 的日志守护进程 systemd-journald 的功能. 1. 介绍 ...

  6. log4net info 方法 根据不同业务创建不同的文件名

    log4net info 方法 根据不同业务创建不同的文件名 <configuration> <!-- ... 其他配置 ... --> <configSections& ...

  7. realtek高清晰音频管理器 WIN10

    在WIN10里已经改名了: Realtek Audio Console . 在安装realtek声卡驱动后,Realtek Audio Console 会自动安装.

  8. javascript class 方法的this指向问题

    踩坑记录 JavaScript 的 class 里面有两种定义方法的方式 普通函数(fun1) 箭头函数(fun2) class Obj { func1() { // write some code. ...

  9. Linux虚拟网卡TUN和TAP

    简介 在 Linux 网络管理中,虚拟网卡(Virtual Network Interface)是一个重要的概念,广泛应用于虚拟化.网络仿真和隧道技术中.本文将重点介绍 TUN(Network TUN ...

  10. Fastjson基础环境配置与Java基础概念

    Preface 此篇系列文章将会从 Java 的基础语法开始,以 Fastjson 的各个反序列化漏洞分析为结尾,详细记录如何从一个具有基础面向对象编程但毫无 Java 基础的小白成长为了解 Fast ...