장고 개념

코딩 연습/Django 2018. 11. 15. 14:42

모델 - 데이터베이스에 저장되는 데이터

템플릿 - 사용자에게 보여지는 UI(User Interface)

뷰 - 프로그램 로직(데이터를 가져와 필요에 따라 처리한 결과를 템플릿에 전달)


ex) 블로그

모델 - 블로그의 내용을 가져오거나 저장, 수정

뷰 - 버튼을 눌렀을 때 어떤 함수를 호출하여 데이터를 어떻게 가공할 것인지 결정

템플릿 - 화면을 꾸며서 볼 수 있는 페이지를 만들어주는 역할


MVT패턴 처리과정

1) 클라이언트 요청 URL 분석

2) URL 분석을 통해 처리를 담당할 뷰를 결정

3) 뷰는 함수를 호출하여 필요에 따라 모델을 통해 데이터베이스를 처리 받는다

4) 뷰는 로직 처리 후 템플릿을 사용하여 HTML 파일을 클라이언트에게 보낸다


ORM(Object-Relational Mapping) - 객체와 관계형 데이터베이스를 연결해주는 역할

- 데이터베이스 대신에 클래스(객체)를 사용하여 데이터를 처리

- 클래스끼리 작업을 하면 ORM이 자동으로 데이터베이스를 처리


URLconf

- URL과 뷰(함수)를 매핑하는 것


View - 프로그램 로직을 정의해둔다

- 웹 요청에 따라 URL을 분석하고 해당 URL에 매핑된 뷰를 호출

- 웹 요청을 받고, 데이터베이스 처리 후 결과를 템플릿 처리하여 HTML로 된 데이터를 클라이언트로 반환


Template - 화면 UI를 정의한다

- 장고가 클라이언트(웹브라우저)에게 반환하는 최종 응답은 HTML 텍스트이다

- 개발자가 html 파일을 작성하면, 장고는 이를 클라이언트에 보내고, 클라이언트를 해석하여 화면에 보여준다

- 개발자가 작성하는 html 파일을 템플릿이라고 한다


MVT 코딩 순서

- 독립적으로 개발할 수 있는 모델을 먼저 코딩하고, 뷰와 템플릿을 이어서 코딩하는 것이 일반적

- 뷰와 템플릿의 경우는 UI화면을 생각하면서 로직을 풀어나가는 것이 쉬우므로 템플릿을 먼저 코딩하기도 한다

1) 프로젝트 뼈대 만들기

2) 모델 코딩하기 - 테이블 개발(models.py, admin.py)

3) URLconf 코딩하기 - URL과 뷰의 매핑 관계 정의 (urls.py)

4) 템플릿 코딩하기 - 화면 UI 개발(.html)

5) 뷰 코딩하기 - 애플리케이션 로직 개발(views.py)



블로그 이미지

쵸잇

,

가상환경 폴더는 갖고 있는 데이터가 많고 굳이 깃허브에 올릴 필요가 없다.


따라서 깃허브에 등록시 제외시켜도 무방하다.


내가 지정한 가상환경 폴더명은 "my_project"이다.


지난번에 우리는 ".gitignore"라는 파일을 만들어서 "db.sqlite3" 파일을 제외시켰다.


그와 유사하게 ".gitignore" 파일에 "my_project/"라고 "db.sqlite3"가 적힌 목록에 이어서 작성하면 끝이다.


그러면 똑같은 방식으로 "my_project" 폴더가 깃허브 등록시 제외된다.   

'코딩 연습 > Django' 카테고리의 다른 글

모델 만들기에서 카테고리 선택까지  (0) 2018.11.21
애플리케이션 설계하기  (0) 2018.11.16
장고 개념  (0) 2018.11.15
댓글 입력창 만들기 2 (뷰 다루기)  (0) 2018.10.19
장고 설치하기  (0) 2018.10.07
블로그 이미지

쵸잇

,

방위사는 명사와 함께 쓰여 명사의 방향이나 위치를 나타내는데 쓰인다.


