Python sambil mengulang beberapa baris

Loop adalah salah satu konstruksi yang paling mendasar dan kuat dalam komputasi, karena memungkinkan kita untuk mengulangi serangkaian perintah, sebanyak yang kita inginkan, pada daftar item yang kita pilih. Sebagian besar pemikiran komputasi melibatkan mengambil satu tugas dan menyelesaikannya dengan cara yang dapat diterapkan berulang kali untuk semua tugas serupa lainnya, dan loop for adalah cara kita membuat komputer melakukan pekerjaan berulang itu.

for item in $items
do
  task $item
done

Tidak seperti kebanyakan kode yang telah kita tulis sejauh ini pada prompt interaktif, for-loop tidak dijalankan segera setelah kita menekan Enter

user@host:~$ for item in $items
_

Kita dapat menulis perintah sebanyak yang kita inginkan di blok antara kata kunci

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3 dan
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done

Hanya sampai kita mencapai

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
_4, dan tekan Enter, for-loop melakukan tugasnya

Ini pada dasarnya berbeda dari perintah-dan-respons baris demi baris yang telah kami alami sejauh ini saat diminta. Dan itu menunjukkan bagaimana kita akan memprogram lebih jauh. kurang menekankan pada eksekusi perintah dengan setiap baris, dan lebih menekankan pada perencanaan fungsionalitas program, dan kemudian mengeksekusinya nanti

Sintaks dasar

Sintaks untuk

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 loop bisa membingungkan, jadi berikut adalah beberapa contoh dasar untuk mempersiapkan/menyegarkan pemahaman Anda tentangnya

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done

Berikut adalah versi yang lebih rumit menggunakan variabel

for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
_

Substitusi perintah dapat digunakan untuk menghasilkan item yang diulang oleh

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 loop

for var_name in $(seq 1 100); do
  echo "Counting $var_name..."
done

Jika Anda perlu membaca daftar baris dari file, dan benar-benar yakin bahwa tidak ada baris yang berisi spasi di dalamnya

for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done

Loop baca-sementara adalah variasi di atas, tetapi lebih aman untuk membaca baris dari file

while read url
do
  curl "$url" >> everywebpage_combined.html
done < list_of_urls.txt

Membangun dasar untuk loop

Mari kita mulai dari awal, dengan perulangan

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 yang sangat minimal, lalu membangunnya menjadi sesuatu yang lebih rumit, untuk membantu kita memahami tujuan mereka

Lingkaran paling sederhana

Ini sesederhana Anda dapat membuat for loop

user@host:~$ for x in 1      
> do      
> echo Hi
> done
Hi

Apakah itu tampak tidak berharga? . Saya menulis empat baris kode untuk melakukan apa yang diperlukan satu baris,

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
9

Lebih banyak elemen dalam koleksi

Sulit untuk mengatakannya, tetapi "loop" berhasil dijalankan. Itu hanya dieksekusi sekali. OK, jadi bagaimana kita membuatnya mengeksekusi lebih dari satu kali? . Mari tambahkan empat

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
_1 lagi

user@host:~$ for x in 1 1 1 1   
> do      
> echo Hi
> done
Hi
Hi
Hi
Hi

Oke, tidak terlalu mengasyikkan, tetapi programnya tampaknya setidaknya berputar-putar. empat

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
_1 menghasilkan empat
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
3 perintah dieksekusi

Apa yang terjadi jika kita mengganti keempat

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
_1 itu dengan nomor yang berbeda?

user@host:~$ for item in $items
_0

Dan tidak ada. Jadi perulangan tidak secara otomatis melakukan sesuatu yang spesifik pada kumpulan nilai yang kita berikan. Lagipula belum

Lihat variabel loop

Mari kita lihat di sebelah kiri kata kunci

for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
_0, dan pada saat itu
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6. Apa gunanya
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
_6 itu? . Jadi mungkin itu variabel?

user@host:~$ for item in $items
_1

Bingo. Ini adalah cara kerja dasar dari

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 loop. - Dapatkan koleksi item/nilai (
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
1) - Berikan mereka ke konstruksi loop
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 - Menggunakan variabel loop (
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6) sebagai placeholder, tulis perintah di antara blok
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3/
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4. - Ketika loop dieksekusi, variabel loop,
for animal in dog cat 'fruit bat' elephant ostrich
do
  echo "I want a $animal for a pet"
done
6, mengambil nilai dari setiap item dalam daftar –
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
7,
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
8,
for thing in $collection_of_things
do
  some_program $thing
  another_program $thing >> data.txt
  # as many commands as we want
done
9,
for var_name in $(seq 1 100); do
  echo "Counting $var_name..."
