Apa arti "while True" di Python?

91
def play_game(word_list):
    hand = deal_hand(HAND_SIZE) # random init
    while True:
        cmd = raw_input('Enter n to deal a new hand, r to replay the last hand, or e to end game: ')
        if cmd == 'n':
            hand = deal_hand(HAND_SIZE)
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'r':
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'e':
            break
        else:
            print "Invalid command."

Sedangkan APA yang Benar?

Saya rasa mengatakan 'sementara benar' itu singkat, tapi untuk apa? Sementara variabel 'tangan' diberi nilai? Dan bagaimana jika variabel 'tangan' tidak diberi nilai?

Baba
sumber
1
True adalah semacam alias untuk 1. Semacam pertanyaan terkait yang saya ajukan dapat ditemukan di sini stackoverflow.com/questions/885908/…
Copas
17
@ Copas, Truebukan alias untuk 1. Meskipun dalam banyak bahasa 1mengevaluasi kebenaran dalam konteks boolean.
adamse
2
adamse: Dalam beberapa versi Python, Truetelah menjadi alias untuk 1, bukan? Padahal ya, di versi terbaru Python ada tipe boolean yang sebenarnya.
Ken
1
@adamse, @Ken: mengutip dari Apa yang baru di Python 2.3 - PEP 285 : "Jenis Boolean ditambahkan ke Python 2.3. Dua konstanta baru ditambahkan ke __builtin__modul, True dan False. (Konstanta True dan False ditambahkan ke -ins dalam Python 2.2.1, tetapi versi 2.2.1 hanya disetel ke nilai integer 1 dan 0 dan bukan tipe yang berbeda.) ".
Cristian Ciupitu
@adamse Dalam python tidak, namun dalam banyak bahasa memang demikian. Saya menganggapnya sebagai pertanyaan yang lebih umum. Berbicara kepada seorang pemula saat Baba berkata bahwa dia "Benar adalah semacam alias untuk 1" sangat akurat. Saya setuju dengan Python True bukanlah alias untuk 1. Saya tidak mengatakannya.
Copas

Jawaban:

108

while TrueBerarti loop selamanya. The whilePernyataan mengambil ekspresi dan mengeksekusi tubuh loop sementara mengevaluasi ekspresi (boolean) "benar".Trueselalu mengevaluasi ke boolean "true" dan dengan demikian mengeksekusi badan perulangan tanpa batas. Ini adalah ungkapan yang akhirnya akan Anda terbiasa! Sebagian besar bahasa yang mungkin Anda temui memiliki idiom yang setara.

Perhatikan bahwa kebanyakan bahasa biasanya memiliki beberapa mekanisme untuk keluar dari loop lebih awal. Dalam kasus Python, ini adalah breakpernyataan dalam cmd == 'e'kasus sampel dalam pertanyaan Anda.

Richard Cook
sumber
9
Demi kejelasan, saya yakin Anda dapat melakukannya sementara (true == true) di sebagian besar bahasa. Ini dapat membantu programmer baru untuk lebih memahami logika di baliknya.
Chris
9
Chris, while True==Trueitu jelek. Ini sama jeleknya dengan while 'apples'!='oranges':)
dheerosaurus
34
Seperti yang ditunjukkan oleh salah satu guru saya: jika menurut Anda true==truemerupakan peningkatan, di mana Anda berhenti? Bukankah (true==true)==truelebih baik?
Ken
10
@ Chris, pada akhirnya orang harus menyadari bahwa nilai atau variabel boolean dapat digunakan sebagai pengganti ekspresi logika, dan "pada akhirnya" harus digunakan sesegera mungkin.
Mark Ransom
6
@Mark pada akhirnya orang harus sadar bahwa terkadang dibutuhkan sedikit bantuan tambahan untuk membuat programmer baru memahami logika boolean dan sejenisnya. Yang saya coba lakukan hanyalah membantunya memahaminya.
Chris
53

