陈ZAMYLA：这是一个我，Zamyla。
今天马里奥，我们将要 图纸马里奥半金字塔
爬了​​起来。
>> 所以，让我们来谈谈我们 待办的这个问题。
我们会想 提示和验证
用户对于如何有效输入 高，他们希望马里奥的金字塔是。
接下来，我们要画它。
因此，让我们开始使用提示和 验证他们的用户输入。
>> 我们可以利用的 CS50库函数
得到INT将确保 用户输入的整数。
任何正整数，负 整数，0号都是公平的游戏。
否则，用户将被提示 重试，直到他们输入一个有效的整数。
现在虽然GET INT呢 很多关于我们的工作
在确保 用户给了我们一个整数，
我们仍然需要应用一些 上额外的约束。
毕竟，我们不能有马里奥攀岩 高度负12的一半的金字塔。
>> 除此之外，该 问题说明
说，我们只能 让马里奥爬
高度的0到23之间的金字塔。
好了，这意味着我们需要 连续提示用户
给我们一个有效 数只有不断
一旦他们已经给了我们一个有效的高度。
我们怎么办呢？
>> 那么，连续的过程给我们 的loops--做某事的想法
重复。
在C一根环路一段时间 循环将持续
只要执行循环体 给定的条件计算为真。
一旦这个条件 计算结果为false，
该计划将继续进行 以后无论发生什么事。
因此，while循环的一种方式 确保我们不断
提示输入有效用户输入。
一旦他们给我们一个有效的输入， 我们将继续成何体统来。
我们知道，我们要问 用户至少一次输入。
所以，现在我们来到的一姐 while循环，这是do while循环。
>> do-whil​​e循环将执行 循环体至少一次。
因此，没有检查的情况下， 它将执行循环体。
然后检查情况看 是否需要重演。
这是在方便的时候 我们正在验证用户输入。
我们知道，我们要去 问他们至少一次。
因此，一个do while循环可能 是这个样子。
我们有一个整数n。
而做的内部 while循环，我们马上
提示整数用户。
如果n是无效的，那么我们就会促使他们 一次一次又一次，直到他们
给我们有效的整数。
最后，当n是一个有效的投入，我们将 继续我们的节目的其余部分。
>> 因此，让我们回到规范和检查 什么有效的输入条件
将是。
的有效高度要 介于0和23（含）之间。
因此无效的高度要 小于0或大于23。
所以请记住，设计 你的病情仔细，
知道该条件 为do while循环
应而n是无效的。
现在，这不会是一个 简单的单布尔表达式。
我们将不得不结合 两种不同的表现
使我们的整体状态。
>> 因此，让我们只看一个真值表我已经 已经给你，我们的提示
将要处理两个布尔值。
所以这里有一个真值表，我 有两个Booleans--布尔值1和2。
因此，我们必须评估选项 BOOL1和BOOL2或BOOL1或BOOL2。
并只当双方真实 布尔值评估为true，而所有
或将如此只要之一 两个布尔值计算结果为true。
OK，所以采取了片刻，暂停此 视频和消化这个道理表。
我会在这里等候。
当你回来时，看到 如果你能拼凑
布尔表达式为您 n个条件是无效的输入。
>> 所以，现在我们有 有效的用户输入，让我们
继续前进，谈谈我们如何 可能会得出一半的金字塔。
在这里，在这个简单的文本编辑器， 我画一个左对齐的金字塔。
但我们知道，我们需要我们的 金字塔是正确对齐。
所以，我怎么可以这样做？
好吧，我可能会尝试推 一切都在一旁
通过只把一点点 字符之间。
然后，对于下一 行了，我打算把
一些更多的字符，以推动它一起 和further--等等等等forth--
直到我有右对齐金字塔。
所以，我们有一个正确对齐的金字塔，但 它看起来并不那么大的点。
但是，我们仍然要 保持那该多好间距。
所以我打算从字面上 插入一些空间。
>> 取而代之的三个点，我会 放一个，两个，三个空间。
在第二行。
我把一，二位。
而在倒数第二 行，只有一个空间。
在这里，我有一个右对齐金字塔。
从做在文本的例子 编辑，我们有图案的想法
我们将用它来绘制半金字塔。
对于每一行，我们做什么 是我们键入一些空间，
然后键入一些 散列，然后键入
输入键，这 正在创建一个新的行。
所以，现在，我们有，让我们去 一步，找到一个模式。
>> 所以我要说，对于 本实施例的兴趣，
我们正在处理的8的高度。
第一行是要具有两个 下面7个空格的哈希值。
该second-- 3哈希值，六个空格。
第三row--四个散列值，五 spaces--等等等等
直到我们得到的第n行。
于是，我问你的第n行， 多少散列，我们将不得不
又有多少空间？
所以这是给你找出一个 公式来表示多少哈希
多少空间所需的 第n行，当你有一定的高度。
>> 现在，当你搞清楚了这一点， 小心你是如何索引。
我的意思是说 在日常生活中我们所有人
开始由1算起，通常。
但在CS50和计算机科学 在一般情况下，我们是0的索引。
因此第一行是 0 n作为反对1。
要小心这个时候你 试图找出你的模式。
所以，现在，让我们回去如何 我们要引起我们的金字塔。
对于每一行，我们会想 打印空间，打印的哈希值，
然后打印一个新行。
这里的提示是 词“为”每一行。
在C中，我们有一个结构 被称为一个循环，
它包括一个 初始化，条件，更新，
并且循环体。
>> 说我想说的话，你好 世界上50倍，我的for循环
会是这个样子。
我初始化我的整数为0。
的条件是，I小于50。
然后我的更新仅仅是 通过每一个时间递增我。
我们也可以使用循环 遍历的事情。
注意这里我们怎么没有 硬编码的数，
而是放在变量 高度而不是插入的条件。
所以，我在做什么这里我遍历 在金字塔的每一行。
我可以做一些对每个 排我的循环体内部。
>> 什么是我们内部做 循环的身体？
嗯，正如我们已经说过，我们在输出 空间和我们在输出哈希
我们要打印一个新行。
所以，我的外循环 看起来是这样。
我遍历每个行 金字塔的，使用
在这种情况下，高度可变 存储该金字塔的高度。
该循环的身体里面，我 要重复打印空间，打印
反复哈希值， 然后打印一个新行。
>> 所以，现在，使用所有的概念 我在这个步行通过津津乐道，
你应该能够提示 用户输入，验证输入，
然后绘制一半的金字塔。
>> 我的名字是Zamyla，这是CS50。