파이썬 이중반복문 빠져나가고 싶습니다.. 날개를 주세요..

조회수 4424회
new_score = []

N = int(input())

breaker = False

while True: #잘못입력하면 다시 입력

    score = list(map(int, input().split())) 

    if len(score) == N:
        for s in score:
            if s <= 0 or s > 100:
                print("점수오류: 재입력")
                continue
            elif 100 >= s > 0:
                breaker = True
                break

    elif breaker == True:
        break

    else:
        print("점수초과: 재입력")
        continue

for i in score:

    new_score.append(i/max(score) * 100)

print(new_score)

점수가 잘못입력 되었거나 (100초과 0이하) 틀린개수만큼 입력됬을시 다시 입력하는 이중 반복문인데요. 제대로 입력되었을시(100이하 0초과) while문 밖으로 빠져나가질 않네요. 도와주세요. 추가로 해당 코드를 좀더 간결히 표현할수 있는 방법이 있으면 알려주세요.

  • 어떤 목적을 위해 위의 코드를 작성한건가요? 입력을 연이어 두번 받는 이유도 모르겠고...간단하게 답을 하면 중첩된 반복에서 탈출하는 가장 쉬운 방법은 return 하면 됩니다. 즉 반복문이 있는 로직을 함수로 정의하고 return 으로 탈출하세요. 정영훈 2019.12.11 21:31
  • 아 그렇군요! 아직 함수파트는 나가지 않아서..감사합니다!! 첫번쨰 입력은 과목 개수이고 두번째 입력은 점수들입니다. 백준예제에서 나온 문제인데 위에 제가 궁금한 조건을 추가하고 싶었어요 ㅎㅎㅎ 알 수 없는 사용자 2019.12.12 16:01

1 답변

  • new_score = []
    N = int(input())
    while True: #잘못입력하면 다시 입력
        breaker = True
        score = list(map(int, input().split())) 
        if len(score) == N:
            for s in score:
                if s <= 0 or s > 100:
                    print("점수오류: 재입력")
                    breaker = False
                    break;
            if breaker == True:
                break
        else:
            print("점수초과: 재입력")
            continue
    for i in score:
        new_score.append(i/max(score) * 100)
    print(new_score)
    

    문제의 뜻은 잘 이해안돼지만 이것이면 정확할거에요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)