轨道
/
Julia
Julia
/
练习
/
安娜琳的潜入
安娜琳的潜入

安娜琳的潜入

学习练习

简介

Julia 中的布尔值

布尔值由Bool类型表示。 它只包含两个值:true和false。

julia> true
true

julia> false
false

布尔运算符

Julia 中有 3 种布尔运算符。

&&是布尔“与”。 如果&&两侧的表达式都是true,则结果为true。

julia> true && true
true

julia> true && false
false

||是布尔“或”。 如果||任意一侧的表达式为true,则结果为true。

julia> true || true
true

julia> false || true
true

!是布尔“非”。 它会交换true和false的值。

julia> !true
false

julia> !false
true

对于更长、更复杂的表达式,最好使用括号来明确你的意图。

julia> (true || false) && (false && true)
false

说明

在这个练习中,你要为一个朋友正在开发的电子游戏编写一些逻辑。游戏的主人公叫 Annalyn,是个勇敢的女孩,养着一只凶猛又忠诚的宠物狗。不幸的是,灾难降临了:她最好的朋友在森林里采浆果时被绑架了。Annalyn 要找到并救出她的朋友,这趟冒险中她可以选择带上自己的狗。

Annalyn 最终找到了囚禁她朋友的营地,发现绑架者有两个人:一位强大的骑士和一个狡猾的弓箭手。

玩家会看到接下来可以做什么的几个选项。对于这四个可能的选项,你都需要编写一个函数,告诉游戏是否应该显示该选项。

1. 检查是否应显示“快速攻击”选项

如果骑士正在睡觉,Annalyn 就能趁他还没完全清醒、穿上盔甲之前,快速突袭营地。

实现一个名为can_do_fast_attack的函数,它接收一个布尔值,表示骑士是否清醒。如果根据角色的状态,“快速攻击”动作可用,该函数返回true;否则返回false:

julia> knight_awake = true

julia> can_do_fast_attack(knight_awake)
false

2. 检查是否应显示“侦察”选项

只要这群人里至少有一个人醒着,就可以对他们进行侦察。否则侦察就是浪费时间。

实现一个名为can_spy的函数,它接收三个布尔值,分别表示骑士、弓箭手和囚犯是否清醒。如果根据这些角色的状态,“侦察”动作可用,该函数返回true;否则返回false:

# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false

julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true

3. 检查是否应显示“向囚犯发信号”选项

囚犯要是醒着,而弓箭手正在睡觉,就可以用鸟叫声向她发信号。如果弓箭手醒着,就不能安全地发信号,因为弓箭手也受过鸟叫传信的训练。

实现一个名为can_signal_prisoner的函数,它接收两个布尔值,分别表示弓箭手和囚犯是否清醒。如果根据这些角色的状态,“向囚犯发信号”动作可用,该函数返回true;否则返回false:

julia> archer_awake = false
julia> prisoner_awake = true

julia> can_signal_prisoner(archer_awake, prisoner_awake)
true

4. 检查是否应显示“释放囚犯”选项

Annalyn 可以试着潜入营地救出她的朋友。这样做很冒险,只有两种方式之一能成功:

  • 如果 Annalyn 带着她的宠物狗,那么只要弓箭手睡着了,她就能救出囚犯。骑士怕狗,而弓箭手来不及在 Annalyn 和她的朋友逃走之前做好准备。

  • 如果 Annalyn 没有带狗,那她和囚犯就得非常小心!如果囚犯醒着,且骑士和弓箭手都在睡觉,Annalyn 就能救出囚犯;但如果囚犯在睡觉,就救不了她:她被 Annalyn 突然出现吓到,会惊醒骑士和弓箭手。

实现一个名为can_free_prisoner的函数,它接收四个布尔值。前三个参数分别表示骑士、弓箭手和囚犯是否清醒。最后一个参数表示 Annalyn 的宠物狗是否在场。如果根据这些角色的状态,“释放囚犯”动作可用,该函数返回true;否则返回false:

julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false

julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Julia Exercism

准备好开始 安娜琳的潜入 了吗?

注册 Exercism,借助 35 个概念128 个练习 和真人导师指导,学习并掌握 Julia,全部免费。