코딩공부/Python Django

[django 실습] Word Count 만들기 ( 2 )

integerJI 2020. 2. 15. 21:26

python django 단어 수를 체크하는 Word Count 만들기 ( 2 )

 

이번 시간에는 python 내장 함수와 for문 딕셔너리 등 사용됩니다.


vscode 설치하기 : https://integer-ji.tistory.com/65

python 설치하기 : https://integer-ji.tistory.com/64

git 설치하기 : https://integer-ji.tistory.com/66

 

vscode 설정하기 : https://integer-ji.tistory.com/81

hello world 띄우기 : https://integer-ji.tistory.com/82

git 초기 설정 : https://integer-ji.tistory.com/83

page 이동 : https://integer-ji.tistory.com/84

☞ word count 실습 ( 1 ) : https://integer-ji.tistory.com/85

 

▶▶ 해당 Word Count가 끝났다면 해볼 만한 Project ◀◀

https://integer-ji.tistory.com/88


진짜 wordcount 시작하기

 

 

def new(request):
    full_text = request.GET['fulltext']

    word_list = full_text.split()
    
    return render(request, 'new.html', { 'fulltext' : full_text ,'wordlist': word_list } )

 

new 함수 새로운 소스 추가

 

word_list는 full_text를 split 한걸 넣어라

( 파이썬 문법 공부는 점프 투 파이썬으로 진행하였습니다. 좋은 거 많음 )

 

split()는 문자열을 자르는 함수입니다. full_text에는 현재 home.html에서 textarea에 적은 문자열이 있겠죠?

 

그걸 공백 기준으로 나눈다는 뜻입니다.

 

이 공백으로 나눈 word_list를 딕셔너리에 넣고 확인을 해보면

 

 

 

 

new.html에 wordlist를 띄우기 위해 {{wordlist}}를 입력하였고 확인 결과

 

하나의 문자열이었던 "워드카운트 python django"가

 

"워드카운트", "python", "django"로 나뉘어 있는 모습을 확인할 수 있습니다.

 

문자열이 list에 담겨 html에 출력될 때에는 리스트 형식으로 출력이 되었습니다.

 

하지만 wordcount란 단어의 개수를 세주어야 합니다.

 

단어 - 몇 개

단어 - 몇 개 

 

이런 식으로 말이죠

 

 

len함수 사용

 

 

def new(request):
    full_text = request.GET['fulltext']

    word_list = full_text.split()
    
    return render(request, 'new.html', { 'fulltext' : full_text ,'total': len(word_list) } )

 

딕셔너리에서 키값을 이용해 데이터를 가져올 때 len함수를 사용합니다.

 

len 함수란 해당 값이 몇 개 있나 개수를 세어주는 기능을 합니다.

 

지금 word_list에는 "워드카운트", "python", "django" 이렇게 총 3개가 있죠

 

그래서 len(word_list)의 값은 3개가 될 것입니다.

 

또한 이의 키값을 total로 바꿔주었습니다.

 

 

for문과 딕셔너리의 사용

 

 

def new(request):
    full_text = request.GET['fulltext']

    word_list = full_text.split()

    word_dictionary = {}

    for word in word_list:
        if word in word_dictionary:
            # Increase
            word_dictionary[word] += 1
        else:
            # add to the dictionary
            word_dictionary[word] = 1

    return render(request, 'new.html', {'fulltext': full_text, 'total': len(word_list), 'dictionary': word_dictionary.items()} )

 

갑자기 난이도가 높아졌지만...

 

하나씩 설명드리자면

 

word_dictionary라는 빈 딕셔너리를 만들어 줍니다.

 

for 문을 이용해 word 안에 word_list를 담습니다.

 

word_list는 "워드카운트", "python", "django"의 값으로 위와 동일하다는 가정하에 진행하겠습니다.

 

그러면 for문은 한 번씩 돌면서

 

워드카운트

python

django를 담습니다.

 

하지만 담을 때 if문이 작동합니다.

 

for문을 돌며 word_dictionary에 담을 때

 

word가 같은 값이라면 기존의 값에 +1을 카운트해줍니다.

 

하지만 아니라면

 

해당 word는 1이라는 값을 준비해 줍니다.

 

그리고 'dictionary': word_dictionary.items()가 추가되었습니다.

 

파이썬의 딕셔너리는 한 쌍으로 이루어져 있습니다.

 

{ '키 1' : '값 1', '키 2' : '값 2'  } 키를 이용해 값을 가져오는 형식입니다. 이게 한 쌍

 

이 쌍을 나누기 위해 items 함수를 사용하면 

( '키 1' , '값 1' ) , ( '키 2' , '값 2' )으로 나눠줍니다.

 

파이썬 문법 공부해야 알 수 있습니다.

 

html에 불러오기

 

 

<h1>new page!</h1>

<a href="{% url 'home' %}">home</a>

<br>
{{fulltext}}
<br>
<br>

{% for word, countTotal in dictionary %}
{{ word }} - {{ countTotal }}
<br>
{% endfor %}

 

dictionary를 가져옵니다. dictionary에는 [ ( '워드카운트', 1), ('python', 1), ('django', 1) ]

 

값이 들어있습니다. 

 

이 값들을 html에서 {% %} django 명령어 for문을 사용해

 

두 개로 나눠 반복합니다.

 

워드 카운트란 단어는 word로 들어가고 그와 같은 1은 countTotal에 들어갑니다.

 

또한 for문이 종료되었다는 걸 알리기 위해 {% endfor %}라고 적어줍니다.

 

페이지를 확인해보면

 

 

 

 

home로 이동하는 url 아래 입력한 문자(fulltext)가 나오며

 

이제 몇 번인지 체크를 한 값이 나오게 됩니다.

 

중복된 값을 넣어 다시 실행해 보면

 

 

 

 

views.py에서 for문으로 같은 단어가 들어올 경우 +1을 해주기 때문에

 

단어 수가 카운트됩니다.

 

 

git push

 

 

git init

git add .

git commit -m "코멘트"

 

 

 

git push origin master

 

사소한 것이라도 작업이 끝나면 git에 올리는 습관을 가지기!