“While True” trong Python có nghĩa là gì?


90
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."

Trong khi SỰ THẬT LÀ GÌ?

Tôi nghĩ rằng nói 'trong khi đúng' là viết tắt, nhưng để làm gì? Trong khi biến 'tay' đang được gán giá trị? Và điều gì sẽ xảy ra nếu biến 'tay' không được gán giá trị?


1
Đúng là loại một bí danh cho 1. Một loại câu hỏi có liên quan tôi hỏi có thể được tìm thấy ở đây stackoverflow.com/questions/885908/...
Copas

17
@Copas, Truekhông phải là bí danh cho 1. Mặc dù trong nhiều ngôn ngữ 1đánh giá sự thật trong ngữ cảnh boolean.
adamse 20/09/10

2
adamse: Trong một số phiên bản Python, Trueđã là một bí danh cho 1, phải không? Mặc dù có, trong các phiên bản Python mới nhất có một kiểu boolean thực.
Ken

1
@adamse, @Ken: trích dẫn từ Có gì mới trong Python 2.3 - PEP 285 : "Một kiểu Boolean đã được thêm vào Python 2.3. Hai hằng số mới đã được thêm vào __builtin__mô-đun, True và False. (Các hằng số Đúng và Sai đã được thêm vào bản dựng -ins trong Python 2.2.1, nhưng các phiên bản 2.2.1 chỉ được đặt thành các giá trị nguyên là 1 và 0 và không phải là một kiểu khác.) ".
Cristian Ciupitu,

@adamse Trong python thì không, tuy nhiên ở nhiều ngôn ngữ thì không. Tôi coi đó là một câu hỏi tổng quát hơn. Nói với một người mới bắt đầu như Baba nói rằng anh ấy / cô ấy là "True is a kind of a alias for 1" là hoàn toàn chính xác. Tôi đồng ý bằng Python True không phải là bí danh cho 1. Tôi đã không nói là như vậy.
Copas

Câu trả lời:


108

while Truenghĩa là vòng lặp mãi mãi. Câu whilelệnh nhận một biểu thức và thực thi phần thân của vòng lặp trong khi biểu thức đánh giá là (boolean) "true". Trueluôn đánh giá là boolean "true" và do đó thực thi thân vòng lặp vô thời hạn. Đó là một thành ngữ mà cuối cùng bạn sẽ quen! Hầu hết các ngôn ngữ bạn có thể gặp phải đều có các thành ngữ tương đương.

Lưu ý rằng hầu hết các ngôn ngữ thường có một số cơ chế để thoát khỏi vòng lặp sớm. Trong trường hợp của Python, đó là breakcâu lệnh trong cmd == 'e'trường hợp mẫu trong câu hỏi của bạn.


9
Vì lợi ích rõ ràng, tôi tin rằng bạn có thể làm trong khi (true == true) ở hầu hết các ngôn ngữ. Điều này có thể giúp một lập trình viên mới hiểu rõ hơn logic đằng sau nó.
Chris

9
Chris, while True==Truethật xấu xí. Nó là như xấu xí như while 'apples'!='oranges':)
dheerosaur

34
Như một trong những giáo viên của tôi đã chỉ ra: nếu bạn nghĩ true==truelà một sự cải tiến, bạn sẽ dừng lại ở đâu? Sẽ không (true==true)==truetốt hơn?
Ken

10
@Chris, cuối cùng người ta nên biết rằng giá trị hoặc biến boolean có thể được sử dụng thay cho biểu thức logic, và "cuối cùng" phải càng sớm càng tốt.
Mark Ransom,

6
@Mark cuối cùng người ta nên biết rằng đôi khi cần thêm một chút trợ giúp để một lập trình viên mới hiểu được logic boolean và những thứ tương tự. Tất cả những gì tôi cố gắng làm là giúp anh ấy hiểu được điều đó.
Chris

53

câu hỏi của tôi: trong khi CÁI GÌ LÀ Đúng?

Trong khi TrueTrue.

Vòng lặp while sẽ chạy miễn là biểu thức điều kiện được đánh giá là True.

Trueluôn đánh giá là True, vòng lặp sẽ chạy vô thời hạn, cho đến khi thứ gì đó trong vòng lặp returns hoặc breaks.


4
Đây là trăn. Không có biểu hiện trong ngoặc đơn; P
Mike Axiak

heh, điểm tốt. Tôi không quen suy nghĩ bằng Python. Mặc dù tôi giả sử bạn có thể đặt dấu ngoặc xung quanh nó nếu bạn muốn ...
Dagg Nabbit

10

câu hỏi của tôi: trong khi CÁI GÌ LÀ Đúng?

Mọi thứ bên trong () của câu lệnh while sẽ được đánh giá là một boolean. Có nghĩa là nó được chuyển đổi thành true hoặc false.

Xem xét trong tuyên bố while(6 > 5)

Nó đầu tiên đánh giá sự biểu hiện 6 > 5đó là truenhư vậy là giống như nóiwhile(true)

Bất kỳ thứ gì không phải là FALSE, 0, chuỗi trống "", null hoặc không xác định đều có khả năng được đánh giá là true.