家里 집 안, 门外 문 밖, 桌子上 책상 위, 桌子下 책상 아래

包里有一本书 가방 안에 책이 있다.

你的钱包在桌子上. 너의 지갑은 책상 위에 있다.

 

방위사는 명사와 함께 쓰이는 경우 성조를 쓰지 않는다.


学校前边有学院 학교 앞에 학원이 있다. (특정하지 않음)

我的学院学校前边 나의 학원은 학교 앞에 있다. (특정함)


지시대명사 여기, 거기는 명사와 함께 쓰이면 '명사 이 쪽', '명사 그 쪽'으로 해석된다.


你的书在我这儿 너의 책은 나한테 (내쪽에) 있다.

我的书你那儿 나의 책은 당신한테 (당신 그쪽에) 있다.


상대방이 감사하다거나, 미안하다고 할 경우에 대답으로 쓰일 수 있다.


没关系。괜찮아요


'외국어 > 중국어' 카테고리의 다른 글

조동사 可以  (0) 2018.11.20
정도보어(상태보어)와 得  (0) 2018.11.19
기초문법 (3)  (0) 2018.10.05
기초 문법 (2)  (0) 2018.10.03
기초 문법 (1)  (0) 2018.10.02
블로그 이미지

쵸잇

,

GET과 POST는 서버와 통신하는 가장 기본방식이다.


GET은 서버에 단순한 정보를 요청하고 데이터를 내줄 때 쓴다.


POST는 서버에 어떠한 데이터를 저장, 수정, 삭제, 연산작용 등을 위해 쓴다.



우리가 그동안 사용한 뷰에서도 GET과 POST 사용에 대해 구분을 해줘야한다.


1
2
3
4
5
6
7
8
9
10
def detail(request, article_id):
    if request.method == "GET":
        article = Article.objects.get(id=article_id)
        hashtag_list = HashTag.objects.all()
        ctx = {
            "article" : article,
            "hashtag_list" : hashtag_list,
            }
    return render(request, "detail.html", ctx)
 
cs

 

모델에서 데이터를 불러오는 코드는 GET으로 구분해주었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
def detail(request, article_id):
    if request.method == "GET":
        article = Article.objects.get(id=article_id)
        hashtag_list = HashTag.objects.all()
        ctx = {
            "article" : article,
            "hashtag_list" : hashtag_list,
            }
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
 
    return render(request, "detail.html", ctx)
 
cs


어디서 많이 본 형태이다.


1
2
3
def index(request):
    category = request.GET.get("category")
    hashtag = request.GET.get("hashtag")
cs


index뷰에서 category와 hashtag를 가져올 때 사용했던 GET방식이다.

이를 참고하여 POST방식을 만든 것이다.


그리고 GET방식과 POST방식의 차이점은 GET에서는 데이터를 전부 가져오거나 필터처리했는데,

POST에서는 데이터를 저장하므로 인스턴스를 불러오는 게 아니라 인스턴스를 새로 만든다.


1
2
3
4
5
6
7
8
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
        Comment.objects.create(
            article=article,
            username=username,
            content=content,
        )
cs


Comment 클래스에 인스턴스를 만드는 코드이다. create를 입력하여 우리가 입력한 데이터를 저장시킨다.



우리가 흔히 쓰는 댓글창은 내용 입력 후 자동으로 댓글이 등록된 화면이 나타나는데,

이 기능을 적용하기 위해서는 작업이 필요하다.


1
from django.http import HttpResponseRedirect
cs


1
2
3
4
5
6
7
8
9
10
    elif request.method == "POST":
        username = request.POST.get("username")
        content = request.POST.get("content")
        Comment.objects.create(
            article=article,
            username=username,
            content=content,
        )
 
        return HttpResponseRedirect("/{}/".format(article_id))
cs


HttpResponseRedirect 메소드를 import한다. 이 메소드가 자동리프레시를 시켜준다.


