> 백엔드 개발 > 파이썬 튜토리얼 > 장학금 자격 기준을 결정하기 위해 다단계 의사 결정 시스템을 설계하십시오.

장학금 자격 기준을 결정하기 위해 다단계 의사 결정 시스템을 설계하십시오.

WBOY
풀어 주다: 2024-07-17 06:02:49
원래의
327명이 탐색했습니다.

Design a multi-tier decision-making system to determine the eligibility criteria for a scholarship.

질문

장학금 자격 기준을 결정하는 데 사용할 수 있는 if-else 문을 사용하여 다단계 의사 결정 시스템을 설계합니다. 시스템은 성적, 과외 활동, 재정적 필요 등 다양한 요소를 고려해야 합니다.

사고 과정

성적, 과외 활동, 재정적 필요에 따라 장학금 자격을 결정하는 다단계 의사 결정 시스템을 설계하려면 장학금 금액을 평가하고 할당하는 구조화된 접근 방식이 필요합니다. 다음은 if-else 문을 사용하여 의사결정 시스템을 만드는 방법에 대한 단계별 분석입니다.

장학금 결정 기준

  • 재정 상태: 학생의 재정적 어려움을 결정합니다.
  • 과외활동: 학업 외 참여를 측정합니다.
  • 성적: 학업성적을 반영합니다.

장학금 결정 논리

  • 재정적 필요 결정: 학생이 재정적 필요가 높음, 중간, 낮음 범주에 속하는지 확인합니다.
  • 과외 활동 평가: 각 재정적 필요 범주 내에서 학생이 과외 활동에 얼마나 적극적인지 확인합니다.
  • 성적평가: 마지막으로 학생의 성적을 평가하여 정확한 장학금 금액을 결정합니다.

장학금 금액

  • 욕구 높음, 과외 활동 높음, 성적 높음: 최대 장학금
  • 필요성이 높음, 과외활동이 중간, 성적이 중간: 보통 장학금
  • 욕구 높음, 과외 활동 낮음, 성적 낮음: 장학금 최소화
  • 중간, 높은 과외 활동, 높은 성적: 상당한 장학금
  • 중간 요구, 중간 과외 활동, 중간 성적: 중간 장학금
  • 중간, 낮은 과외활동, 낮은 성적: 최소한의 장학금
  • 필요도 낮음, 과외 활동 높음, 성적 높음: 보통 장학금
  • 필요도 낮음, 과외 활동 중간, 성적 중간: 소액 장학금
  • 욕구 낮음, 과외 활동 낮음, 성적 낮음: 장학금 없음

해결책

def scholarship(financial_cond, extra_act, grades):
    if financial_cond >=80:
        if extra_act >=80:
            if grades >=80:
                return 5000
            if grades>= 60 and grades <80:
                return 3000
            if grades>= 40 and grades <60:
                return 2000
        if extra_act >= 60 and extra_act < 80:
            if grades >=80:
                return 4000
            if grades>= 60 and grades <80:
                return 2000
            if grades>= 40 and grades <60:
                return 1000
        if extra_act >= 40 and extra_act <60:
            if grades >=80:
                return 3000
            if grades>= 60 and grades <80:
                return 1000
            if grades>= 40 and grades <60:
                return 000
    if financial_cond >=60 and financial_cond <80:
        if extra_act >=80:
            if grades >=80:
                return 4000
            if grades>= 60 and grades <80:
                return 2000
            if grades>= 40 and grades <60:
                return 1000
        if extra_act >= 60 and extra_act < 80:
            if grades >=80:
                return 3000
            if grades>= 60 and grades <80:
                return 1000
            if grades>= 40 and grades <60:
                return 0000
        if extra_act >= 40 and extra_act <60:
            if grades >=80:
                return 2000
            if grades>= 60 and grades <80:
                return 0000
            if grades>= 40 and grades <60:
                return 000
    if financial_cond >= 40 and financial_cond <60:
        if extra_act >=80:
            if grades >=80:
                return 3000
            if grades>= 60 and grades <80:
                return 1000
            if grades>= 40 and grades <60:
                return 000
        if extra_act >= 60 and extra_act < 80:
            if grades >=80:
                return 2000
            if grades>= 60 and grades <80:
                return 000
            if grades>= 40 and grades <60:
                return 000
        if extra_act >= 40 and extra_act <60:
            if grades >=80:
                return 1000
            if grades>= 60 and grades <80:
                return 000
            if grades>= 40 and grades <60:
                return 000
    else:
        return 0