Khi tôi lần đầu tiên bắt đầu lập trình, tôi thường làm những thứ như thế if(foo == true), tôi không nhận ra rằng điều đó gần giống như vậy if(foo).

Vì vậy, khi bạn nói while(true)nó giống như đang nóiwhile(true == true)

Vì vậy, để trả lời cho bạn câu hỏi: Trong khi ĐÚNG là Đúng.


10

trong khi Truelà đúng - tức là luôn luôn. Đây là một vòng lặp vô hạn

Lưu ý sự khác biệt quan trọng ở đây giữa Truetừ khóa trong ngôn ngữ biểu thị giá trị không đổi của một kiểu cụ thể và 'true' là một khái niệm toán học.


Về mặt kỹ thuật, bạn đã nhầm. Cấu trúc có nghĩa là "trong khi đúng nhưng không sai". Bạn có thể thấy sự khác biệt nếu bạn viết while(5)bằng C, nơi không có boolean thích hợp. Nó không có nghĩa while(5==1), nó có nghĩa là while(5!=0).
Blindy

2
Tôi nghĩ thích hợp hơn khi nói 'vòng lặp không xác định;' giả thiết phải là vòng lặp sẽ bị gián đoạn bởi một break hoặc trở lại vào một thời điểm nào đó. Thực sự các vòng lặp 'vô hạn' là lỗi của lập trình viên; 'vòng lặp không xác định' được thiết kế tạo ra.
Dagg Nabbit,

3
@Blindy: trong một ngôn ngữ được gõ yếu với tính năng tự động truyền, bạn có thể nói x 'đánh giá thành' y ... không phải trong khi 5 không hoàn toàn bằng 0, mà là 5 lỏng lẻo bằng Đúng.
Dagg Nabbit,

@Blindy, while(5)trong C có nghĩa là while 5là true, không phải while của nó truehoặc 0, là một cái gì đó hoàn toàn khác. 5luôn luôn đúng. Nói chung, khi các ngôn ngữ có một từ khóa true, một hằng số của nó là đúng, nhưng không phải là hằng số duy nhất đúng. Tương tự falsekhông nhất thiết là giá trị duy nhất là sai.
Chris Dodd

4

Trong bối cảnh này, tôi cho rằng nó có thể được hiểu là

do
...
while cmd  != 'e' 

3

Trueluôn luôn True, vì vậy while Truesẽ lặp lại mãi mãi.

Các whiletừ khóa có một biểu thức, và vòng lặp trong khi expression còn thoả mãn. Truelà một biểu thức luôn đúng.

Như một ví dụ có thể làm rõ, hãy xem xét những điều sau:

a = 1
result = a == 1

Ở đây, a == 1sẽ trở lại True, và do đó được đưa Truevào result. Vì thế,

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

tương đương với:

while True:
  ...

miễn là bạn không thay đổi giá trị abên trong whilevòng lặp.


1
Truekhông phải luôn luôn True , ví dụ True = False. ;-)
jathanism 20/09/10

1
@ jathanism- Sự thật là sự thật, Suy cho cùng.
dheerosaur,

3

Về mặt hình thức, Truelà một hằng số tích hợp sẵn trong Python của kiểu bool .

Bạn có thể sử dụng các phép toán Boolean trên các kiểu bool (ví dụ: tại dấu nhắc python tương tác) và chuyển đổi số thành kiểu 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

Và có khả năng "gotcha's" với những gì bạn thấy và những gì trình biên dịch Python thấy:

>>> 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

Như một gợi ý về cách Python lưu trữ các loại bool bên trong, bạn có thể ép kiểu bool thành số nguyên và True sẽ là 1 và False 0:

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

Trên thực tế, boolkiểu Python là một lớp con của kiểu Python int:

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

Phần quan trọng hơn trong câu hỏi của bạn là "Cái gì while True?" là 'True là gì', và một hệ quả quan trọng: Sai là gì?

Đầu tiên, đối với mọi ngôn ngữ bạn đang học, hãy học những gì mà ngôn ngữ đó coi là 'trung thực' và 'giả dối'. Ví dụ, Python coi Truth hơi khác với Perl Truth . Các ngôn ngữ khác có các khái niệm hơi khác nhau về true / false. Biết ngôn ngữ của bạn được coi là Đúng và Sai cho các hoạt động khác nhau và kiểm soát luồng để tránh nhiều vấn đề đau đầu sau này!

Có rất nhiều thuật toán mà bạn muốn xử lý một thứ gì đó cho đến khi bạn tìm thấy thứ bạn đang tìm kiếm. Do đó vòng lặp vô hạn hoặc vòng lặp không xác định. Mỗi ngôn ngữ có xu hướng có thành ngữ riêng cho những cấu trúc này. Dưới đây là các vòng lặp vô hạn C phổ biến, cũng hoạt động cho Perl:

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

/* or */

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