1
return HttpResponseRedirect("/{}/".format(article_id))
cs


페이지 주소는 현재페이지를 사용해야하므로 format 함수를 이용해 article_id를 넘겨주어 페이지를 설정한다.

블로그 이미지

쵸잇

,

깃허브에 파일을 올리기 전에 커밋되지않은 파일을 확인한다.


1
git status
cs


입력을 하면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
On branch master
 
No commits yet
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
 
        .gitignore
        README.md
        blog/
        db.sqlite3
        feed/
        manage.py
        requirements.txt
        static/
        templates/
 
nothing added to commit but untracked files present (use "git add" to track)
cs


다음과 같이 출력이 되는데, 우리는 db.sqlite3까지 굳이 커밋해줄 필요가 없다. 대용량이기도 하고.

그렇다고 삭제할 순 없으니 .gitignore을 활용해 파일을 숨길 수 있다.


1
echo db.sqlite3 >> .gitignore
cs


입력하면 .gitignore 파일을 만들어 db.sqlite3를 리스트에 등록한다.


다시 git status를 하면


1
2
3
4
5
6
7
8
9
10
Untracked files:
  (use "git add <file>..." to include in what will be committed)
 
        .gitignore
        blog/
        feed/
        manage.py
        requirements.txt
        static/
        templates/
cs


다음과 같이 보이지 않게 된다.

'코딩 연습 > Github' 카테고리의 다른 글

깃에서 미디어 폴더 제외하기  (0) 2018.12.02
블로그 이미지

쵸잇

,

장고는 웹프레임워크이며 자세한 설명은 추후 업데이트 예정


장고를 설치하기에 앞서 파이썬과 가상환경(독립환경)을 설치하여야한다. 

파이썬은 언어프로그램 중 하나라면, 가상환경은 무엇인가?


우리가 원하는 버전의 파이썬과 장고를 독립되게 만들 수 있는 환경을 만들어주는 것이다. 

즉 1대의 컴퓨터에서 무조건 최신버전 한 가지만 써야하는 게 아니라 원하는 조건에 맞게 환경을 구축할 수 있다.

어떤게 좋고 어떤게 나쁘다고 볼 수 없고, 자신의 쓰임에 맞게 활용하면 된다.

컴퓨터에 여러 가상환경을 만들 수 있어 다양한 웹사이트 구축이 가능해 편리한 개발환경을 만들어준다.


한 번 더 설명하자면, 우리가 공기 방울을 무수히 만들 수 있는데,

처음 만든 방울에는 파이썬 3.5 버전, 장고 2.5 버전이 설치되어있고,

다음으로 만든 방울에는 파이썬 3.7 버전, 장고 2.7 버전이 설치되어있다.

이 방울은 서로 영향을 주지 않고 독립적으로 프로그램 개발을 할 수 있게 해준다는 말이다.



1. 가상환경(독립환경) 만들어주기


1
C:\Users\user>pip install Virtualenv
cs


명령프롬프트(cmd)에서 "pip install Virtualenv"를 입력하면 가상환경 라이브러리가 설치된다. (Virtual Environment를 줄여쓴 것이다.)


pip : 라이브러리를 관리해주는 툴

(라이브러리 : 개발에 필요한 도구를 모아둔 도구상자. 라이브러리 단어 그대로 도서관이라면 그 안에 책은 도구라고 이해하면 된다)


1
C:\Users\user>mkdir python_project
cs


이제 우리의 프로젝트 메인 폴더를 만들어보자. 여기에는 가상환경과 장고로 만들 프로젝트가 담길 것이다.

mkdir은 make directory의 줄임말로 폴더를 만든다. 폴더명은 임의로 지정가능하다. 편의상 폴더명을 'python_project'라고 하겠다.


1
C:\Users\user>cd python_project
cs


python_project 폴더가 만들어졌으니 폴더 안으로 접속하려면 cd python_project 라고 입력하면 된다.


1
C:\Users\user\python_project>python -m venv my_python
cs