pertanyaan saya: sementara APA itu Benar?

Saat Trueini True.

Perulangan while akan berjalan selama ekspresi kondisional terevaluasi True.

Karena Trueselalu mengevaluasi ke True, loop akan berjalan tanpa batas, sampai sesuatu di dalam loop returns atau breaks.

Dagg Nabbit
sumber
4
Ini python. Tidak ada ekspresi dalam tanda kurung; P
Mike Axiak
heh, poin yang bagus. Saya tidak terbiasa berpikir dengan Python. Meskipun saya kira Anda bisa meletakkan parens di sekitarnya jika Anda mau ...
Dagg Nabbit
10

pertanyaan saya: sementara APA itu Benar?

Segala sesuatu di dalam () pernyataan while akan dievaluasi sebagai boolean. Artinya itu akan diubah menjadi benar atau salah.

Pertimbangkan dalam pernyataan itu while(6 > 5)

Ini pertama-tama mengevaluasi ekspresi 6 > 5yang truesama dengan ucapanwhile(true)

Apa pun yang tidak FALSE, 0, string kosong "", null, atau tidak ditentukan kemungkinan akan dievaluasi menjadi benar.

Ketika saya pertama kali memulai pemrograman, saya biasa melakukan hal-hal seperti if(foo == true), saya tidak menyadari bahwa itu hampir sama dengan if(foo).

Jadi ketika Anda mengatakan while(true)itu seperti mengatakanwhile(true == true)

Jadi untuk menjawab pertanyaan Anda: While TRUE is True.

JD Isaacks
sumber
10

sementara True itu benar - yaitu selalu. Ini adalah putaran tak terbatas

Perhatikan perbedaan penting di sini antara Trueyang merupakan kata kunci dalam bahasa yang menunjukkan nilai konstan dari jenis tertentu, dan 'benar' yang merupakan konsep matematika.

Chris Dodd
sumber
Secara teknis, Anda salah. Konstruknya berarti "sementara benar tidak salah". Anda dapat melihat perbedaannya jika Anda menulis while(5)dalam C, di mana tidak ada boolean yang tepat. Itu tidak berarti while(5==1), itu berarti while(5!=0).
Blindy
2
Saya pikir lebih tepat untuk mengatakan 'indefinite loop;' Asumsinya adalah bahwa loop akan diinterupsi oleh break atau return di beberapa titik. Loop yang benar-benar 'tak terbatas' adalah kesalahan programmer; 'loop tak terbatas' dibuat dengan desain.
Dagg Nabbit
3
@Blindy: dalam bahasa yang diketik lemah dengan transmisi otomatis, Anda dapat mengatakan x 'mengevaluasi ke' y ... bukan berarti 5 tidak sepenuhnya sama dengan 0, sedangkan 5 secara longgar sama dengan True.
Dagg Nabbit
@Blindy, while(5)dalam C berarti while 5itu benar, bukan sementara its trueor 0, yang merupakan sesuatu yang sama sekali berbeda. 5selalu benar. Secara umum, ketika bahasa memiliki kata kunci true, itu adalah konstanta yang benar, tetapi bukan satu-satunya konstanta yang benar. Demikian pula falsebelum tentu satu-satunya nilai yang salah.
Chris Dodd
4

Dalam konteks ini, saya kira itu bisa diartikan sebagai

do
...
while cmd  != 'e' 
Paul Butcher
sumber
3

Trueselalu Truebegituwhile True juga loop selamanya.

Kata whilekunci mengambil ekspresi, dan mengulang saat ekspresi benar.Trueadalah ungkapan yang selalu benar.

Sebagai contoh klarifikasi, pertimbangkan hal berikut:

a = 1
result = a == 1

Di sini, a == 1akan kembali True, dan karenanya dimasukkan Trueke dalam result. Karenanya,

a = 1
while a == 1:
  ...

