跳转到内容

Nimrod 编程/条件语句

来自维基教科书,自由的教科书

介绍条件语句

[编辑 | 编辑源代码]

我们已经了解了如何存储值,但除了显示不同的输出之外,我们还能做些什么?它们如何有用?答案是条件语句。条件语句是一种只在特定情况下执行操作的方法(由你指定),我们可以将其与一个服从所有命令的人进行比较……比如……一个奴隶!你拥有一个奴隶,但事实证明你的奴隶有点傻,不会做你没有告诉它的事情,你想让它给你拿一杯咖啡,所以他会拿一个杯子,从水壶里倒满咖啡,但等等,如果水壶里没有咖啡怎么办?他会给你拿一杯空气,所以如果我们想确保他拿给我们一杯咖啡,我们必须告诉他去煮咖啡,但只有在没有咖啡的情况下,因为如果水壶里有咖啡,就会弄得一团糟。所以我们给他的命令会类似于以下内容

If there's not coffee in the kettle then make some coffee
Take a mug
Fill the mug with coffee from the kettle
Bring me the mug

嗯,这看起来很像代码,让我们尝试在 Nimrod 中重现它

if theresNotCoffeInTheKettle():
  makeSomeCoffee()
  takeAmug()
  fillTheMug()
  bringTheMug()

注意:你可能还记得之前示例中的括号,现在不用担心它们。

正如你所看到的,有一个新的命令 "if" 部分,它将检查水壶里是否有咖啡,然后执行冒号后面的内容(在本例中是煮咖啡的指令)。到目前为止,我们学习了两件事:如何执行满足给定条件的命令,以及计算机是一个愚蠢(但速度惊人)的奴隶。

更多条件语句

[编辑 | 编辑源代码]

不错,这样我们的奴隶一定会给我们拿咖啡,但如果我们想让我们的奴隶只在有咖啡的情况下煮咖啡呢?让我们看一个例子

if theresNotCoffeeInKettle() and theresCoffee():
  makeSomeCoffee()
  takeAMug()
  fillTheMug()
  bringTheMug()

在继续解释之前,我想澄清一下,"if" 表达式所做的就是检查传递给它的内容是否与被称为 "true" 的内容相同。"true" 是一种布尔类型(以数学家乔治·布尔的名字命名,他提出了用两个值 "true" 和 "false" 进行运算的想法),所以我们将看到的运算符所做的就是接收一个或两个布尔类型值并对其进行转换。

所以很简单,"and" 运算符接收两个(布尔)值,只有当这两个值都为 "true" 时才返回 "true",否则返回 "false"。

现在让我们回到第一个例子,并考虑我们的奴隶不知道 "theresNotCofeeInTheKettle()" 的指令,但他知道 "theresCofeeInThekettle()"(相同但相反),所以我们该怎么办?让我们把 "not" "拿" 到外面

if not theresCofeeInTheKettle():
  makeSomeCoffee()
  ...

正如你所看到的,"not" 会反转它接收的内容,如果它接收 "true",它将返回 "false",但如果它接收 "false",它将返回 "true"。

我们还有 "or",它接收两个值(就像 "and" 一样),你可能猜到了,只要两个操作数中的一个为 "true"(或两个都为 "true"),它就会返回 "true"。

将它们组合起来

[编辑 | 编辑源代码]

你可以使用任意数量的这些运算符,甚至可以重复使用它们。但是,它们可能不会按照正确的顺序执行,所以我们如何告诉他应该按照什么顺序执行呢?就像在数学中一样,使用括号。

if not expression1 and expression2:

它会先将 "not" 应用于表达式 1,然后将 "and" 应用于表达式 1 的反转(因为有 "not",记住)和表达式 2。但我们想要的是不同的东西,我们想要对表达式 1 和表达式 2 进行 "and" 运算,然后对结果进行反转,如何做到呢?

if not (expression1 and expression2):

如果你能看到这里,恭喜你,你现在已经了解了关于布尔值的几乎所有知识,现在我的建议是,如果你感到疲倦,休息一下,甚至睡一觉,因为你值得拥有。

华夏公益教科书