Biểu while True:mẫu này phổ biến trong Python cho các vòng lặp không xác định với một số cách thoát ra khỏi vòng lặp. Tìm hiểu điều khiển luồng Python để hiểu cách bạn thoát ra khỏi while Truevòng lặp. Ví dụ, không giống như hầu hết các ngôn ngữ, Python có thể có một elsemệnh đề trên một vòng lặp. Có một ví dụ trong liên kết cuối cùng.


1

Một whilevòng lặp nhận một đối số có điều kiện (có nghĩa là một cái gì đó nói chung là đúng hoặc sai, hoặc có thể được hiểu như vậy) và chỉ thực thi khi điều kiện mang lại True.

Đối với while True? Chà, điều kiện đúng đơn giản nhất là Truechính nó! Vì vậy, đây là một vòng lặp vô hạn, thường tốt trong một trò chơi yêu cầu nhiều vòng lặp. (Tuy nhiên, phổ biến hơn theo quan điểm của tôi là đặt một số loại biến "hoàn thành" thành sai và sau đó biến điều đó thành đúng để kết thúc trò chơi và vòng lặp sẽ trông giống while not done:hoặc bất cứ điều gì.)


1

Trong một số ngôn ngữ True là chỉ và bí danh cho số. Bạn có thể tìm hiểu thêm lý do tại sao lại như vậy bằng cách đọc thêm về logic boolean .


1

Để trả lời câu hỏi của bạn trực tiếp: trong khi điều kiện vòng lặp là Đúng. Nó luôn như vậy, trong đoạn mã cụ thể này.


0

whilevòng lặp tiếp tục lặp cho đến khi điều kiện sai. Ví dụ (mã giả):

i = 0
while i < 10
  i++

Với mỗi lần lặp của vòng lặp, isẽ được tăng thêm 1, cho đến khi nó là 10. Tại thời điểm đó, điều kiện i < 10không còn đúng nữa và vòng lặp sẽ hoàn thành.

Vì điều kiện trong while Truelà rõ ràng và luôn luôn true, nên vòng lặp sẽ không bao giờ kết thúc (cho đến khi nó bị phá vỡ theo một số cách khác, thường là bởi một cấu trúc như breakbên trong thân vòng lặp).


0

Không có gì đánh giá Truenhanh hơnTrue . Vì vậy, sẽ tốt nếu bạn sử dụng while Truethay vì while 1==1v.v.


0
while True:
    ...

nghĩa là vòng lặp vô hạn.

Câu lệnh while thường được sử dụng cho một vòng lặp hữu hạn. Nhưng việc sử dụng hằng số 'True' đảm bảo sự lặp lại của câu lệnh while mà không cần điều khiển vòng lặp (đặt giá trị boolean bên trong vòng lặp chẳng hạn), trừ khi bạn muốn phá vỡ nó.

Trong thực tế

True == (1 == 1)

0

trong khi True có nghĩa là vòng lặp vô hạn, điều này thường được sử dụng bởi một quá trình dài. bạn có thể thay đổi

while True:

với

while 1:

0

Mặc dù hầu hết các câu trả lời này đều đúng ở các mức độ khác nhau, nhưng không câu trả lời nào ngắn gọn như tôi muốn.

Nói một cách đơn giản, sử dụng while True:chỉ là một cách chạy một vòng lặp sẽ tiếp tục chạy cho đến khi bạn thoát ra khỏi nó một cách rõ ràng bằng cách sử dụng breakhoặc return. Vì True sẽ luôn đánh giá thành True, bạn phải buộc kết thúc vòng lặp khi bạn muốn.

while True:
    # do stuff

    if some_condition:
        break

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

Mặc dù thông thường, một vòng lặp sẽ được đặt để chạy cho đến khi điều kiện while là sai hoặc nó đạt đến điểm cuối được xác định trước:

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

Hai đoạn mã đó thực hiện hiệu quả cùng một việc

Nếu điều kiện mà vòng lặp của bạn đánh giá có thể là một giá trị không trực tiếp trong kiểm soát của bạn, chẳng hạn như giá trị đầu vào của người dùng, thì việc xác thực dữ liệu và thoát khỏi vòng lặp một cách rõ ràng thường là cần thiết, vì vậy bạn muốn thực hiện bằng một trong hai phương pháp .

Các while Trueđịnh dạng là pythonic hơn vì bạn biết rằng breakđang phá vỡ vòng lặp tại điểm đó chính xác, trong khi do_next = Falsecó thể làm nhiều thứ hơn trước khi đánh giá tiếp theo của do_next.


-4

Bất cứ điều gì có thể được coi là Đúng cho đến khi điều ngược lại được trình bày. Đây là cách hoạt động của tính hai mặt. Đó là một cách mà các đối lập được so sánh. Màu đen có thể là Đúng cho đến khi màu trắng tại điểm đó là Sai. Màu đen cũng có thể là Sai cho đến khi màu trắng tại điểm đó là Đúng. Đó không phải là một trạng thái mà là sự so sánh các trạng thái đối lập nhau. Nếu một trong hai đúng thì cái kia sai. Đúng không có nghĩa là nó đúng hoặc được chấp nhận. Đó là một trạng thái mà điều ngược lại luôn là Sai. Đó là tính hai mặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.