setara dengan:

while True:
  ...

asalkan Anda tidak mengubah nilai ainside the whileloop.

Håvard S
sumber
1
Truetidak selalu True , mis True = False. ;-)
jatanisme
1
@ Jathanism- Kebenaran adalah kebenaran, Sampai akhir perhitungan.
dheerosaur
3

Secara formal, Trueadalah Python built-in konstan dari bool tipe.

Anda dapat menggunakan operasi Boolean pada tipe bool (pada prompt python interaktif misalnya) dan mengonversi angka menjadi tipe bool:

>>> print not True
False
>>> print not False
True
>>> print True or False
True
>>> print True and False
False
>>> a=bool(9)
>>> print a
True
>>> b=bool(0)
>>> print b
False
>>> b=bool(0.000000000000000000000000000000000001)
>>> print b
True

Dan ada "gotcha's" yang berpotensi dengan apa yang Anda lihat dan apa yang dilihat compiler Python:

>>> n=0
>>> print bool(n)
False
>>> n='0'
>>> print bool(n)
True
>>> n=0.0
>>> print bool(n)
False
>>> n="0.0"
>>> print bool(n)
True

Sebagai petunjuk tentang bagaimana Python menyimpan tipe bool secara internal, Anda dapat mentransmisikan tipe bool menjadi integer dan True akan menjadi 1 dan False 0:

>>> print True+0
1
>>> print True+1
2
>>> print False+0
0
>>> print False+1
1

Sebenarnya, booltipe Python adalah subclass dari inttipe Python :

>>> type(True)
<type 'bool'>
>>> isinstance(True, int)
True

Bagian terpenting dari pertanyaan Anda adalah "Apa itu while True?" itu 'apa yang Benar', dan akibat wajar yang penting: Apa yang salah?

Pertama, untuk setiap bahasa yang Anda pelajari, pelajari apa yang dianggap bahasa 'benar' dan 'salah'. Python menganggap Truth sedikit berbeda dari Perl Truth misalnya. Bahasa lain memiliki konsep yang sedikit berbeda tentang benar / salah. Ketahui apa yang menurut bahasa Anda Benar dan Salah untuk operasi yang berbeda dan kontrol aliran untuk menghindari banyak sakit kepala nantinya!

Ada banyak algoritma di mana Anda ingin memproses sesuatu hingga Anda menemukan apa yang Anda cari. Karenanya loop tak terbatas atau loop tak tentu. Setiap bahasa cenderung memiliki idiom sendiri untuk konstruksi ini. Berikut adalah loop C tak terbatas yang umum, yang juga berfungsi untuk Perl:

for(;;) { /* loop until break */ }

/* or */

while (1) {
   return if (function(arg) > 3);
}

The while True:Bentuk umum di Python untuk loop yang tidak terbatas dengan beberapa cara melanggar keluar dari loop. Pelajari kontrol aliran Python untuk memahami bagaimana Anda keluar dari while Trueloop. Tidak seperti kebanyakan bahasa, misalnya, Python dapat memiliki elseklausa dalam satu putaran. Ada contoh di tautan terakhir.

dawg
sumber
1

Sebuah whilelingkaran membutuhkan argumen bersyarat (yang berarti sesuatu yang umumnya benar atau salah, atau dapat diartikan seperti itu), dan hanya mengeksekusi sedangkan hasil kondisi True.

Untuk apa while True? Nah, syarat sejati yang paling sederhana adalah Truedirinya sendiri! Jadi ini adalah putaran tak terbatas, biasanya bagus dalam permainan yang membutuhkan banyak perulangan. (Lebih umum dari perspektif saya, bagaimanapun, adalah untuk mengatur semacam variabel "selesai" ke salah dan kemudian membuatnya benar untuk mengakhiri permainan, dan loop akan terlihat lebih seperti while not done:atau apa pun.)

Platinum Azure
sumber
1

