18. Loop — Solusi Pekerjaan Rumah

File solusi .py ada di exercises/18/homework/solutions/.

Soal 1 — Hitung sampai 20

Soal. Cetak 1 sampai 20 dengan loop while.

Cara memikirkannya. Loop while membutuhkan nilai awal, kondisi berhenti, dan pembaruan. Mulai dari 1, berhenti setelah 20, tambahkan 1 setiap kali.

Solusi.

i = 1
while i <= 20:
    print(i)
    i = i + 1

Kesalahan umum.

  • Melupakan i = i + 1. Kondisi tetap True selamanya, sehingga loop tidak pernah berakhir.
  • Menggunakan i < 20, lalu melewatkan 20. <= menyertakan titik akhir.

Soal 2 — Tabel perkalian 7

Soal. Cetak 7 * i = hasil untuk i dari 1 sampai 12.

Cara memikirkannya. Loop for dengan range(1, 13). Setiap kali mencetak satu baris dari i dan 7 * i.

Solusi.

for i in range(1, 13):
    print(f"7 * {i} = {7 * i}")

Kesalahan umum.

  • Menulis range(1, 12). Itu berhenti di 11 dan melewatkan baris terakhir. range(start, stop) mengecualikan stop, jadi gunakan range(1, 13) untuk mencapai 12.
  • Mengacaukan 7 * i (yang dicetak) dengan i (counter).

Soal 3 — Berhenti di ambang batas

Soal. Tambahkan 1, 2, 3, ... ke total. Berhenti setelah melebihi 100. Cetak counter dan total.

Cara memikirkannya. Dua variable: counter yang bertambah 1 setiap kali, dan total yang bertambah sebesar counter. Kondisi keluar, total > 100, cocok di dalam sebagai if ... break, yang sesuai untuk while True:.

Solusi.

i = 1
total = 0

while True:
    total = total + i
    if total > 100:
        break
    i = i + 1

print("Stopped at i =", i, "with total =", total)

Untuk i = 1..14, jumlah 1+2+...+14 = 105 adalah total pertama yang melebihi 100:

Stopped at i = 14 with total = 105

Kesalahan umum.

  • Menambahkan i = i + 1 sebelum menambahkan ke total. Itu menambahkan i berikutnya, bukan yang saat ini. Urutkan dengan sengaja.
  • Menempatkan break setelah i = i + 1. Maka i yang dicetak adalah satu lebih dari nilai yang mendorong total melewati 100. Keduanya berfungsi; lakukan dengan sengaja.

Tantangan — Jumlah 1..N

Soal. Baca n, jumlahkan 1..n dengan loop for, bandingkan dengan bentuk tertutup n * (n + 1) // 2.

Cara memikirkannya. Loop for dari range(1, n + 1) menambahkan setiap counter ke total. Bentuk tertutup untuk n integer positif pertama adalah n * (n + 1) // 2, trik Gauss. Cetak keduanya, pastikan sama.

Solusi.

n = int(input("Enter a positive whole number n: "))

total = 0
for i in range(1, n + 1):
    total = total + i

print(f"Sum from 1 to {n} is {total}")
print("Formula gives", n * (n + 1) // 2)

// adalah pembagian integer, sehingga kedua baris menampilkan bilangan bulat. Seperti yang diharapkan.

Kesalahan umum.

  • Menulis range(1, n). Itu berhenti di n - 1 dan memberikan jawaban yang salah. Gunakan range(1, n + 1) untuk menyertakan n.
  • Melupakan menyetel total ke 0 sebelum loop.
  • Menulis rumus sebagai n * n + 1 // 2. Urutan operasi penting: tanda kurung di sekitar (n + 1) diperlukan.

Selesai?

Kamu sekarang bisa mengulangi pekerjaan dengan setiap jenis loop. Selanjutnya, Nested loop bersarang loop untuk membangun grid, dan Pola loop menamai pekerjaan yang paling sering dilakukan loop. Kemudian proyek mini Bagian 4 — Permainan Tebak Angka dan Rock-Paper-Scissors — menggabungkan keputusan dan pengulangan.