3 流程控制: 判別式和回圈

判別式: 在程式的運行中, 很多時需要根据不同的情況做相應的運算. 為了處理這些不同的情況, 我們需要把每個情況下應做的操作全部寫好. 這些稱為程式中的分枝. 中蟒提供了判別式 "如 .. 不然 .. 否則" 來 讓程式決定該執行哪一條分枝.

例子:

答 = 整數(輸入("請告訴我你的年紀: "))
如 答 == 0:
   寫 "別開玩笑了, 你剛出生嗎 ?"
不然 答 < 0:
   寫 "哇! 妖怪!"
不然 答 > 200:
   寫 "哇! 妖怪!"
   寫 "不! 是老妖怪!"
不然 答 < 40:
   寫 "嘿! 小伙子"
否則:
   相差 = 答 - 1
   寫 "你好, 你的年紀比中蟒大", 相差 , '歲.'

"如" 后面要跟著一個判別項, 判別項可以是任何能化簡的表達式. 如該表達式為真的話則執行冒號后面的指令.

冒號 ":" 中蟒用來區分判別式的終了, 因此不要忘了加.

注意執行多少行指令是由程式碼的縮排來決定的. 也就是說:

如 2 < 1:
  寫 "2<1",
寫 "當然了"

如 2 < 1:
  寫 "2<1",
  寫 "當然了"

這兩個程式段的結果是不同的. 第二個例子中 '寫 "當然了"' 是屬于 '如' 的碼區中, 所以 '如' 判別失敗后該指令不會被執行.

'如' 判別失敗后, 程式會繼續判別之后的 '不然' 語句. 如有匹配的話則會執行其下的指令. 當所有判別都失敗后程式的流程會分枝到 '否則' 之下.

'不然' 和 '否則' 判別式都是可有可無的. 但要注意是判別式中隨便一項為真, 則程式執行完其下的指令后會直接跳到整個判別區之下繼續運行下面的程式碼. 就是說

甲 = 20
如 甲 > 1:
  寫 '甲大于 1'
不然 甲 > 2:
  寫 '甲大于 2'
不然 甲 > 3:
  寫 '甲大于 3'

寫 '完成'

這個程式寫完 '甲大于 1' 后就直接跳去寫 '完成' 了.

判別式容許嵌套形式, 就是說你可以在 '如' 之下的碼段中用第二個, 第三個 '如' 語句, 只要你的程式書寫依照合理的縮排.

回圈式: 程式有時需要重复執行同一運算許多次. 比如計算從 1 加 到 100 的和, 就要算 100 次加法. 這個情況可利用回圈運算來完成. 中蟒有兩類回圈: '取 .. 自 ..' 和 '只要 ..'

和 = 0
循環子 = 0
只要 循環子 < 100:
    和 = 和 + 循環子
    循環子 = 循環子 + 1
寫 和

和 = 0
取 循環子 自 范圍(0, 100, 1):
    和 = 和 + 循環子
寫 和

上面示范了兩种方法. 留意上面只是算從 0 加到 99 的值而不是 1 到 100.

第一种結合了判別方式, 程式員需要在回圈中調整 "循環子" 的值. 如果程式中漏了 "循環子 + 1" 這句, 那程式會一直不停地運算下去.

第二种則給出循環范圍是從 0 到 100 每次遞增 1. 范圍是中蟒的內建函數, 它可以產生一個數列.

兩种方法都各有長處. '只要' 回圈中循環子的值可以隨便更改, 因此可以任意決定何時跳出回圈. '取 ..' 回圈則可以取值自任何序列, 對遍歷序列很有用, 如:

取 算子 自 [0, 25, 3, 19, '完']:
   寫 算子,

跳出回圈: 中蟒提供了 '下一個' 和 '中斷' 兩個指令. '下一個' 更新目前回圈的循環子值再重新執行, '中斷' 則干脆跳离回圈.

回圈也是可以嵌套的.