Responsive Advertisement
{getContent} $results={6} $label={recent} $type={grid}

파이썬 프로그래밍 - 홀짝 판별기와 성적 판별기

 파이썬 프로그래밍의 조건문을 활용한 실습 예제를 작성해보려고 합니다. 입력되는 데이터를 기반으로 특정 조건에 결과를 출력하기 위한 조건문을 연습해 보겠습니다. 홀짝 판별기와 성적 판별기를 만들어볼 거예요.

썸네일

홀짝 판별기

목표 프로그램

사용자가 입력한 숫자가 홀수인지 짝수인지 판별하는 프로그램을 작성합니다.

핵심 아이디어

우리는 짝수와 홀수에 대한 개념을 갖고 있기 때문에 특정 수가 홀수인지 판별인지 직관적으로 판단합니다. 그렇지만, 우리가 작성할 프로그램들은 우리가 알려준 것만 알 수 있어요. 그렇다고 무한히 많은 자연수가 짝수인지 홀수인지 일일이 대응시켜 알려줄 수도 없습니다. 우리가 프로그램에게 알려줄 것은 짝수인지 홀수인지를 판별하는 알고리즘입니다.

짝수인지 홀수인지를 판별하는 알고리즘은 간단합니다. 수학적으로도 2로 나누어 떨어지는 수가 짝수, 2로 나누었을 때 나머지가 1인 수가 홀수이기 때문에, 2로 나눈 나머지가 0이라면 짝수이고 2로 나눈 나머지가 1이라면 홀수입니다. 

  • 입력된 수를 2로 나눈 나머지가 0이면 짝수
  • 입력된 수를 2로 나눈 나머지가 1이면 홀수

코드 작성

아래와 같은 코드를 작성하겠습니다. 나머지를 구하는 연산자가 %(퍼센트 기호)임을 기억하며 작성해 봅시다.

# 사용자 입력 받기
number = int(input("숫자를 입력하세요: "))

# 홀짝 판별 조건문
if number % 2 == 0:
    print(f"{number}은(는) 짝수입니다.")
else:
    print(f"{number}은(는) 홀수입니다.")

코드 분석

  • 2번 줄에서 input 함수로 입력 받은 값은 문자열이기 때문에 int 함수를 사용해 정수로 변환합니다.
  • 5번 줄에서 if문을 사용해 입력된 값을 2로 나눈 나머지가 0인지를 확인합니다.
  • 나머지가 0이라면 6번 줄을 실행하고, 나머지가 0이 아니라면 1인 경우로 홀수이기 때문에 7~8번 줄의 else문을 실행합니다.

고려할 만한 사항

입력된 데이터를 판별할 때는 데이터의 범위와 형태를 고려해야 합니다. 홀짝을 판별하기 위해서는 정수 범위의 숫자여야 해요. 실수나 문자 형태의 자료가 입력되면 예외 처리를 해 주는 것이 좋습니다.

성적 판별기

목표 프로그램

사용자가 입력한 숫자를 판별하여 성적 등급을 출력하는 프로그램을 만들고자 합니다. 다음과 같은 등급이 있습니다.

90~100점: A등급

80~90점: B등급

70~80점: C등급

60~70점: D등급

60점 미만: F등급

핵심 아이디어

경우의 수가 많기 때문에 조건문의 실행 순서를 잘 고려해야 합니다. 또한 조건을 간소화 해야 합니다. 예를 들어 A등급의 경우 90점 이상 100점 이하인 두 가지 조건을 동시에 만족해야 하지만, 사용자가 0부터 100사이의 값을 입력한다고 가정하면 90점 이상인 조건만 확인해도 됩니다.

또한 조건의 구간이 순서대로 배열될 수 있을 때는 순서대로 판별하도록 코드를 작성하는 것이 좋습니다. A, C, B 순서로 조건을 확인한다고 하면, A와 C 사이의 점수 급간에 공백이 있기 때문에 입력된 데이터를 판별할 때 각 조건에 대한 상방과 하방을 모두 검증해야 합니다. 그러나, A, B, C 순서대로  조건을 확인한다고 하면, 90점 이상인지를 확인 후 아니라면 80점 이상인지만 확인하여 B인지를 검증할 수 있으므로 하방의 조건만 확인하면 됩니다.

코드 작성

아래와 같이 하방의 조건만 확인하는 코드로 작성해 보겠습니다.

# 사용자 입력 받기
score = int(input("점수를 입력하세요 (0 ~ 100): "))

# 성적 판별 조건문
if score >= 90:
    print("등급: A")
elif score >= 80:
    print("등급: B")
elif score >= 70:
    print("등급: C")
elif score >= 60:
    print("등급: D")
else:
    print("등급: F")

코드 분석

가장 높은 등급의 범위부터 순서대로 조건을 확인합니다. 각 등급은 특정 범위의 사잇값으로 판별하지만, 상행 또는 하행의 등급으로 판별하면 한쪽 범위만 판별해도 충분합니다. 비교적 명령어 구조가 간단하고 효율성을 갖추게 됩니다. 아래 코드와 같이 조건의 순서를 고려하지 않고 코드를 작성하면 조건식을 까다롭게 검증해야 하고 실행해야 하는 명령어도 많아지기 때문에 가독성과 효율성이 떨어지는 코드가 됩니다.

score = int(input("점수를 입력하세요 (0 ~ 100): "))

# 성적 판별 조건문
if score >= 80 and score < 90:
    print("등급: B")
elif score >= 60 and score < 70:
    print("등급: D")
elif score >= 90 and score <= 100:
    print("등급: A")
elif score >= 70 and score < 80:
    print("등급: C")
else:
    print("등급: F")

고려할 만한 사항

마찬가지로 입력 값에 대한 판별이 목적인 프로그램이기 때문에 사용자의 잘못된 입력 값에 대한 예외 처리를 해 주는 것이 좋습니다. 이 프로그램은 단순히 자료형에 대한 예외 처리가 아닌, 범위에 대한 예외 처리를 해 주는 것이 좋습니다. 또한 예외 처리를 할 때 새로 입력할 수 있도록 해 주면 좋겠지만, 아직 반복문을 배우지 않았기 때문에 나중에 다루어보겠습니다.

if score < 0 or score > 100:
    print("잘못된 점수입니다. 0~100 사이의 값을 입력하세요.")

마치며

사용자에게 입력 받은 값을 판별하기 위해서는 효과적으로 조건문을 활용해야 합니다. 조건식을 적절하게 수립하지 못하면 잘못된 결과를 출력하게 됩니다. 또한 사용자의 눈에는 보이지 않더라도 명령어의 실행이 효율적으로 진행될 수 있도록 경제적인 구조를 설계하기 위해 고민해 보면 좋을 것 같습니다.


{getContent} $results={5} $label={recent} $type={block}