다음 명령어를 입력하여 파이썬에게 my_python 이라는 이름을 가진 가상환경을 만들게 한다.

venv는 virtual environment를 뜻하고, 뒤이어 가상환경의 이름을 임의로 my_python이라고 입력한다.


1
C:\Users\user\python_project\my_python>
cs


my_python 폴더에는 가상환경에 대한 정보를 담고 있다.


1
C:\Users\user\python_project\my_python>cd ..
cs


cd .. 을 입력하면 my_python 폴더에서 python_project 폴더로 빠져나온다.



그럼 이제 우리가 만든 가상환경인 my_python에 접속해보자.


1
C:\Users\user\python_project>my_python\scripts\activate
cs


다음과 같이 입력하면 가상환경을 활성화시켜 접속하게 되는데,


1
(my_python) C:\Users\user\python_project>
cs


접속 후에 안보이던 글자가 나타난다. 

이것이 바로 우리가 만든 가상환경인 my_python이다.



2. 독립환경에서 장고 설치하기(1.10버전 설치)


1
(my_python) C:\Users\user\python_project>pip install django==1.10
cs


장고도 웹사이트를 만들어주는 일종의 도구상자로서 라이브러리이다. 가상환경을 설치하는 방식과 똑같다.


1
(my_python) C:\Users\user\python_project>django-admin startproject my_first_project
cs


장고가 설치된 후에는 장고 명령어를 입력할 수 있다.

이제 우리가 앞으로 장고로 만들 프로젝트 폴더명의 이름을 my_first_project라고 한다.

이 폴더에는 웹사이트를 만드는데 필요한 정보가 설치되고 우리는 이 폴더를 적극 활용하게 될 것이다.


* my_first_project 폴더를 만들면 폴더 안에 my_first_project 폴더가 있으므로 헷갈릴 수 있으므로 상위 폴더를 src로 수정한다.



1
(my_python) C:\Users\user\python_project>django-admin startproject my_first_project .
cs

* 새로운 폴더를 만들지 않고 현재폴더에 설치하려면 마지막에 .(점)을 반드시 찍어야한다.


3. 기본 데이터베이스 만들기


1
(my_python) C:\Users\user\python_project\src>python manage.py migrate
cs


장고의 기본 데이터베이스를 만들어주는 명령어이다.

이것이 장고로 개발시 편리한 점이기도 하다. 별도의 서버 프로그램 설치가 필요없이 장고 안에서 간단히 데이터베이스를 만들 수 있다. 


4. 서버 작동시키기


웹사이트를 구축하기 위해서는 서버를 운영해야한다. 항상 작업을 시작하기 전에 우리는 서버를 작동시켜주는 명령어를 입력할 필요가 있다.


1
(my_python) C:\Users\user\python_project\src>python manage.py runserver
cs


입력을 하면 우리가 작업할 최초의 웹사이트를 개시시켜준다.


5. 라이브러리 설치하기


1
(my_python) C:\Users\user\python_project\src>pip freeze
cs


설치된 라이브러리를 확인할 수 있다.


1
(my_python) C:\Users\user\python_project\src>pip freeze > requirements.txt
cs


설치된 라이브러리 목록을 requirements.txt에 생성한다.

이유는 나중에 다른 개발자와 협업할 경우 어떤 라이브러리가 쓰였는지 확인 가능하거나, 간편히 전체 목록을 불러올 수 있다.





블로그 이미지

쵸잇

,

지금까지 알게된 술어는 동사, 형용사, 是이다. 

중국어에서는 술어를 5가지로 나누는데, 위에 3가지와 有, 在를 포함한다.


1. 소유를 나타내는 동사로 '있다'를 뜻한다. 부정형은 没(有)생략 가능하다. 


我有手机(shǒujī) 나는 휴대폰이 있다. (机는 '기계'를 지칭한다)

他有病(bìng) 그는 병이 있다. (비속어로 他有病吗? 는 "쟤 왜 저래?"의 의미를 갖는다)



