루프가 멈추지 않는 이유를 이해하지 못함

아들 라이 압델 라자크

파이썬에서 while 루프를 사용하여 작업을 수행하고 있습니다. 그러나 루프는 내가 예상 할 때 (팀이 비어있을 때) 끝나지 않습니다. 다음은 코드입니다.

while teams:
    if scores[0]<scores[1]:
        losers.append(teams[0])
        teams.remove(teams[0])
        teams.remove(teams[0])
        scores.remove(scores[0])
        scores.remove(scores[0])
    if scores[0]>scores[1]:
        losers.append(teams[1])
        teams.remove(teams[0])
        teams.remove(teams[0])
        scores.remove(scores[0])
        scores.remove(scores[0])
return losers

코드를 테스트하는 동안 print 문을 입력하고 losers 배열에 예상 된 결과가 있음을 발견했습니다. 그러나 마지막 반복에서 scores [0]을 이미 삭제 한 경우 scores [0]을 확인하면서 중단 될 것으로 예상 한 후에도 루프가 계속됩니다. 루프의. 내 루프가 끝나지 않는 이유는 무엇입니까?

Mhawke

수정 사항은 두 번째 if문을 elif다음과 같이 변경하는 것입니다 .

while teams:
    if scores[0]<scores[1]:
        losers.append(teams[0])
        teams.remove(teams[0])
        teams.remove(teams[0])
        scores.remove(scores[0])
        scores.remove(scores[0])
    elif scores[0]>scores[1]:
        losers.append(teams[1])
        teams.remove(teams[0])
        teams.remove(teams[0])
        scores.remove(scores[0])
        scores.remove(scores[0])
return losers

문제는 teamsscores목록이 마지막 쌍에 도달하고 첫 번째 if명령문 의 조건 True인 경우 최종 쌍이 제거되고 두 목록이 모두 비어 있다는 것입니다.

그런 다음 두 번째 if조건이 평가되지만 scores목록은 이제 비어 if있으므로 ( 이전 일치에 따라) an IndexError이 발생합니다.

로 변경 elif하면 첫 번째 조건이 인 경우에만 두 번째 조건이 평가됩니다 False. 이제 루프는 반복 당 한 쌍의 팀 / 점수 만 처리하고 빈 테스트 team는 성공합니다.

다음과 같이 while 루프를 좀 더 명확하게 만들 수 있습니다.

while teams:
    if scores[0] < scores[1]:
        losers.append(teams[0])
    elif scores[0] > scores[1]:
        losers.append(teams[1])
    else:
        # this should never happen
        print('Error: drawn match detected!')
        losers.append(None)    # or simply ignore if that makes sense

    teams[:] = teams[2:]    # remove the first 2 items
    scores[:] = scores[2:]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

가치 오류가 발생하고 이유를 이해하지 못함

분류에서Dev

for 루프가 작동하지 않는 이유를 이해할 수 없습니다.

분류에서Dev

이 Lamda 함수가 어떻게 작동하는지 이해하지 못함

분류에서Dev

Dart forEach가 작동하는 방식을 이해하지 못함

분류에서Dev

루프가 작동하지 않는 이유는 무엇입니까? if & C 함수

분류에서Dev

끝없이 가고 멈추지 않는 CSS Transform 추가

분류에서Dev

숫자 합계 코드가 작동하지 않는 이유를 이해하지 못함

분류에서Dev

CS50 복수 – 후보자 수가 사용되는 이유를 이해하지 못함

분류에서Dev

Python-목록의 크기를 늘리면 for 루프의 길이 함수가 변경되지 않는 이유

분류에서Dev

이진 트리가 균형을 이루는 지 찾는 데있어 재귀를 이해하지 못함

분류에서Dev

이진 트리가 균형을 이루는 지 찾는 데있어 재귀를 이해하지 못함

분류에서Dev

이 루프가 널 포인터를 감지하지 못하는 이유는 무엇입니까?

분류에서Dev

이 while 루프가 멈추지 않고 계속 진행되는 이유는 무엇입니까?

분류에서Dev

For 루프가 두 번 이상 반복하지 못함

분류에서Dev

