본문 바로가기
프로그래밍 독학/python

[python] 파이썬 in, and, format, 상호평가 프로그램 만들기(2)

by 파레토맨 2022. 3. 26.

▶in 키워드와 and 연산자

지난 포스팅에 이어서 상호평가 프로그램 만들기입니다.

제가 만드는 상호평가 프로그램의 경우

23점에서 29점까지 총 7개의 배점이 존재하고,
모든 사원들을 상대평가로 점수를 주어야 했습니다.

리스트 내부에 값이 있는지 없는지 확인하거나 딕셔너리 내부에 키값이 있는지 확인할 때 in키워드를 사용합니다.

quotient = people // 7

각 점수별로 사원 수를 비슷하게 넣어야 하기 때문에 점수별 최소 인원수를 설정하고자
사람 수를 7로 나눈 몫을 구하여 quotient라는 변수에 할당하였습니다.

if 23 in count and 24 in count and 25 in count and 26 in count and 27 in count and 28 in count and 29 in count:
        if count[23] >= quotient and count[24] >= quotient and count[25] >= quotient and count[26] >= quotient and count[27] >= quotient and count[28] >= quotient and count[29] >= quotient:
                for employ in EmployList:
                    print(employ)

                print(count)

조건문과 in 키워드와 and 연산자를 통하여 count 딕셔너리에 23 ~ 29라는 숫자가 모두 있는지
확인한 후 조건문 안에 또 조건문을 넣어 각 배점 별로 최소 인원이 들어가 있는지도 확인하였습니다.

and 연산자 또한 23 and 24 and 25 in count 이런 식이 아니라 23 in count and 23 in count
이런 식으로 써주어야 합니다.

그리고 위의 조건에 부합하지 않을 경우 사원 별 점수를 다시 주어야 하기 때문에
while문으로 전체 문장을 감싸 주었습니다. 현재 전체 코드는 다음과 같습니다.

Numb = input()
people = int(Numb)
quotient = people // 7
k = 0

while True:
    EmployList = []
    count = {}
    for i in range(people):
        i = {}
        EmployList.append(i)
    for i in range(people):
        Anum = randint(3,5)
        Bnum = randint(3,5)
        if Anum + Bnum == 6:
            Cnum = randint(9,10)
            Dnum = randint(9,10)
        elif Anum + Bnum == 7 or Anum + Bnum == 8 or Anum + Bnum == 9:
            Cnum = randint(8,10)
            Dnum = randint(8,10)
        else:
            Cnum = randint(8,10)
            if 8<= Cnum < 10:
                Dnum = randint(8,10)
            else:
             Dnum = randint(8,9)
        EmployList[i] ={"A": Anum, "B": Bnum, "C": Cnum, "D": Dnum}

    for employ in EmployList:
        Score_sum = employ["A"] + employ["B"] + employ["C"] + employ["D"]
        if Score_sum in count:
            count[Score_sum] = count[Score_sum] + 1
        else:
            count[Score_sum] = 1

    print("{}번째 반복입니다.".format(k))

    if 23 in count and 24 in count and 25 in count and 26 in count and 27 in count and 28 in count and 29 in count:
        if count[23] >= quotient and count[24] >= quotient and count[25] >= quotient and count[26] >= quotient and
             count[27] >= quotient and count[28] >= quotient and count[29] >= quotient:
                for employ in EmployList:
                    print(employ)

                print(count)
                break
        else:
            k += 1
    else:
        k += 1   


format() 함수

format() 함수는 중괄호를 포함한 문자열 뒤에 사용합니다
ex) "{}".format()

결과를 계산하는데 얼마나 많은 반복이 이루어지는지 확인하기 위해 반복을 할 때마다
숫자가 1씩 증가하는 k변수를 선언하고, format() 함수를 사용하였습니다.

format() 함수의 매개변수로 있는 k가 format() 함수 앞의 중괄호에 대치되면서 문자열을 통해
몇 번 반복이 이뤄지는지 확인하였습니다.

뿐만 아니라 이런 방법을 통하여 내가 짠 코드가 제대로 작동하는지 확인할 수도 있었습니다.

프로그램의 계산 틀은 대충 잡아두었다고 생각되었지만 위의 코드대로 계산할 경우
사람의 수가 7의 배수에 근접한 수일 경우 많은 반복을 한다는 사실을 확인하였습니다.

그 수정 내용은 다음 포스팅에서 이어서 하도록 하겠습니다.

댓글