2. 존재를 나타내는 ,  


有는 소유 말고도 존재를 나타내기도 하는데, 장소가 有 에 사람·사물은 에 위치해야한다.

学校里有学生 학교 안에는 (알지 못하는)학생이 있다. 

桌子上有钱包 책상 위에는 (주인을 모르는)지갑이 있다

* 단, 有를 쓸 경우 사물·사람은 우리가 모르는 불특정 대상이어야 한다.  


在는 有와 해석이 똑같지만, 장소가 在 에 사람·사물은 에 위치한다.

那个学生在学校里 (내가 아는)그 학생은 학교에 있다

我的钱包在桌子上 내 지갑은 책상 위에 있다

* 在는 우리가 아는 특정 대상을 주어로 사용한다.


'외국어 > 중국어' 카테고리의 다른 글

조동사 可以  (0) 2018.11.20
정도보어(상태보어)와 得  (0) 2018.11.19
기초문법 (4) - 방위사  (0) 2018.10.20
기초 문법 (2)  (0) 2018.10.03
기초 문법 (1)  (0) 2018.10.02
블로그 이미지

쵸잇

,


영어를 처음 공부할때 정말 이해가 안가는 문법이었다.

대학생때 토익을 공부하면서 문법적으로 이해를 했다만 독해를 하는 경우를 제외하고 실생활에서 거의 써본 적이 없다.

대략적으로 의미파악만 가능해서 어떠한 상황에서 현재완료가 포함된 일상대화를 하는지 미드를 보면서도 궁금했다.


인터넷에서 자료를 찾아봐도 다들 책에서 그대로 따라 작성한 자료가 대부분이다.

완료, 경험, 결과를 표현할때 사용한다는 바로 그 설명이다.


현재완료를 회화에서 가장 많이 쓴 경우는 경험을 뜻하는 Have you ever been ~ ? 표현이다.

그 말고는 정말 회화에서 1도 쓰지 않았고, 작문 공부하다가 점수를 더 받으려 있어 보이려고 쓴 적은 있다.


1달 전쯤 교포 유투브를 보며 작성한 현재완료 자료가 밑에 있는데, 결국 이것도 활용하지 못했다.



다른 자료를 조금 더 찾아봤는데, 호기심 많은 두 분이 벌써 글을 작성해주셨다.


https://brunch.co.kr/@byungsikkim/1

https://brunch.co.kr/@dohyunkim/20


두 분 모두 외국인의 현재완료의 쓰임을 살펴보니,

언제 어떠한 행위를 했는지 떠오르지 않거나, 언제 했는지 물어보는게 귀찮은 경우에 쓰인다는 걸 캐치하셨다.


시점을 언급하지 않고 가볍게 대답하거나 질문하는 뉘앙스로 외국인들도 캐주얼하게 쓴다는 점이다.

반문해보니 우리도 대화 중에 언제 뭘 했다고 잘 하지 않는다. 굳이 말할 필요가 없기 때문에. 


활용도를 높이려면 시점에 대한 강박을 버려야할 것 같다.


새로 공부했으니 이 방식을 아래 자료에 접근해보겠다. 빨간색 번역

for 또는 since가 쓰인 현재완료는 평소 우리가 공부해온 방식이 더 매끄럽게 번역된다. "~동안 ~이래로 쭉 ~하다"



현재완료 


- 과거에 시작된 일의 현재 상황을 표현한다.

- 단순 과거는 과거에 시작되서 과거에 끝났으므로 현재는 그 일이 어떠한 상태인지 모른다.


I did my homework. 숙제를 했다.

I have done my homework. 숙제를 했다. (구체적인 시간은 모르지만 숙제를 끝낸 상태)


한국인 입장에서는 2개의 예문이 동일하게 해석된다. 

원어민의 입장에서는 둘 다 똑같이 이해될 수도 있지만, 현재완료를 사용하면 조금 더 구체적으로 뜻의 차이를 파악할 수 있다.


