Python에서 "while True"는 무엇을 의미합니까?


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

무엇이 사실입니까?

나는 'true 동안'은 속기라고 생각하지만 무엇을 위해? 변수 'hand'에 값이 할당되는 동안? 그리고 변수 'hand'에 값이 할당되지 않으면 어떻게 될까요?


1
True는 1에 대한 일종의 별칭입니다. 제가 요청한 일종의 관련 질문은 여기에서 찾을 수 있습니다. stackoverflow.com/questions/885908/…
Copas

17
@Copas True1. 많은 언어 1에서 부울 컨텍스트에서 진실을 평가합니다.
adamse

2
adamse :에서 일부 파이썬의 버전 True에 대한 별명이었다 1아니? 예, 최신 버전의 Python에는 실제 부울 유형이 있습니다.
Ken

1
@adamse, @Ken : What 's new in Python 2.3-PEP 285에서 인용 : " Python 2.3에 Boolean 유형이 추가되었습니다. __builtin__모듈에 True 및 False 상수 두 개가 추가되었습니다 . (True 및 False 상수가 빌드 된 -ins in Python 2.2.1, 그러나 2.2.1 버전은 단순히 1과 0의 정수 값으로 설정되며 다른 유형이 아닙니다.) ".
Cristian Ciupitu

@adamse 파이썬에서는 그렇지 않지만 많은 언어에서는 그렇습니다. 더 일반적인 질문이라고 생각했습니다. Baba가 "True is an alias of a 1"라고 말했듯이 초보자에게 말하는 것은 완벽하게 정확합니다. 저는 Python True가 1의 별칭이 아니라는 데 동의합니다. 그렇다고 말하지 않았습니다.
Copas

답변:


108

while True영원히 루프를 의미합니다. 이 while명령문은 표현식을 가져 와서 루프 본문을 실행하고 표현식이 (부울) "true"로 평가됩니다. True항상 부울 "true"로 평가되어 루프 본문을 무기한 실행합니다. 결국 익숙해지는 관용구입니다! 여러분이 접하게 될 대부분의 언어에는 동등한 관용구가 있습니다.

대부분의 언어에는 일반적으로 루프를 일찍 종료하는 메커니즘이 있습니다. Python breakcmd == 'e'경우 질문의 샘플 의 경우 진술입니다 .


9
명확성을 위해 대부분의 언어에서 while (true == true) 할 수 있다고 생각합니다. 이것은 새로운 프로그래머가 그 뒤에있는 논리를 더 잘 이해하는 데 도움이 될 수 있습니다.
Chris

9
크리스, while True==True못 생겼어. 그것은 못생긴 것입니다 while 'apples'!='oranges':)
dheerosaur

34
내 선생님 중 한 명이 지적했듯이 true==true개선 이라고 생각 하면 어디에서 멈추나요? (true==true)==true더 나아 지지 않을까요 ?
Ken

10
@Chris, 결국 논리 표현식 대신 부울 값이나 변수를 사용할 수 있으며 "결국"은 가능한 한 빨리 사용해야한다는 사실을 알아야합니다.
Mark Ransom

6
@Mark는 결국 새로운 프로그래머가 부울 논리 등을 이해하는 데 약간의 추가 도움이 필요하다는 사실을 알아야합니다. 내가하려는 것은 그가 이해하도록 돕는 것뿐이었습니다.
Chris

53

내 질문 : 무엇이 사실입니까?

동안 True입니다 True.

while 루프는 조건식이로 평가되는 한 실행됩니다 True.

True항상로 평가 되기 때문에 True루프는 루프 returns 또는 breaks 내에 무언가가있을 때까지 무한히 실행됩니다 .


4
이것은 파이썬입니다. 괄호 안의 표현이 없습니다; P
Mike Axiak

헤, 좋은 지적입니다. 나는 파이썬으로 생각하는 데 익숙하지 않습니다. 원하는 경우 괄호를 넣을 있다고 생각하지만 ...
Dagg Nabbit

10

내 질문 : 무엇이 사실입니까?

while 문의 () 안에있는 모든 것은 부울로 평가됩니다. 참 또는 거짓으로 변환됨을 의미합니다.

성명에서 고려 while(6 > 5)

먼저 다음과 같은 표현 6 > 5을 평가합니다.truewhile(true)

