习题 30: Else 和 If
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
前一习题中你写了一些「if 语句 (if-statements)」,并且试图猜出它们是什麽,以及实现的是什麽功能。在你继续学习之前,我给你解释一下上一节的加分习题的答案。上一节的加分习题你做过了吧,有没有?
- 你认为 if 对于它下一行的代码做了什麽?
if
语句为代码创建了一个所谓的「分支(branch)」,就跟 RPG游戏中的情节分支一样。if 语句告诉你的脚本:「如果这个布林表示式为真,就执行接下来的代码,否则就跳过这一段。」 - 把习题29中的其它布林表示式放到 if 语句中会不会也可以执行呢?试一下。可以。而且不管多複杂都可以,虽然写複杂的东西通常是一种不好的写作风格。
- 如果把变量 people、cats和 dogs 的初始值改掉,会发生什麽事情?因为你比较的对象是数字,如果你把这些数字改掉的话,某些位置的 if 语句会被演绎为 True,而它下面的程序区段将被运行。你可以试著修改这些数字,然后在头脑裡假想一下那一段代码会被运行。
把我的答案和你的答案比较一下,确认自己真正懂得代码「区段(block)」的含义。这点对于你下一节的习题很重要,因为你将会写很多的if 语句。
把这一段写下来,并让它运行起来:
people = 30
cars = 40
buses = 15
if cars > people
puts "We should take the cars."
elsif cars < people
puts "We should not take the cars."
else
puts "We can't decide."
end
if buses > cars
puts "That's too many buses."
elsif buses < cars
puts "Maybe we could take the buses."
else
puts "We still can't decide."
end
if people > buses
puts "Alright, let's just take the buses."
else
puts "Fine, let's stay home then."
end
你应该看到的结果
$ ruby ex30.rb
We should take the cars.
Maybe we could take the buses.
Alright, let's just take the buses.
$
加分习题
- 猜想一下
elsif
和else
的功能。 - 将
cars
、people
和buses
的数量改掉,然后追溯每一个if语句。看看最后会印出什麽来。 - 试著写一些複杂的布林表示式,例如
cars > people and buses < cars
。 在每一行的上面写注解,说明这一行的功用。
在线练习
{$ activeFileHint $}