I have done my homework ▶ I did my homework. + And now, my homework is done.


현재완료 문장을 풀어서 이해하면 과거 어느 시점에서 시작된 숙제가 지금에서야 끝이났다는 뉘앙스를 준다.


I lived in Korea for 20 years. 나는 한국에서 20년 동안 살았다.

I have lived in Korea for 20 years. 나는 한국에서 20년 동안 살았다. 


위의 설명을 이해했다면 예문을 이해하는데 어렵지 않을 것이다.

이어서 현재완료진행을 알아보자.


I have been living in Korea for 20 years. 나는 한국에서 20년째 살고 있는 중이다.


for을 '~동안'으로 진행형과 어울려 해석하니 어색한 감이 있어 의역을 조금 했다.

현재진행형도 마찬가지로 과거에 시작되어서 지금 순간까지 지속됨을 나타낸다.



현재완료 연습겸 자료를 찾다가 좋은 설명을 발견했다.


https://www.ef.com/english-resources/english-grammar/present-perfect/


원문이지만 어렵지 않아서 쉽게 이해할 수 있을 것이다.

우리식으로 현재완료를 완료, 경험, 계속, 결과 4가지로 딱 잘라 나누지 않고 풀어서 설명해주어서 좋다.


내가 부족한 부분을 속 시원하게 설명해주었다.

"행위가 일어난 구체적 시간이 중요치 않거나 모를 때"


그럼 캐주얼하게 현재완료를 사용해볼 수 있다.


He has arrived at home. 그는 집에 도착했다 ▶ (언제쯤 왔는지 모르겠지만) 그는 집에 도착한 상태다

I have met her four times. 나는 그녀를 네 번 만났다 (언제쯤 만난지 모르겠지만) 나는 그녀를 네 번이나 만난 상태다

She has gone for the day. 그녀는 퇴근했다 ▶ (언제쯤 퇴근했는지 모르겠지만) 그녀는 퇴근을 한 상태다

I think I have seen that movie before. 나는 전에 그 영화를 본 것 같다 ▶ (언제쯤 봤는지 모르겠지만) 나는 전에 그 영화를 본 상태다




'외국어 > 영어' 카테고리의 다른 글

as long as, as far as 파헤치기  (0) 2018.12.16
조동사 can, could는 어떻게 쓸까  (0) 2018.12.14
블로그 이미지

쵸잇

,

함수

코딩 연습/Python 2018. 10. 4. 01:18

함수는 긴 코드를 보다 간결하고 보기 쉽게 보조해주는 기능이다.


어떤 상황에서 함수의 필요성이 생기는지 살펴보자.


1
2
3
4
5
6
7
8
9
10
11
name1 = "jeremi"
name2 = "paul"
name3 = "ryan"
name4 = "selena"
name5 = "adrianne"
 
print("hello, {}".format(name1))
print("hello, {}".format(name2))
print("hello, {}".format(name3))
print("hello, {}".format(name4))
print("hello, {}".format(name5))
cs


각각 변수에 이름을 지정해주었다.

그리고 'hello, 이름'의 형태로 출력하려고 한다.


문제는 이러한 변수와 print 함수의 개수가 기하급수적으로 늘어나면 어떻게 될까?

그리고 'hello'에서 'hi'로 변경하고 싶다면 수정해야할 코드량이 그만큼 늘어날 것이다.


1
print("hello, {}".format(name))

cs


지속적으로 반복되는 이 코드를 함수 활용으로 코드량을 줄이고 수정도 용이한 형태로 만들어보자.


def 함수명(매개변수):

return 반환값


기본 함수 형태를 확인하고, 


1
2
def hello_friend(name):
    print("hi, {}".format(name))
cs


우리가 만든 함수는 hello_friend 이름을 가졌고, name은 매개변수로 입력 받은 값을 넘겨주는 역할을 한다.

return인 반환값이 없어도 hello_friend 함수 호출시 print함수가 항상 작동한다. 