done
0, – dan blok perintah antara
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3 dan
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4 kemudian dieksekusi. Urutan ini berulang sekali untuk setiap item dalam daftar

Blok

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
3/
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
4 dapat berisi urutan perintah apa pun, bahkan
do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6-loop lainnya

user@host:~$ for item in $items
2
user@host:~$ for item in $items
3

Loops-in-loops adalah konstruksi umum dalam pemrograman. Untuk sebagian besar, saya akan mencoba untuk menghindari menetapkan masalah yang akan melibatkan logika semacam ini, karena sulit untuk dilepaskan selama proses debug.

Baca file, baris demi baris, andal dengan read-while

Karena

for var_name in $(seq 1 100); do
  echo "Counting $var_name..."
done
_6 mencetak file baris demi baris, for loop berikut tampaknya masuk akal

user@host:~$ for item in $items
_4

Namun, substitusi perintah akan menyebabkan

for var_name in $(seq 1 100); do
  echo "Counting $var_name..."
done
6 memisahkan kata dengan spasi. Jika
for var_name in $(seq 1 100); do
  echo "Counting $var_name..."
done
_8 berisi yang berikut ini

user@host:~$ for item in $items
_5

Output dari

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
6 loop adalah ini

user@host:~$ for item in $items
_6

Loop baca-sementara akan mempertahankan kata-kata dalam satu baris

user@host:~$ for item in $items
_7

Kami juga dapat mem-pipe dari hasil perintah dengan melampirkannya di

for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done
0 dan
for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done
1

user@host:~$ for item in $items
_8

Pipa dan loop

Jika Anda berasal dari bahasa lain, aliran data mungkin asing bagi Anda. Setidaknya bagi saya, karena sintaks untuk bekerja dengan mereka jauh lebih langsung dan lugas di Bash daripada di Ruby atau Python

Namun, jika Anda baru mengenal pemrograman dalam bahasa apa pun, yang mungkin juga tidak jelas adalah bagaimana bekerja dengan aliran data berbeda dengan bekerja dengan loop.

Misalnya cuplikan berikut

user@host:~$ for item in $items
_9

– menghasilkan output yang sama dengan loop ini

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
0

Dan tergantung pada model mental Anda, tampaknya dalam kedua contoh, setiap kata, mis. g.

for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done
_2,
for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done
3, melewati proses penerjemahan (melalui
for url in $(cat list_of_urls.txt); do
  curl "$url" >> everywebpage_combined.html
done
4) dan kemudian digaungkan

Pipa dan filter

Tanpa membahas dasar-dasar sistem Unix, di mana pipa beroperasi secara fundamental berbeda dari loop di sini, izinkan saya menyarankan solusi mental

Program yang menyalurkan dari stdin dan stdout biasanya dapat diatur sebagai filter, di mana aliran data masuk ke program, dan keluar dalam format yang berbeda

do
  command_1
  command_2
  # another for loop just for fun
  for a in $things; do; command_3 a; done
  command_4
done
1

Untuk tugas yang lebih dari sekadar mengubah data, dari filter ke filter, pertimbangkan untuk menggunakan loop. Apa yang mungkin menjadi tugas seperti itu?

Bisakah Anda memiliki 2 kondisi dalam loop sementara?

Menggunakan beberapa kondisi . Catatan. Kondisi AND harus dipenuhi agar loop dapat berjalan. Namun, jika salah satu kondisi di sisi OR operator menghasilkan true , loop akan berjalan. the while loop has two conditions, one using the AND operator and the other using the OR operator. Note: The AND condition must be fulfilled for the loop to run. However, if either of the conditions on the OR side of the operator returns true , the loop will run.

Bagaimana Anda menggunakan banyak while loop di Python?

Di sini saya memiliki contoh skrip di mana kita ingin while loop dijalankan 5 kali. Jadi kita mengambil variabel " count " dan menetapkan nilainya sebagai 1. Selanjutnya kita berikan kondisi dengan perulangan while untuk menjalankan perulangan selama nilai count kurang dari atau sama dengan 5 . Ini adalah loop akan berjalan tepat 5 kali.

Bisakah Anda melakukan while loop dengan berbagai kondisi Python?

Gunakan atau dan dan untuk membuat perulangan while dengan berbagai kondisi . Gunakan atau untuk mensyaratkan bahwa salah satu dari setidaknya dua syarat harus dipenuhi agar perulangan while dapat dijalankan.

Bagaimana Anda menempatkan banyak baris di Python?

Dua solusi yang dapat kita gunakan untuk menambahkan komentar multibaris adalah menambahkan # untuk setiap baris komentar atau menggunakan string yang dikutip tiga kali.