CSE1017 프로그래밍기초 (2022) 숙제 6 [2점] 마감 : 5월 18일 수업시작 직전까지 코드파일 업로드
사전 지식 습득용 자습 자료
(1) 0
으로만 구성된 길이 10의 리스트 만들기
>>> [0 for _ in range(10)]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
(2) 숫자문자(digit: '0'
,'1'
,'2'
,'3'
,'4'
,'5'
,'6'
,'7'
,'8'
,'9'
)로만 구성된 문자열을 인수로 받아서, 숫자문자와 해당 문자의 빈도수의 튜플의 리스트를 리턴하는 함수 digit_frequencies
를 작성하자.
ds = "2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376"
def digit_frequencies(ds):
digits_count = [0 for _ in range(10)]
for d in ds:
digits_count[int(d)] += 1
paired = []
i = 0
for dc in digits_count:
paired.append((str(i),dc))
i += 1
return paired
print(digit_frequencies(ds))
이 프로그램을 실행하면, 실행창에 다음과 같이 프린트 한다.
[('0', 8), ('1', 6), ('2', 4), ('3', 17), ('4', 10), ('5', 6), ('6', 16), ('7', 7), ('8', 9), ('9', 8)]
(3) 문제 (2)의 digit_frequencies
함수를 호출하여 얻은 리스트를 숫자문자의 빈도수가 높은 순으로 정렬한 리스트를 리턴하는 함수 digit_frequencies_sort
는 다음과 같이 작성할 수 있다.
def digit_frequencies_sort(ds):
paired = digit_frequencies(ds)
paired.sort(key=lambda x: x[1], reverse=True)
return paired
print(digit_frequencies_sort(ds))
이 프로그램을 실행하면, 실행창에 다음과 같이 프린트 한다.
[('3', 17), ('6', 16), ('4', 10), ('8', 9), ('0', 8), ('9', 8), ('7', 7), ('1', 6), ('5', 6), ('2', 4)]
문제
숫자문자로만 구성된 텍스트 파일명(문자열)을 인수로 받아서, 숫자의 빈도수와 각 숫자가 전체에서 몇 %를 차지하는지 가장 많이 나오는 숫자 순으로 나열하여 텍스트 파일 ranking.txt
에 저장하는 프로시저 digit_ranking_board
함수를 작성하자.
예를 들어, 같은 폴더에 있는 digits.txt
파일의 내용이 다음과 같다고 하고,
2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376
digit_ranking_board("digits.txt")
를 호출하면, 다음과 같은 내용의 텍스트 파일 ranking.txt
이 같은 폴더에 생성되어야 한다.
3 17 18.7%
6 16 17.6%
4 10 11.0%
8 9 9.9%
0 8 8.8%
9 8 8.8%
7 7 7.7%
1 6 6.6%
5 6 6.6%
2 4 4.4%