1
2
3
4
hello_friend(name1)
>> hi, jeremi
hello_friend(name5)
>> hi, adrianne
cs


함수 호출은 함수명을 작성하고 넘겨줄 값의 변수를 소괄호에 넣어준다.

우리가 앞서 지정한 변수의 값을 넘겨 받아 출력된다.


수정도 손쉽게 할 수 있다.


1
2
def hello_friend(name):
    print("hello, {}".format(name))
cs


코드를 한 번 살짝 변경하면 달라진 결과물을 얻을 수 있다.

블로그 이미지

쵸잇

,

for와 while은 반복을 수행하는 문법이다.


- 반복문은 동일한 값이나 일정 범위의 값을 일일이 작성하기가 번거로워 생긴 문법이다.

- 반복문을 잘 활용하면 코드 사용량을 줄일 수 있어 자주 쓰이는 문법 중에 하나이다.


1. for 문


- 영어에서 for는 시간(또는 기간)을 나타내는 명사와 함께 쓰여 '~동안에'라는 의미를 갖는다는 걸 알고있다.

- for 문에서는 시간은 아니지만 일정 범위에 해당하는 목록을 지정해서 사용한다.


for 변수명 in 변수로 지정될 데이터의 범위:

반복할 코드


- for 문의 형태이다.


1
2
for num in range(110):
    print(num)
cs


- for 문의 예시이다. 

- range 함수를 활용하여 1~9까지의 숫자를 범위로 지정했다. (컴퓨터언어는 숫자가 0부터 시작이므로 10은 9를 뜻한다)

- 범위에 포함된 숫자 1~9를 변수 num에 하나씩 전달한다.

- 변수 num을 print하면 개수 만큼 9번 반복해서 숫자를 순서대로 하나씩 출력한다.


1
2
3
4
5
6
7
8
9
10
11
12
for num in range(110):
    print(num)
>>
1
2
3
4
5
6
7
8
9
cs


- 범위를 range 함수 말고도 list, tuple, set, dict과 같은 목록 형태의 자료형을 사용할 수 있다. (자료형에 대해선 별도로 다룰 것이다)


1
2
3
4
num_list = [123456789]
 
for num in num_list:
    print(num)
cs


- 숫자 1~9를 리스트로 만들어 num_list 변수의 값으로 지정

- range(1, 10)과 동일하게 리스트의 숫자를 하나씩 num 변수로 보내어 반복 출력한다.



2. while 문


- while 문은 if 문과 for 문의 기능을 내포하고 있다.

- if 문처럼 조건에 부합 여부에 따라 while 문을 작동시켜 코드를 반복한다.


1
2
while True:
    print(1)
cs


- 예시로 조건이 항상 참이 되도록 while 문을 작성하면 print(1) 함수가 무한히 반복되는 무한루프가 발생한다.

(무한루프 : 코드의 한 구간이 끝나지 않고 무한히 반복되는 현상)

- 그럼 숫자 1만 한 번씩 무한히 반복된다.


1
2
3
4
= 1
while a < 10:
    print(a)
    a = a + 1
cs


- 우선 변수 a에 1을 값으로 지정 

- while 문에 변수 a가 10보다 작은 경우에 반복이 되도록 조건을 지정

- 조건이 참인 경우 print 함수는 넘겨받은 변수의 값을 출력한다. 

- 마지막으로 변수의 값에 1을 더해 변수 a에 대입하고 다시 처음으로 돌아간다.

- a가 1씩 증가해 9가 되면 최종적으로 변수가 10이 되므로 반복은 멈추게 된다.

'코딩 연습 > Python' 카테고리의 다른 글

함수  (0) 2018.10.04
클래스(class) (3) - 내장함수 활용 및 클래스 상속  (0) 2018.10.03
클래스(class) (2) - 내장함수 활용하기  (0) 2018.10.02
클래스(class) (1)  (0) 2018.10.01
블로그 이미지

쵸잇

,