Dalam beberapa bahasa, True hanya dan alias untuk nomor tersebut. Anda dapat mempelajari lebih lanjut mengapa hal ini terjadi dengan membaca lebih lanjut tentang logika boolean .

Copas
sumber
1

Untuk menjawab pertanyaan Anda secara langsung: sedangkan kondisi loop adalah True. Yang selalu ada, dalam sedikit kode ini.

Marius Gedminas
sumber
0

whileloop terus mengulang sampai kondisinya salah. Misalnya (pseudocode):

i = 0
while i < 10
  i++

Dengan setiap iterasi loop, iakan bertambah 1, hingga menjadi 10. Pada titik itu, kondisi i < 10tidak lagi benar, dan loop akan selesai.

Karena kondisi di while Truesecara eksplisit dan selalu true, pengulangan tidak akan pernah berakhir (hingga dipecah dengan cara lain, biasanya dengan konstruksi seperti breakdi dalam badan perulangan).

Daniel Vandersluis
sumber
0

Tidak ada yang mengevaluasi Truelebih cepat dari True. Jadi, ada baiknya jika Anda menggunakan, while Truebukan while 1==1dll.

dheerosaurus
sumber
0
while True:
    ...

berarti loop tak terbatas.

Pernyataan while sering digunakan untuk perulangan terbatas. Tetapi menggunakan konstanta 'True' menjamin pengulangan pernyataan while tanpa perlu mengontrol perulangan (misalnya menyetel nilai boolean di dalam iterasi), kecuali jika Anda ingin memutusnya.

Faktanya

True == (1 == 1)
rampok
sumber
0

Sedangkan True mean infinite loop, ini biasanya digunakan dengan proses yang panjang. kamu bisa berubah

while True:

dengan

while 1:
Yuda Prawira
sumber
0

Meskipun sebagian besar jawaban ini benar untuk berbagai tingkat, tidak ada yang sesingkat yang saya inginkan.

Sederhananya, menggunakan while True:hanyalah cara menjalankan loop yang akan terus berjalan sampai Anda secara eksplisit keluar dari loop menggunakan breakatau return. Karena True akan selalu bernilai True, Anda harus memaksa pengulangan untuk mengakhiri saat Anda menginginkannya.

while True:
    # do stuff

    if some_condition:
        break

    # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True

Sementara biasanya loop akan diatur untuk berjalan sampai kondisi while salah, atau mencapai titik akhir yang telah ditentukan:

do_next = True

while do_next:

    # do stuff

    if some_condition:
        do_next = False

    # do more stuff - code here WILL execute even when `if some_condition:` evaluates to True

Kedua potongan kode tersebut secara efektif melakukan hal yang sama

Jika kondisi yang dievaluasi oleh loop Anda mungkin merupakan nilai yang tidak secara langsung ada dalam kontrol Anda, seperti nilai input pengguna, maka validasi data dan secara eksplisit keluar dari loop biasanya diperlukan, jadi Anda sebaiknya melakukannya dengan salah satu metode .

The while TrueFormat lebih pythonic karena Anda tahu bahwa breakadalah melanggar loop pada titik yang tepat, sedangkan do_next = Falsebisa melakukan lebih banyak barang sebelum evaluasi berikutnya do_next.

Eric Ressler
sumber
-4

Apa pun dapat dianggap Benar sampai lawannya ditampilkan. Inilah cara kerja dualitas. Ini adalah cara membandingkan lawan. Hitam bisa Benar sampai putih di mana titik itu Salah. Hitam juga bisa Salah sampai putih di mana titik itu Benar. Ini bukanlah suatu keadaan tetapi perbandingan dari keadaan yang berlawanan. Jika salah satunya Benar, maka yang lainnya salah. Benar tidak berarti benar atau diterima. Ini adalah keadaan di mana kebalikannya selalu Salah. Itu adalah dualitas.

emorphus
sumber