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. JS中BOM事件,JS样式特效,表格对象和表单操作

    DOM事件 1.DOM中的事件可以分为两类 1.浏览器行为 如:文档加载完成,图片加载完成 2.用户行为 如:输入框输入数据,点击按钮 (2).常见的DOM事件 onload 浏览器已完成页面的加载 ...

  2. NOIP模拟55

    T1 Skip 解题思路 正解给的是线段树维护单调栈,但是我不会.. CDQ 维护斜率可做!!! 先得出一个朴素的 DP 方程:设 \(f_i\) 表示最后一场是 i 的最优解. 转移方程就是 \(f ...

  3. MySQL学习笔记-数据控制语言

    SQL-数据控制语言(DCL) DCL语句用于管理数据库用户,控制数据库的访问权限 一. 管理用户 1. 查询用户 # 访问mysql数据库 use mysql; #查询user表 select * ...

  4. kvm链接克隆虚拟机迁移到openstack机器的实验

    总结 如果是完整克隆的那种虚拟机,是可以直接在openstack使用的,如果镜像格式没问题的话. 因为kvm虚拟机大部分都是链接克隆出来的镜像,不可用直接复制使用,所以需要创建新的镜像文件 创建空盘: ...

  5. work02

    第一题: 看程序说答案 int a = 10; int b = 3; int c = a + b;//13 int d = a - b;//7 int e = a * b; //30 int f = ...

  6. Spring扩展———自定义bean组件注解

    引言 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制. Java 语言中的类.方法.变量.参数和包等都可以被标注.和 Javadoc 不同,Java ...

  7. Libgdx游戏开发(5)——碰撞反弹的简单实践

    原文: Libgdx游戏开发(5)--碰撞反弹的简单实践-Stars-One的杂货小窝 本篇简单以一个小球运动,一步步实现碰撞反弹的效果 本文代码示例以kotlin为主,且需要有一定的Libgdx入门 ...

  8. tempCode

    package com.cmbchina.monitor.service.imp; import com.alibaba.fastjson.JSON; import com.cmbchina.moni ...

  9. Operational Property Graphs到底是个啥?

    Operational Property Graphs,中文通常译为"操作属性图". 作为23ai中被官方highlight出的新特性之一,我们先看下官方的原文描述: Operat ...

  10. readhat8搭建SFTP双机高可用并配置Rsync数据实时同步

    环境准备: 主机 host-61-118 : 192.168.61.118 host-61-119:192.168.61.119 vip:192.168.61.220 检测openssh版本,版本必须 ...