financial_cond = float(input('Enter financial condition in 1 to 100 '))
extrac_act = float(input('Enter the extracurricular participation in 1 to 100 '))
grades= float(input('Enter the grades of the student '))

print(scholarship(financial_cond, extrac_act, grades))
로그인 후 복사

다른 아이디어

1

financial_cond = float(input('Enter financial condition in 1 to 100 '))
extrac_act = float(input('Enter the extracurricular participation in 1 to 100 '))
grades= float(input('Enter the grades of the student '))
def scholarship():
    if financial_cond >= 80 and extrac_act >= 80 and grades >= 80:
        return 10000
    elif financial_cond >= 80 and extrac_act >= 80 and grades >= 60 and grades <80:
        return 5000
    elif financial_cond >= 80 and extrac_act >= 80 and grades >= 40 and grades < 60:
        return 2000
    elif financial_cond >= 80 and extrac_act >= 60 and extrac_act < 80 and grades >= 80:
        return 5000
    elif financial_cond >=80 and extrac_act >=60 and extrac_act < 80 and grades >= 60 and grades < 80:
        return 2000
    elif financial_cond >= 80 and extrac_act >=50 and extrac_act < 60 and grades >= 60 and grades < 80:
        return 1000
    elif financial_cond >= 60 and financial_cond < 80 and extrac_act >= 80 and grades >=80:
        return 5000
    elif financial_cond >=60 and financial_cond < 80 and extrac_act >=60 and extrac_act < 80 and grades >= 80:
        return 2000
    elif financial_cond >=60 and financial_cond < 80 and extrac_act >= 60 and extrac_act < 80 and grades >= 60 and grades < 80:
        return 1000
    else:
        return 0

scholarship()
로그인 후 복사

거부 이유:

  1. 범위 및 중복성: 장학금() 함수는 매개변수를 사용하지 않으므로 직접 입력되는 전역 변수(financial_cond, extrac_act, grades)에 의존합니다. 이 디자인은 덜 모듈화되어 코드를 유지 관리하고 테스트하는 데 문제가 발생할 수 있습니다.
  2. 중복 및 모호함: 일부 조건이 중복되거나 중복됩니다. 예를 들어 여러 elif 분기는 임계값이나 범위에 약간의 차이가 있는 유사한 조건을 확인하므로 논리가 혼란스럽고 오류가 발생하기 쉽습니다.
  3. 논리적 복잡성: 조건이 겹치는 여러 elif 문을 사용하면 따라가기 어려운 복잡한 구조가 생성됩니다. 다양한 시나리오에서 어떤 조건이 참일지, 최종 결과가 어떻게 될지는 즉시 명확하지 않습니다.

2

def scholarship(financial_cond, extra_act, grades):
    if financial_cond >= 80:
        return high_financial(extra_act, grades)
    elif financial_cond >= 60:
        return medium_financial(extra_act, grades)
    elif financial_cond >= 40:
        return low_financial(extra_act, grades)
    else:
        return 0

def high_financial(extra_act, grades):
    if extra_act >= 80:
        if grades >= 80:
            return 5000
        elif grades >= 60:
            return 3000
        elif grades >= 40:
            return 2000
    elif extra_act >= 60:
        if grades >= 80:
            return 4000
        elif grades >= 60:
            return 2000
        elif grades >= 40:
            return 1000
    elif extra_act >= 40:
        if grades >= 80:
            return 3000
        elif grades >= 60:
            return 1000
        elif grades >= 40:
            return 0

def medium_financial(extra_act, grades):
    if extra_act >= 80:
        if grades >= 80:
            return 4000
        elif grades >= 60:
            return 2000
        elif grades >= 40:
            return 1000
    elif extra_act >= 60:
        if grades >= 80:
            return 3000
        elif grades >= 60:
            return 1000
        elif grades >= 40:
            return 0
    elif extra_act >= 40:
        if grades >= 80:
            return 2000
        elif grades >= 60:
            return 0
        elif grades >= 40:
            return 0

def low_financial(extra_act, grades):
    if extra_act >= 80:
        if grades >= 80:
            return 3000
        elif grades >= 60:
            return 1000
        elif grades >= 40:
            return 0
    elif extra_act >= 60:
        if grades >= 80:
            return 2000
        elif grades >= 60:
            return 0
        elif grades >= 40:
            return 0
    elif extra_act >= 40:
        if grades >= 80:
            return 1000
        elif grades >= 60:
            return 0
        elif grades >= 40:
            return 0

