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. 继承,super,重写,多态,抽象,接口

    继承,super,重写,多态,抽象,接口 继承 extends 用于表示两个类之间的继承关系,继承是OOP的四大特性之一,他允许一个类(称之为子类或派送类) 继承另一个类(称之为父类或基类)的变量和方 ...

  2. jquery的树状菜单

    <body>     <ul>         <li>一级菜单                 <ol>                 <li ...

  3. golang sync.Once 保证某个动作仅执行一次的机制

    type Once struct { done atomic.Uint32 m Mutex } 这段代码是 Go 语言标准库中 sync 包的一部分,定义了一个 Once 类型.Once 类型用于确保 ...

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

  5. .net程序反编译教程(附反编译工具)

    一.以windows服务和winform项目为例,此处用的是winform,发布后的程序都会生成.exe文件,如果有其它关联的程序集,会打包成.dll的动态库文件,一般打包后exe和dll都会带.pd ...

  6. flutter 结合 springBoot 完成登录 注册 功能

    后端接口 前端调用接口代码 import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import '../page ...

  7. 燕千云ITAM:解锁数字化时代下企业竞争新优势

    数字化时代下,企业的IT资产管理(ITAM)尤为关键.企业通过在成长的每个阶段实施有效的IT资产管理策略,以确保资源的最优化利用和风险的有效控制,并在竞争激烈的市场环境中保持优势.然而实际实践中,企业 ...

  8. logback日志格式模板,基于TraceId搜索完整的请求链路日志

    logback日志格式模板,基于TraceId搜索完整的请求链路日志 日志打印格式:(可以基于TraceId:4d484c2a110eae9d来搜索完整的请求链路日志2023-08-28 15:06: ...

  9. window10 yapi安装 swagger配置 及 Error: getaddrinfo ENOTFOUND yapi.demo.qunar.com解决

    node下载https://nodejs.org/download/release/v12.18.3/mongodb下载https://www.mongodb.com/try/download/ent ...

  10. CountDownLatch demo演示裁判和选手赛跑

    # CountDownLatch demo演示裁判和选手赛跑 package com.example.core.mydemo; import java.util.concurrent.CountDow ...