Chinese, Simplified subtitles

← Python Expressions Solution - Intro to Computer Science

Get Embed Code
4 Languages

Showing Revision 1 created 08/27/2016 by Udacity Robot.

  1. 答案是第一个 它只有一个数字3
  2. 我们可以根据这条规则得到数字 3
  3. 从表达式开始 用数字替换
  4. 然后再用数字 3 替换数字
  5. 第二个不是合法表达式
  6. 原因是从表达式出发 我们只有三种选择
  7. 使用表达式 运算符 表达式替换
  8. 或使用数字替换
  9. 或使用左圆括号 表达式 右圆括号替换
  10. 由于我们要匹配的表达式以左圆括号开始
  11. 最终我们只能适用这条规则
  12. 替换成带左圆括号的表达式
  13. 当我们适用这条规则是 得到的是一个后跟表达式的左圆括号
  14. 现在我们有了这个表达式
  15. 从这开始 我们匹配了最外层的左圆括号
  16. 和右圆括号 并剩下了这些内容
  17. 我们可以用带括号表达式替换这个表达式
  18. 我们适用这条规则把这个表达式替换成带括号的
  19. 这时之前的第二个右圆括号
  20. 仍然存在
  21. 这与这里不符 因为需要两个右圆括号才能匹配
  22. 这条规则的含义是
  23. 我们使用的每一个左圆括号
  24. 最终都应使用对应的右圆括号进行闭合
  25. 所以无法生成括号使用未成对的表达式
  26. 因此这不是一个合法 Python 表达式
  27. 我们能够生成第三个表达式 它具有很多嵌套的表达式
  28. 这里有三个左圆括号
  29. 不过也有三个右圆括号与它们配对闭合
  30. 至于如何获得这个表达式
  31. 我们从一个表达式开始 作为起点
  32. 使用这个规则替换成圆括号 表达式 圆括号
  33. 现在 我们有了一个以数字 1 开始的表达式
  34. 所以我们把这个表达式替换成表达式 运算符 表达式
  35. 我们仍然保留之前的外层括号
  36. 现在来处理这里
  37. 我们把这个表达式替换成数字 然后替换成数字 1
  38. 接下来替换运算符
  39. 下面的运算符使用乘法规则
  40. 使用 * 替换运算符 接下来要替换这个表达式了
  41. 我们尝试生成全部这些 所以我们适用括号规则进行替换
  42. 继续
  43. 我们用表达式 运算符 表达式
  44. 替换这个表达式
  45. 最终得到了 2 * 然后再次适用括号规则进行替换
  46. 得到 3 * 4 所有的步骤我就不写了
  47. 因为屏幕放不下了
  48. 但是我希望你们建立一个基本的概念
  49. 我们可以通过重复替换 构建像这个一样的复杂表达式
  50. 第四个选项不是合法表达式
  51. 我们不可能通过这条规则得到一个运算符在最前面的表达式
  52. 事实上 Python 中有
  53. 可以生成运算符表达式的规则
  54. 但是这里有两个表达式 这里是 3 空格 3
  55. 如果只是数字 33 那么这实际上是合法的 Python 表达式
  56. 但是这并不能通过这里的语法生成
  57. 第五个表达式也是合法的
  58. 像这样嵌套括号是不实用且不必要的
  59. 但是我们始终可以适用这条规则
  60. 所以我们可以适用最后这条带括号的规则
  61. 获得这个以表达式开始的表达式
  62. 然后以括号结束
  63. 表达式 括号 反括号 我们可以重复适用这条规则
  64. 把中间的表达式替换成表达式
  65. 括号 表达式 适用最后一条规则替换这个表达式
  66. 这最终使我们的到一个被圆括号环绕的表达式
  67. 我们始终保留着外侧的两层括号
  68. 所以我们想添加多少层括号都可以 不过这没有必要
  69. 也毫无用处 我们永远不会这样写代码
  70. 但它仍然是合法的 Python 表达式
  71. 这样的递归语法规则十分强大
  72. 只需几条简单的规则就能描述一门复杂的语言
  73. 我们在本课程中学习 Python 语言全部的都能
  74. 用这种当时描述
  75. 我们不会像这样描述全部 Python 语言
  76. 但是我希望你们已经理解了语法的工作原理
  77. 你会发现
  78. 尽管随着课程推进 我们会引入一些非正式的构造
  79. 但是它们都可以分解成
  80. 这些的正式且实际的规则