本篇將以終極密碼和勘根定理兩個範例,來做為迴圈語法的應用展示。
終極密碼的遊戲目標是,給定一個上下界,讓大家猜出該範圍內的數字。而在遊戲過程中,上下界會隨著大家猜想的數字變化,而愈來愈縮小範圍,直至有人猜中為止。以下是完整程式碼:
low = 1 high = 100 pwd = 35 while True: guess = int(input('Please enter a number within [{}, {}]:'.format(low, high))) if guess == pwd: print('You got it!') break elif guess < pwd: low = max(guess+1, low) elif guess > pwd: high = min(guess-1, high)在上述範例中:
- 密碼是事先寫死的。若你想要改用亂數產生,可以參考 random 模組。
- 「while True:」代表迴圈永遠會執行,因此你若希望在猜中後結束遊戲,需要用「break」跳出迴圈。
- 範例設計為密碼有可能剛好是上界或下界。你如果有其他設計,必須自行修改程式碼。
高中學過的勘根定理,也可以用迴圈來實做。勘根定理告訴我們,如果函數 f 是連續的,且 f(a) * f(b) ≤ 0,則 [a, b] 之間至少有一根。求根的步驟如下:
- 找一個區間 [a, b],使 f(a) 和 f(b) 異號
- 求 a, b 中點 c,並求 f(c)
- 如果 f(a) 和 f(c) 同號,則取 c 為新左界,否則取 c 為新右界
- 重複 2 和 3,至夠精確為止
以下範例,會展示如何找出 x5 - x - 1 = 0 在 (-0.5, 1.5) 之間的某一根:
def f(x): return x ** 5 - x - 1 a = -0.5 b = 1.5 fa = f(a) fb = f(b) while True: c = (a + b) / 2 fc = f(c) if abs(fc) < 1e-5: print(c, abs(fc)) break elif fa * fc > 0: a = c else: b = c在上述範例中:
- 數字已經過是先設計,保證該方程式在該範圍內恰有一根。
- 你可以利用 Google、matplotlib.pyplot 模組,或其他方式畫圖,觀察看看範例結果是否與圖形相符。
- 我們只需要關心左界和右界的函數值的正負號,而不用關心實際的函數值,因此不需要反覆計算新的 f(a) 與 f(b)。