FALSE, 0, 빈 문자열 "", null 또는 정의되지 않은 모든 항목은 true로 평가 될 수 있습니다.

내가 처음 프로그래밍을 시작했을 때 나는 같은 if(foo == true)일을했지만, 그것이 사실상 if(foo).

그래서 당신이 while(true)그와 같은 말을 할 때while(true == true)

그래서 당신의 질문에 대답하기 위해 : 참은 참입니다.


10

while Trueis true-즉 항상. 이것은 무한 루프입니다

여기서 중요한 차이점 True은 특정 유형의 상수 값을 나타내는 언어의 키워드와 수학적 개념 인 'true'입니다.


기술적으로 말해서 당신은 틀 렸습니다. 구조는 "참은 거짓이 아니지만"를 의미합니다. while(5)적절한 부울이없는 C로 작성하면 구별을 볼 수 있습니다 . 그것은 의미가 아니라 while(5==1), 의미 while(5!=0)합니다.
Blindy

2
'무한 루프'라고 말하는 것이 더 적절하다고 생각합니다. 루프가 어떤 시점에서 중단 또는 복귀에 의해 중단된다는 가정이 있어야합니다. 진정한 '무한'루프는 프로그래머 오류입니다. '무한 루프'는 설계에 의해 만들어집니다.
Dagg Nabbit

3
@Blindy : 자동 캐스팅을 사용하는 약한 유형의 언어에서 x 'evaluates to'y ...라고 말할 수 있습니다.
Dagg Nabbit

@Blindy while(5)는 C에서 while 5이 true가 아니라 true또는 0완전히 다른 것을 의미합니다. 5항상 사실입니다. 일반적으로 언어에 키워드가있는 경우 true해당 상수는 true이지만 유일한 상수는 아닙니다. 마찬가지로 false반드시 false 인 유일한 값은 아닙니다.
Chris Dodd

4

이 맥락에서 나는 그것이 다음과 같이 해석 될 수 있다고 생각한다.

do
...
while cmd  != 'e' 

3

True항상 True이므로 while True영원히 반복됩니다.

while키워드는 식을 소요하고 표현식이 true 인 동안 루프. True항상 참인 표현입니다.

명확한 예로서 다음을 고려하십시오.

a = 1
result = a == 1

여기에, a == 1반환 True, 따라서 넣어 Trueresult. 그 후,

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

다음과 같습니다.

while True:
  ...

루프 a내부의 값을 변경하지 않는 경우 while.


1
True아니다 항상 True 예를 들어, True = False. ;-)
jathanism

1
@ jathanism- 진실은 진실, 계산의 끝까지.
dheerosaur

3

공식적으로 는 bool 유형 True의 Python 내장 상수 입니다 .

부울 유형에 부울 연산 을 사용하고 (예를 들어 대화 형 파이썬 프롬프트에서) 숫자 를 부울 유형으로 변환 할 수 있습니다.

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

그리고 잠재적으로 여러분이 보는 것과 파이썬 컴파일러가 보는 것과 관련된 "가지 잡음"이 있습니다.

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

파이썬이 bool 유형을 내부적으로 저장하는 방법에 대한 힌트로 bool 유형을 정수로 변환 할 수 있으며 True는 1과 False 0이됩니다.

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

실제로 Python bool유형은 Python 유형의 하위 클래스입니다 int.

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

질문에서 더 중요한 부분은 "무엇입니까 while True?"입니다. '참은 무엇인가'이고 중요한 결과 : 거짓이란 무엇인가?

먼저, 배우는 모든 언어에 대해 언어가 '참'과 '거짓'으로 간주하는 것을 배우십시오. 예를 들어 Python은 Truth를 Perl Truth 와 약간 다르게 간주 합니다. 다른 언어는 참 / 거짓 개념약간 다릅니다 . 나중에 많은 골칫거리를 피하기 위해 다른 작업 및 흐름 제어에 대해 귀하의 언어가 참과 거짓으로 간주하는 것을 파악하십시오!

원하는 것을 찾을 때까지 무언가를 처리하려는 알고리즘이 많이 있습니다. 따라서 무한 루프 또는 무한 루프입니다. 각 언어는 이러한 구조에 대해 고유 한 관용구를 갖는 경향이 있습니다. 다음은 Perl에서도 작동하는 일반적인 C 무한 루프입니다.

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

