파이썬 except 이용한 프로그래밍 중 질문드립니다.

조회수 779회

안녕하세요. 파이썬을 배우는 중인 학생입니다.

사용자에게 점수를 입력받아서 평균을 계산해주는 프로그램을 작성중입니다.

양수를 user_input으로 넣어주면 리스트에 추가시키고 음수를 넣으면 그 리스트를 기반으로 합과 평균을 구하도록 하고있습니다.

리스트에 내용이 없는중에 계산을 하려면 except ZeroDivisionError:를 이용하여 다시 입력값을 받게하고

user_input에 숫자가아닌 문자를 입력하면 except ValueError:를 이용하여 다시 입력값을 받게 하려하고있습니다.

아래는 짜고있던 내용입니다.

def calculate_average(listsum, count):
    average = sum(listsum) / count
    return average

score = list()

try:
    user_input = int(input('점수를 입력하세요. 음수를 입력하여 평균을 구합니다: '))

except ValueError:
    print('유효한 숫자가 아닙니다. 다시 입력하세요.')
    user_input = int(input('점수를 입력하세요. 음수를 입력하여 평균을 구합니다: '))

except ZeroDivisionError:
    print('평균을 구할 점수를 입력하지 않았습니다. 다시 입력하세요.')
    user_input = int(input('점수를 입력하세요. 음수를 입력하여 평균을 구합니다: '))

finally:
    while user_input >= 0:
        score.append(user_input)
        user_input = int(input('점수를 입력하세요. 음수를 입력하여 평균을 구합니다: '))


    if user_input < 0:
            average = calculate_average(score, len(score))
            print('합:', '%.1f' % sum(score))
            print('평균:', '%.1f' % average)

코드가 쓸데없이 어수선한 느낌이네요...

일단 그냥 양수만 입력하다가 음수를 입력하면 제가 원하는 합과 평균까지는 정상적으로 출력이 됩니다.

그런데 예외처리를 하려고만하면 자꾸 작동이 안되고있습니다.

제가 생각하기에는 배치하는 순서나 사용방법이 잘못된것같은데

고수님들께 조언 부탁드려도 되겠습니까 ㅠㅠ 감사합니다.

그리고 수정하던 내용중 하나는

def decision():
    try:
        score_input = int(input('점수를 입력하세요. 음수를 입력하여 평균을 구합니다: '))
    except ValueError:
        print('유효한 숫자가 아닙니다. 다시 입력하세요.')
        decision()

이렇게 함수를 만들어서 이용하는 방법도 있었는데 약간 지금 제 머리로는 벅찬것같군요... 다시 한번 부탁드리겠습니다 ㅠㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 파이썬 try catch에서 finally는 Value error또는 division by zero가 잡히는지 유뮤랑 상관없이 무조건 진행이 되는 부분입니다. 즉 숫자가 아닌 값, 0 이 들어가면 에러가 정상적으로 나오고, 그 이후에도 에러값들이 finally에 들어가게 되니 문제가 나오는거지요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)