financial_cond = float(input('Enter financial condition in 1 to 100: '))
extra_act = float(input('Enter the extracurricular participation in 1 to 100: '))
grades = float(input('Enter the grades of the student: '))

print(scholarship(financial_cond, extra_act, grades))
로그인 후 복사

거부 이유:

  1. 코드 중복: 장학금 결정 논리가 다양한 재정적 요구 범주(고금융, 중금융, 저금융)에 걸쳐 반복되어 중복 코드가 발생합니다. 반복을 방지하고 불일치 위험을 줄이기 위해 이를 단순화할 수 있습니다.
  2. 함수 호출의 복잡성: 중첩된 함수 호출과 여러 단계의 조건으로 인해 코드를 따르고 유지 관리하기가 더 어려워집니다. 서로 다른 기능으로 분리하는 것은 모듈화에는 좋지만 중첩된 조건의 양으로 인해 과도하고 혼란스러울 수 있습니다.
  3. 일관되지 않는 장학금 금액: 서로 다른 재정적 필요 수준에 따른 장학금 금액 결정 논리가 항상 일관되지는 않아 특정 조건에 따라 특정 장학금 금액이 지급되는 이유에 대해 혼란이 발생할 수 있습니다.

3

grades = float(input("Enter the applicant's GPA : "))
extracurriculars = int(input("Enter the number of extracurricular activities: "))
financial_need = input("Is there a financial need? (yes/no): ").strip().lower()

eligible = True

grade_thresholds = [3.5, 3.0, 2.5] 
scholarship_level = None

for threshold in grade_thresholds:
    if grades >= threshold:
        if threshold == 3.5:
            scholarship_level = "Full Scholarship"
        elif threshold == 3.0:
            scholarship_level = "Partial Scholarship"
        elif threshold == 2.5:
            scholarship_level = "Basic Scholarship"
        break
else:
    eligible = False
    print("Applicant does not meet the minimum grade requirement.")

if eligible:
    extracurricular_threshold = 2  # Minimum number of activities required
    if extracurriculars < extracurricular_threshold:
        eligible = False
        print("Applicant does not meet the extracurricular activities requirement.")

if eligible:
    while financial_need not in ['yes', 'no']:
        financial_need = input("Please enter 'yes' or 'no' for financial need: ").strip().lower()

    if financial_need == 'no':
        scholarship_level = "Merit-based Scholarship"  # Adjust the scholarship type based on no financial need

if eligible:
    print(f"The applicant is eligible for the {scholarship_level}.")
else:
    print("The applicant is not eligible for the scholarship.")
로그인 후 복사

거부 이유

  1. 지나치게 단순화: 다양한 조건을 고려하지 않고 성적에 단일 임계값을 사용하고 재정적 필요에 대해 이진 검사를 사용하므로 접근 방식이 너무 단순합니다. 이로 인해 자격 및 장학금 금액을 결정할 때 중요한 차이점을 간과할 수 있습니다.
  2. 하드 코딩된 값: 장학금 수준은 과외 활동 참여 수준이나 보다 세부적인 재정적 필요 평가와 같은 다른 요소를 고려하지 않고 재정적 필요에 대한 GPA 및 바이너리 검사를 기반으로 하드 코딩됩니다.
  3. 상호작용 처리: 재정적 필요 입력을 처리하기 위한 루프는 사용자가 '예' 또는 '아니요'를 입력하지 않으면 잠재적으로 무한 루프를 일으킬 수 있습니다(무한 루프는 실제로는 드문 문제일 수 있지만 잠재적인 결함입니다). ).

솔루션 선택 이유와 잠재적인 결함

제안된 솔루션을 검토하고 솔루션 선택 이유와 잠재적인 결함을 분석해 보겠습니다.

제안된 솔루션

def scholarship(financial_cond, extra_act, grades):
    if financial_cond >=80:
        if extra_act >=80:
            if grades >=80:
                return 5000
            elif grades >= 60:
                return 3000
            elif grades >= 40:
                return 2000
        elif extra_act >= 60:
            if grades >=80:
                return 4000
            elif grades >= 60:
                return 2000
            elif grades >= 40:
                return 1000
        elif extra_act >= 40:
            if grades >=80:
                return 3000
            elif grades >= 60:
                return 1000
            elif grades >= 40:
                return 0
    elif financial_cond >=60:
        if extra_act >=80:
            if grades >=80:
                return 4000
            elif grades >= 60:
                return 2000
            elif grades >= 40:
                return 1000
        elif extra_act >= 60:
            if grades >=80:
                return 3000
            elif grades >= 60:
                return 1000
            elif grades >= 40:
                return 0
        elif extra_act >= 40:
            if grades >=80:
                return 2000
            elif grades >= 60:
                return 0
            elif grades >= 40:
                return 0
    elif financial_cond >= 40:
        if extra_act >=80:
            if grades >=80:
                return 3000
            elif grades >= 60:
                return 1000
            elif grades >= 40:
                return 0
        elif extra_act >= 60:
            if grades >=80:
                return 2000
            elif grades >= 60:
                return 0
            elif grades >= 40:
                return 0
        elif extra_act >= 40:
            if grades >=80:
                return 1000
            elif grades >= 60:
                return 0
            elif grades >= 40:
                return 0
    else:
        return 0

