본문 바로가기
프로그램/Python 1000제

Python 69제] 점수에 대한 학점을 출력하는 프로그램을 작성하시오.

by 건티 2022. 4. 27.
728x90

출처: 반크_세계유산 석굴암

 

문제]

성적을 입력하여 그에 대응하는 학점을 출력하는 프로그램을 작성하시오.

조건)
▶ 성적의 범위는 0<=N<=100으로 한다.
 범위 밖 수가 입력되면 다시 입력한다.
 음수가 입력되면 입력을 완료하고 학점을 출력한다.
 학점은 상대평가를 기준으로 한다.
   전체 인원의 상위 10%는 A+
   전체 인원의 11%~20%는 A
   전체 인원의 21%~30%는 B+
   전체 인원의 31%~45%는 B
   전체 인원의 46%~60%는 C+ 
   전체 인원의 61%~75%는 C
   전체 인원의 76%~85%는 D+
   전체 인원의 86%~95%는 D
   그외는 F로 한다.

 

입력 예시1)

1번째 성적을 입력하시오 : 715

0~100사이의 수가 아닙니다.

다시 입력하세요...

 

1번째 성적을 입력하시오 : 10

2번째 성적을 입력하시오 : 20

3번째 성적을 입력하시오 : 30

4번째 성적을 입력하시오 : 40

5번째 성적을 입력하시오 : 50

6번째 성적을 입력하시오 : 60

7번째 성적을 입력하시오 : 80

8번째 성적을 입력하시오 : 90

9번째 성적을 입력하시오 : 70

10번째 성적을 입력하시오 : 75

11번째 성적을 입력하시오 : 85

12번째 성적을 입력하시오 : 65

13번째 성적을 입력하시오 : -1

 

출력 예시1)

성적 학점

 10    F

 20    F

 30    D

 40    D+

 50    C

 60    C+

 80    B+

 90    A+

 70    B

 75    B

 85    A

 65    C+

 

 

참고풀이]

#입력자료 입력할 리스트를 선언한다.

#원본자료를 정렬할 리스트를 선언한다.

#학점을 입력할 리스트를 선언한다.
L=[]
L_Select=[]
L_Pass=[]

#선택정렬한다.(내림차순으로 정렬한다.)
def Select_Sort(L):
    for n in L:
        L_Select.append(n)
    
    Start=0
    while Start<len(L):
        #리스트 중 제일 큰 수를 찾아 그 위치를 구한다.
        Max=max(L_Select[Start:])
        for i in range(Start,len(L)):
            if Max==L_Select[i]:
                MaxIndex=i
                break
        #리스트 Start에 리스트 위치의 값과 교환한다.
        temp=L_Select[Start]
        L_Select[Start]=L_Select[MaxIndex]
        L_Select[MaxIndex]=temp
        
        #Start를 하나 증가한다.
        Start+=1

#학점을 부여한다.
def Pass_Chk(L_Select):
    Ch=['A+','A','B+','B','C+','C','D+','D','F']
    Start=-1
    n10=int(round(len(L_Select)*10/100,0))
    n15=int(round(len(L_Select)*15/100,0))
    for i in range(9):
        if i<1:
            Start += 1
            End =Start+n10
        elif i<3 or 4<i<8:
            Start = End
            End+=n10
        elif i<5:
            Start = End
            End += n15
        else:
            Start = End
            End=len(L_Select)
        
        for j in range(Start,End):
            L_Pass.append(Ch[i])

#자료 입력
i=0
while True:
    i+=1
    N=int(input(str(i)+"번째 성적을 입력하시오 : "))
    if N<0:
        break
    if 0<=N<=100:
        L.append(N)
    else:
        print("0~100사이의 수가 아닙니다.")
        print("다시 입력하세요...")
        i-=1

#정렬한다.
Select_Sort(L)
#학점을 부여한다.
Pass_Chk(L_Select)    

#결과 출력한다.
print("\n성적 학점")
for n in range(len(L)):
    print(f'{L[n]:3}  ',end="")
    for i in range(len(L)):
        if L[n]==L_Select[i]:
            index=i
            break
    print(f' {L_Pass[index]}')

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글