对⽐python学julia(第⼀章)--(第五节)⼋⼗天环游地球5.1. 问题描述
《⼋⼗天环游地球》是法国作家儒勒·凡尔纳创作的⼀部长篇⼩说,讲述了这样⼀个神奇的故事。
在1872年的伦敦,英国绅⼠福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地球。在⼈们的质疑中,他带着新雇佣的仆⼈“万事通”从伦敦出发了。⼀路上,他们乘坐的是邮轮、蒸汽⽕车、马车、⼤象等交通⼯具,还经历了密探追捕、恶僧捣乱、印第安⼈劫车、海浪肆虐……眼看约定的时间就要到了,福格竟然奇迹般地回到了伦敦。
福格的环球路线:伦敦苏伊⼠→孟买→加尔各答→新加坡⼇中国⾹港→横滨→旧⾦⼭→纽约→⼇伦敦,总⾏程约40000km。其中,⾛⽔路穿越地中海、红海、印度洋、太平洋和⼤西洋,⾏程约32000km;⾛陆路穿越法国、意⼤利、印度次⼤陆、北美⼤陆,⾏程约8000km。
如果使⽤现在的交通⼯具重⾛⼀次福格环球路线,在理想情况下需要多少天?请编写⼀个程序,只要输⼊⽔路和陆路的前进速度,就能计算岀福格环球路线需要的时间。
5.2. 算法分析
虽然福格的环球路线曲折复杂,时⽽坐轮船横渡⼤洋,时⽽乘⽕车穿越⼤陆,但是归纳起来就是⽔路和陆路两种。已知福格环球路线的⽔路⾏程约32000km、陆路⾏程约8000km,只要分别计算⽔路和陆路需
要的时间,再把两者相加即可,使⽤如下公式表:
环球时间=⽔路⾏程÷⽔路速度⼗陆路⾏程÷陆路速度
这个程序要求⽔路和陆路的速度由外部输⼊。⼀般来说,外部输⼊指的是使⽤键盘输⼊数据,这样程序就能根据输⼊的数据进⾏运算,变得很灵活。
5.3. 编程解题
编写程序通常可以分为3个步骤,即输⼊数据、处理数据和输出数据。下⾯将按这3个步骤进⾏编程,计算福格环球路线需要的时间。
⾸先来看python程序:
1 #输⼊数据
python round函数怎么使用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 #输出数据
10print(‘按福格路线环游地球要'+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:"))
这就是所谓的⾃定义函数,在后⾯的章节中我们会具体介绍。敬请期待!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论