Dari kursus: Pelatihan Esensial Python

Saat

- Meskipun loop terlihat tidak berbahaya, tetapi itu adalah salah satu hal paling berbahaya yang dapat Anda tulis dengan Python. Satu kesalahan kecil dan program Anda akan berjalan selamanya. Memang, beberapa program yang ingin kita jalankan selamanya, seperti layanan web, tetapi program Anda mungkin berjalan selamanya dan tidak dengan cara yang baik. Tapi jangan takut, saat Anda berada di sini, Anda akan mempelajari pernyataan kontrol loop tingkat lanjut untuk menjinakkan binatang buas ini. Mari kita pergi ke kode. Satu hal yang saya suka gunakan untuk menguji while loop adalah kelas Python datetime, dari datetime import datetime. Baiklah dan pasti, kita dapat menambah beberapa angka dalam perulangan while kita untuk memeriksa apakah kita telah mencapai angka tertentu, tetapi mengapa kita tidak menggunakan perulangan for untuk itu? Memeriksa waktu sebenarnya jauh lebih menarik dan kita bisa mendapatkan tanggal dan waktu saat ini dengan memanggil datetime.now() dan jika kita hanya menginginkan detik di menit saat ini, kita dapat menggunakan .second sehingga kita 34 detik ke menit saat ini. Sekarang, jika kita ingin mendapatkan dua detik ke depan, tambahkan saja 2, tetapi Anda harus berhati-hati dengan ini. Karena katakanlah kita saat ini berada di 59 detik, itu pada satu detik ke menit berikutnya, jadi kita perlu menggunakan modulus 60 untuk mencerminkannya. Jadi, inilah mengapa kita melakukan semua ini, mari kita buat perulangan while sederhana yang menunggu dua detik dan kemudian mencetak beberapa pesan, wait_until sama dengan dua detik ke masa depan sementara datetime.now().second ! = wait_until: print ('Masih menunggu.') Akhirnya, kita keluar dari while loop dan mencetak "We are at {wait_until} seconds!" Oke, sekarang jika kita menjalankan ini, itu dengan sangat cepat mengisi layar kita. Jadi Python sangat cepat, izinkan saya membersihkan sel ini. Baiklah, jadi apa yang harus kita lakukan dalam situasi ini? Nah, jika kita menghapus pernyataan print, kita mendapatkan kesalahan sintaks. Anda harus memiliki sesuatu yang menjorok di bawah loop while. Apa yang bisa kita lakukan adalah mungkin melakukan perhitungan yang tidak berguna. Ini berhasil tetapi ini adalah pemborosan daya komputasi yang mengerikan menurut saya. Satu hal yang dapat kita gunakan adalah pernyataan pass. (pengetikan instruktur) Itu dia dan apa yang dikatakan pernyataan masa lalu ini adalah, tidak ada yang bisa dilihat di sini bergerak tetapi secara kritis mempertahankan indentasi kita. Ini juga hal yang bagus untuk digunakan sebagai placeholder katakanlah, jika Anda menulis fungsi atau definisi kelas, tetapi Anda belum ingin mengisinya, Anda bisa menulis pass. Jadi mari kita lihat cara lain untuk menulis ini menggunakan pernyataan break. Jadi saya akan menggunakan wait_until, dan kemudian saya akan mengatakan while True: baiklah, jadi sejujurnya, jantung saya berdetak kencang setiap kali saya melihat while True: dalam kode seseorang tetapi dalam hal ini aman, kita akan menggunakannya dengan aman. Jika datetime.now().second = wait_until: break sekarang izinkan saya memindahkan ini di bawah pernyataan break ke sana. Baiklah, jadi tunggu dua detik dan kemudian dicetak. Jadi apa yang dilakukan pernyataan break adalah keluar dari loop saat ini yang berada. Anda dapat menganggap ini sebagai naik garis dan mengatakan, apakah ini lingkaran? Tidak, itu pernyataan jika. Apakah ini lingkaran? Yap, ini adalah perulangan sementara sehingga keluar dari perulangan sementara saat ini, meskipun tertulis while True: Catatan, bahwa pernyataan break hanya keluar dari perulangan pertama yang dimasukinya. Jadi jika saya melakukan ini dan mengubahnya menjadi loop sementara juga, itu menunggu dua detik, mencetak kita berada di 11 detik... Waduh, dan itu masih berjalan. Anda dapat melihat tanda bintang di sana yang menunjukkan bahwa itu masih berjalan. Jadi itu akan berjalan selamanya, tidak pernah keluar dari ini sementara True: Dan setiap detik mencapai 11 detik, itu hanya akan mencetak pesan ini selama satu detik penuh. Jadi izinkan saya menghentikan ini dan saya akan menghapus output sel lagi. Oke, dan pernyataan kontrol terakhir untuk, for loops, Continue. Lanjutkan, lewati baris apa pun yang mengikutinya di dalam loop while. Jadi jika saya mengambil kode asli ini di sini, maka bawa ke sana ... Hanya akan meletakkan pernyataan continue di sana dan Anda dapat melihat bahwa baris ini tidak pernah dicetak. Jadi lanjutkan hanya melewatkan semua hal lain yang mengikutinya di dalam loop while ini. Sekarang jelas, kita bisa mengganti semuanya dengan pass dan itu akan persis sama dan sedikit lebih bersih. Jadi biasanya Anda melihat pernyataan continue yang digunakan di dalam pernyataan if untuk mencegah sisa kode dalam loop dieksekusi tetapi hanya jika beberapa kondisi terpenuhi. Jadi mari kita salin saja, ubah while menjadi True: lagi, Dan kemudian di sini saya akan mengatakan jika datetime.now().second kurang dari wait_until: lanjutkan ubah ini menjadi break. Oke, jadi ketika pernyataan continue ini dikenakan, itu melewatkan semua yang lain dalam loop, yang hanya pernyataan break ini. Dan segera setelah ini, jika pernyataan tidak lagi benar, maka continue tidak lagi dikena, itu benar-benar mencapai pernyataan break, mematahkannya di luar loop while ini. Kemudian itu mencetak "Kami berada di {wait_until} detik!" Tentu saja, logika ini pada dasarnya sama dengan menempatkan cek ini di dalam loop while itu sendiri dan kemudian keluar dari loop while setelah dua detik. Dan ini adalah rahasia besar dengan continue dan break, mereka tidak diperlukan secara logis secara teknis tetapi mereka dapat membantu Anda mengatur ulang dan menulis kode dengan lebih jelas untuk dibaca oleh programmer lain. Jadi penting untuk memahaminya dan siap untuk mencambuk mereka tergantung pada situasinya.

Konten