Vòng lặp while

Buổi 6

Python cho Tin học trẻ · Bảng B (THCS)

Buổi 6 – Vòng lặp while1 / 20

Hôm nay em sẽ học

  1. while: lặp khi chưa biết trước số lần
  2. Vòng lặp vô hạn và cách dừng
  3. break – thoát vòng lặp, continue – bỏ qua một lượt
  4. Khi nào dùng for, khi nào dùng while
  5. Lập trình trò chơi Đoán số!
Buổi 6 – Vòng lặp while2 / 20

Khởi động: con heo đất

Mỗi ngày em bỏ heo 2000 đồng. Bao nhiêu ngày thì đủ 50 000 đồng?

  • Em có biết trước phải bỏ bao nhiêu lần không?
  • Em sẽ dừng khi nào?
Khi không biết trước số lần lặp → dùng while.
Buổi 6 – Vòng lặp while3 / 20

Phần 1: while

Lặp trong khi điều kiện còn đúng
Buổi 6 – Vòng lặp while4 / 20

Từ Scratch sang Python

ScratchPython
lặp lại cho đến khi < đủ tiền >while tien < 50000:
liên tụcwhile True:
Scratch lặp cho đến khi điều kiện đúng. Python lặp trong khi điều kiện đúng. Hai điều kiện ngược nhau!
Buổi 6 – Vòng lặp while5 / 20

Con heo đất bằng Python

tien = 0
ngay = 0
while tien < 50000:
    tien += 2000
    ngay += 1
print(ngay)
25
  • Mỗi vòng: kiểm tra điều kiện trước
  • Còn đúng → làm các dòng bên trong
  • Sai → thoát vòng lặp, chạy tiếp dòng print
Buổi 6 – Vòng lặp while6 / 20

Vòng lặp vô hạn

tien = 0
while tien < 50000:
    print("Bo heo...")

Quên tăng tien → điều kiện luôn đúng → chạy mãi không dừng!

Cách dừng: bấm nút Stop đỏ trong Thonny, hoặc Ctrl + C.
Buổi 6 – Vòng lặp while7 / 20

Phần 2: break và continue

Thoát hẳn – hoặc bỏ qua một lượt
Buổi 6 – Vòng lặp while8 / 20

break và continue

while True:
    x = int(input())
    if x == 0:
        break
    if x < 0:
        continue
    print(x * 2)
print("Het")
3
6
-4
5
10
0
Het
  • break: thoát hẳn vòng lặp
  • continue: bỏ phần còn lại, sang lượt tiếp
Buổi 6 – Vòng lặp while9 / 20

for hay while?

Tình huốngDùng
Biết trước số lần: n số, từ 1 đến nfor
Lặp đến khi một điều kiện xảy rawhile
Lặp mãi, tự quyết định lúc dừngwhile True + break
Buổi 6 – Vòng lặp while10 / 20

Luyện tập

Bài ★ cả lớp · Bài ★★★ thử thách
Buổi 6 – Vòng lặp while11 / 20

Bài 1 ★ – GUITIEN

Gửi A đồng, lãi suất r% mỗi năm (tiền lãi cộng vào gốc). Sau ít nhất bao nhiêu năm số tiền đạt ít nhất B?

Input: A, r, B trên một dòng (0 < A < B ≤ 10⁹, 1 ≤ r ≤ 100).

Output: số năm.

InputOutput
100 10 2008
Sau mỗi năm: A = A * (100 + r) / 100
Buổi 6 – Vòng lặp while12 / 20

Bài 2 ★ – DEMCS

Input: số nguyên n (0 ≤ n ≤ 10¹⁸).

Output: số chữ số của n.

InputOutput
20264
71
01
Mỗi lần n //= 10 thì n mất một chữ số. Cẩn thận với n = 0!
Buổi 6 – Vòng lặp while13 / 20

Bài 3 ★★ – COLLATZ

Bắt đầu từ n: nếu n chẵn thì chia 2, nếu n lẻ thì nhân 3 cộng 1. Sau bao nhiêu bước thì n bằng 1?

Input: n (1 ≤ n ≤ 10⁶). Output: số bước.

InputOutput
68
10
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 (8 bước)
Buổi 6 – Vòng lặp while14 / 20

Bài 4 ★★ – TONGVUOT

Input: số nguyên S (1 ≤ S ≤ 10¹²).

Output: n nhỏ nhất sao cho 1 + 2 + … + n lớn hơn S.

InputOutput
105
12
Buổi 6 – Vòng lặp while15 / 20

Bài 5 ★★ – Trò chơi ĐOÁN SỐ

Máy nghĩ một số từ 1 đến 100. Em đoán, máy trả lời Lớn hơn / Nhỏ hơn / Đúng rồi! và cho biết em đã đoán bao nhiêu lần.

import random
bi_mat = random.randint(1, 100)
Bài này là trò chơi nên được in câu hỏi input("Em doan: ").
Buổi 6 – Vòng lặp while16 / 20

Thử thách: đoán trong 7 lần

Có cách nào luôn luôn đoán đúng số từ 1 đến 100 trong tối đa 7 lần?

  • Lần đầu nên đoán số nào?
  • Sau mỗi lần, còn lại bao nhiêu khả năng?
Ý tưởng này tên là tìm kiếm nhị phân – em sẽ học ở Giai đoạn 3.
Buổi 6 – Vòng lặp while17 / 20

Bài 6 ★★★ – NHAPDEN0

Nhập các số nguyên, mỗi số một dòng, kết thúc khi gặp số 0 (không tính số 0).

Output: tổng và số lớn nhất. Có ít nhất một số khác 0.

InputOutput
3 -7 12 08 12
-5 -2 0-7 -2
Cẩn thận khi tất cả các số đều âm!
Buổi 6 – Vòng lặp while18 / 20

Tóm tắt buổi 6

while dieu_kien:
    ...

while True:
    ...
    if muon_dung:
        break
  • while: lặp trong khi điều kiện đúng
  • Nhớ thay đổi biến để vòng lặp dừng được
  • break thoát, continue bỏ qua lượt
  • Biết trước số lần → for
Buổi 6 – Vòng lặp while19 / 20

Bài về nhà

  1. Nhập n, in các số Fibonacci không vượt quá n: 1 1 2 3 5 8 …
  2. Nhập n, tìm số chính phương nhỏ nhất lớn hơn hoặc bằng n.
InputOutput
10 (bài 1)1 1 2 3 5 8
10 (bài 2)16
Buổi 6 – Vòng lặp while20 / 20
← → chuyển slide · F toàn màn hình