/* or */

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

while True:형식은 파이썬에서 루프를 벗어나는 방법이있는 무한 루프에 대해 일반적입니다. 루프에서 벗어나는 방법을 이해하려면 Python 흐름 제어 를 배우십시오 while True. 예를 들어 대부분의 언어와 달리 Python은 else루프에 절을 가질 수 있습니다 . 마지막 링크에 예가 있습니다.


1

while루프 조건부 인수 (일반적 true 또는 false 인, 또는 해석 할 수있는 무언가를 의미) 걸리지 만 상태 수율하면서 실행한다 True.

에 관해서는 while True? 음, 가장 단순한 진정한 조건은 True그 자체입니다! 따라서 이것은 무한 루프이며 일반적으로 많은 루프가 필요한 게임에서 좋습니다. (하지만 내 관점에서 더 일반적인 것은 일종의 "done"변수를 false로 설정 한 다음이를 true로 설정하여 게임을 종료하는 것입니다. 루프는 더 비슷하게 보입니다 while not done:.)


1

일부 언어에서 True는 번호의 별칭입니다. 부울 논리 에 대해 자세히 읽어 보면 그 이유를 더 알 수 있습니다 .



0

while루프는 조건이 거짓이 될 때까지 계속 반복됩니다. 예를 들어 (의사 코드) :

i = 0
while i < 10
  i++

루프가 반복 i될 때마다 10이 될 때까지 1 씩 증가합니다.이 시점에서 조건 i < 10은 더 이상 참이 아니고 루프가 완료됩니다.

의 조건 while True이 명시적이고 항상 true이므로 루프는 종료되지 않습니다 (일반적으로 break루프 본문 내에서 와 같은 구조에 의해 다른 방법으로 분리 될 때까지 ).


0

True보다 빠른 평가는 없습니다 True. 그래서 등 while True대신 사용하면 좋습니다 while 1==1.


0
while True:
    ...

무한 루프를 의미합니다.

while 문은 종종 유한 루프에 사용됩니다. 그러나 상수 'True'를 사용하면 루프를 중단하지 않는 한 루프를 제어 할 필요없이 (예 : 반복 내부에 부울 값 설정) while 문이 반복됩니다.

사실로

True == (1 == 1)

0

True는 무한 루프를 의미하지만 일반적으로 긴 프로세스에서 사용됩니다. 당신은 바꿀 수 있습니다

while True:

while 1:

0

이 답변의 대부분은 다양한 정도로 정확하지만 내가 원하는만큼 간결하지는 않습니다.

간단히 말하면, 사용은 while True:당신이 명시 적으로 사용하는 탈출 할 때까지 계속 실행됩니다 루프 실행 단지 방법 break또는 return. True는 항상 True로 평가되기 때문에 원할 때 루프를 강제 종료해야합니다.

while True:
    # do stuff

    if some_condition:
        break

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

일반적으로 루프는 while 조건이 거짓이거나 미리 정의 된 끝점에 도달 할 때까지 실행되도록 설정됩니다.

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

이 두 코드 청크는 동일한 작업을 효과적으로 수행합니다.

루프가 평가하는 조건이 사용자 입력 값과 같이 컨트롤에 직접 포함되지 않은 값일 수있는 경우 일반적으로 데이터의 유효성을 검사하고 루프를 명시 적으로 중단해야하므로 두 방법 중 하나를 사용하여 수행하는 것이 좋습니다. .

while True당신이 알고 있기 때문에 형식은 더 파이썬입니다 break반면, 그 정확한 시점에서 루프를 깨는 do_next = False의 다음 평가하기 전에 더 많은 물건을 할 수 있었다 do_next.


-4

반대가 표시 될 때까지 모든 것이 True로 간주 될 수 있습니다. 이것이 이중성이 작동하는 방식입니다. 반대를 비교하는 방법입니다. 검은 색은 흰색이 될 때까지 True 일 수 있으며이 지점에서 False입니다. 검은 색은 흰색이 될 때까지 False 일 수도 있습니다. 그것은 상태가 아니라 반대 상태의 비교입니다. 둘 중 하나가 참이면 다른 하나는 잘못된 것입니다. True는 그것이 정확하거나 받아 들여지는 것을 의미하지 않습니다. 반대가 항상 False 인 상태입니다. 이중성입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.