financial_cond = float(input('Enter financial condition in 1 to 100 '))
extra_act = float(input('Enter the extracurricular participation in 1 to 100 '))
grades = float(input('Enter the grades of the student '))

print(scholarship(financial_cond, extra_act, grades))
로그인 후 복사

선정 이유

  1. 구조화된 접근 방식: 이 솔루션은 재정 상태, 과외 활동, 성적을 체계적으로 평가하는 다단계 의사 결정 프로세스를 사용합니다. 이러한 구조화된 접근 방식을 통해 장학금 자격 여부를 명확하고 체계적으로 결정할 수 있습니다.

  2. 상세 평가: 이 솔루션은 재정적 필요, 과외 활동 및 학업 성과에 대한 특정 기준이 있는 다양한 조건을 다루며 장학금 금액 할당을 위한 세부 프레임워크를 제공합니다.

  3. 모듈화: 다양한 재정적 요구 수준을 분리하고 이러한 수준 내에서 다른 기준을 평가함으로써 솔루션은 관리 및 업데이트가 더 쉬운 모듈식 구조를 도입합니다.

  4. 명확한 결정 경로: 중첩된 if-else 문은 명확한 의사 결정 경로를 생성하여 어떤 조건이 어떤 장학금 금액으로 이어지는지 명시적으로 만듭니다.

잠재적인 결함

  1. 중복성 및 복잡성: 코드에는 중복성이 많이 포함되어 있습니다. 예를 들어, 성적 및 과외 활동 확인이 여러 번 반복됩니다. 이러한 중복은 코드의 복잡성을 증가시키고 유지 관리 및 이해를 어렵게 만듭니다.

  2. 코드 중복: Financial_cond의 각 범위에 대한 의사 결정 논리는 유사한 패턴을 가지지만 임계값은 약간 다릅니다. 공통 로직을 통합하고 반복적인 코드 블록을 줄이면 이러한 중복을 피할 수 있습니다.

  3. 하드코드 값: 장학금 금액과 기준액은 하드코드되어 있어 유연성이 없습니다. 기준이나 금액을 변경해야 하는 경우 코드를 수동으로 업데이트해야 합니다. 구성 파일이나 상수를 사용하면 유연성이 향상됩니다.

  4. 입력 유효성 검사 부족: 코드는 입력이 예상 범위 또는 유형 내에 있는지 확인하기 위해 입력의 유효성을 검사하지 않습니다. 예를 들어 Financial_cond, extra_act 및 grades는 1에서 100 사이일 것으로 예상되지만 코드는 이를 시행하거나 검증하지 않습니다.

  5. Edge Cases: 솔루션은 Edge Cases를 강력하게 처리하지 않습니다. 예를 들어 Financial_cond, extra_act 또는 grades가 정확히 경계 값(예: 정확히 40, 60 또는 80)에 있는 경우 처리가 다소 모호합니다. 경계 사례를 명확하게 처리하면 결정 논리가 더욱 정확해집니다.

  6. 피드백이나 설명 없음: 해당 솔루션은 장학금 금액만 제공하고 특정 금액을 지급한 이유에 대해서는 설명하지 않습니다. 피드백이나 설명을 추가하면 사용자의 이해도와 투명성이 향상될 수 있습니다.

제안된 솔루션을 현대 표준에 따라 개선할 수 있습니까? [힌트: 중복 리팩터링, 입력 유효성 검사 구현, 상수 사용 및 사용자 피드백 강화]

고급 솔루션: https://insightshub.in/design-a-multi-tier-decision-making-system-to-determine-the-eligibility-criteria-for-a-scholarship/#h-advanced- 솔루션

위 내용은 장학금 자격 기준을 결정하기 위해 다단계 의사 결정 시스템을 설계하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