while 루프는 파이썬에서 멈추지 않습니다.

분류에서Dev

람다 함수가 루프의 마지막 단계 형태를 유지하는 이유는 무엇입니까?

분류에서Dev

루프가 멈추지 않고 오버플로로 이어집니다.

분류에서Dev

for 루프가 인식하지 못하는 이유 || 운영자?

분류에서Dev

권한 거부 오류가 발생하는 이유를 이해하지 못함

분류에서Dev

이 AngularJS가 $ inject 서비스없이 작동하는 이유를 이해하지 못함

분류에서Dev

이 C 루프를 이해하지 못함

분류에서Dev

이 for 루프가 멈추지 않는 이유

분류에서Dev

as3 hittestobject가 작동하지 않음, 이유를 이해하지 못함

분류에서Dev

누군가 내 for 루프가 잘못된 위치에서 멈추는 이유를 설명 할 수 있습니까?

분류에서Dev

파이썬 while 루프는 그래야만 멈추지 않습니다.

분류에서Dev

배열 추가를 이해하지 못함

분류에서Dev

while 루프가 멈추지 않고 if 문이 파이썬의 중첩 루프로 사용됨

분류에서Dev

replace () 메서드가 예상대로 작동하지 않는 이유를 이해하지 못합니다.

분류에서Dev

올바른 입력 후에도 루프가 멈추지 않는 이유

Related 관련 기사

  1. 1

    가치 오류가 발생하고 이유를 이해하지 못함

  2. 2

    for 루프가 작동하지 않는 이유를 이해할 수 없습니다.

  3. 3

    이 Lamda 함수가 어떻게 작동하는지 이해하지 못함

  4. 4

    Dart forEach가 작동하는 방식을 이해하지 못함

  5. 5

    루프가 작동하지 않는 이유는 무엇입니까? if & C 함수

  6. 6

    끝없이 가고 멈추지 않는 CSS Transform 추가

  7. 7

    숫자 합계 코드가 작동하지 않는 이유를 이해하지 못함

  8. 8

    CS50 복수 – 후보자 수가 사용되는 이유를 이해하지 못함

  9. 9

    Python-목록의 크기를 늘리면 for 루프의 길이 함수가 변경되지 않는 이유

  10. 10

    이진 트리가 균형을 이루는 지 찾는 데있어 재귀를 이해하지 못함

  11. 11

    이진 트리가 균형을 이루는 지 찾는 데있어 재귀를 이해하지 못함

  12. 12

    이 루프가 널 포인터를 감지하지 못하는 이유는 무엇입니까?

  13. 13

    이 while 루프가 멈추지 않고 계속 진행되는 이유는 무엇입니까?

  14. 14

    For 루프가 두 번 이상 반복하지 못함

  15. 15

    while 루프는 파이썬에서 멈추지 않습니다.

  16. 16

    람다 함수가 루프의 마지막 단계 형태를 유지하는 이유는 무엇입니까?

  17. 17

    루프가 멈추지 않고 오버플로로 이어집니다.

  18. 18

    for 루프가 인식하지 못하는 이유 || 운영자?

  19. 19

    권한 거부 오류가 발생하는 이유를 이해하지 못함

  20. 20

    이 AngularJS가 $ inject 서비스없이 작동하는 이유를 이해하지 못함

  21. 21

    이 C 루프를 이해하지 못함

  22. 22

    이 for 루프가 멈추지 않는 이유

  23. 23

    as3 hittestobject가 작동하지 않음, 이유를 이해하지 못함

  24. 24

    누군가 내 for 루프가 잘못된 위치에서 멈추는 이유를 설명 할 수 있습니까?

  25. 25

    파이썬 while 루프는 그래야만 멈추지 않습니다.

  26. 26

    배열 추가를 이해하지 못함

  27. 27

    while 루프가 멈추지 않고 if 문이 파이썬의 중첩 루프로 사용됨

  28. 28

    replace () 메서드가 예상대로 작동하지 않는 이유를 이해하지 못합니다.

  29. 29

    올바른 입력 후에도 루프가 멈추지 않는 이유

뜨겁다태그

보관