개발자 하고 싶다!!!

15. 객체와 변수

1_Python2019. 1. 19. 18:51

1. 공부한 내용

 1) 객체 프로그래밍에서의 인스턴스 변수에 대한 이해를 높힘

 2) 외부에서 인스턴스 변수에 접근하는 방법(=속성)과 접근 불가능하게 하는 방법 습득


2. 실습 내용 

 No

 입력 코드

결과 

 중요한 부분

class C(object):

    def __init__(self, v): 

        self.value = v

    def show(self):

        print(self.value)

    def setValue(self, v):

        self.value = v

    def getValue(self):

        return self.value


c1 = C(10)

print(c1.getValue())

c1.setValue(20)

print(c1.getValue())


10

20

1. set/get 변수 설정

 1) Python은 외부에서 <c1.value = 20> 방식으로 인스턴스 변수값을 

    변경하는 것과, <print(c1.value)> 방식으로 변수에 접근하는 게 가능

 2) 하지만 통념적으로는 읽을 때는 <get> 쓸 때는 <set>으로 함수를 

    지정하여 접근하는 것이 옳은 방식임

 3) 이렇게 외부에서 접근/변경이 가능한 값을 속성(Property)라고 함

 2

class Cal(object): 

    def __init__(self, v1, v2): 

        self.v1 = v1

        self.v2 = v2


    def add(self): 

        return self.v1 + self.v2

        

    def subtract(self):

        return self.v1 - self.v2


    def setV1(self, v1):

        if isinstance(v1, int):                           

            self.v1 = v1

            

    def getV1(self):

        return self.v1


c1 = Cal(10,10)

print(c1.add())

print(c1.subtract())

c1.setV1('one')

c1.setV1(20)

print(c1.add())

print(c1.getV1())

20

0

30

20

1. get/set 함수를 사용하는 이유

 1) 통념적인 이유 뿐만 아니라 인스턴스 변수를 단순히 <c1.value = 20> 

    로 변경할 경우 입력값에 대한 Data type(문자열인지, 정수인지)을 

    확인할 수 없으므로 실수로 잘못 입력하면 오류 발생 가능성 있음

 3) 따라서 set 함수에 <if isinstance(v1, int)>를 사용하여 set 함수에 

    들어간 값이 정수(int)인 경우에만 인스턴스 변수를 변경할 수 있도록

    조건 설정이 가능함 (그 외 함수 활용 가능!)

 4) 이렇게 설정할 경우 <c1.setV1('one')>를 추가해도 값이 문자열이기 

    때문에 무시


 3

class C(object):

    def __init__(self, v): 

        self.__value = v 

    def getValue(self):

        print(self.__value)


c1 = C(10)

print(c1.__value) <- 출력 안 됨

c1.getValue()

(<print(c1.__value)> 무시됨)

10 (c1.show()에 대한 결과)

1. 외부에서 인스턴스 변수에 접근할 수 없게 하는 방법

 1) Python은 기본적으로 인스턴스 변수에 접근 가능하기 때문에

    필요에 따라 접근 불가능하게 막을 수 있음

 2) 특히 class 내부에서만 활용하는 변수인 경우, 변수값에 < __ >를 추가

    하여 외부에서 접근/변경이 불가능하게 할 수 있음

 3) 따라서 외부에서 접근/변경 하려면 반드시 메소드를 통해서만 가능

    <print(c1.__value)> 는 출력 안 됨, <c1.getValue()> 는 출력됨


4. 궁금점/감상

 1) 인스턴스 변수에 대한 확고한 정의, 이해가 필요함! (다행히 아직까지 90% 이상은 이해하고 있음...ㅎㅎ)



'1_Python' 카테고리의 다른 글

14. 객체 (Class) / 객체 지향 프로그래밍  (0) 2019.01.13
13. 모듈 (Module)  (0) 2019.01.12
12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15

1. 공부한 내용

 1) Class(객체)라는 개념 이해

 2) Class(객체) 생성 및 활용

 3) 객체 지향 프로그래밍을 해야 하는 이유


2. 의미/중요한 부분

 1) 객체 지향 프로그래밍(Object Oriented Programming)이란, 객체(object = class+instance)를 사용하는 프로그래밍 방식

 2) 모듈과 다르게 객체의 class 에는 관련되어 있는 함수(메소드) 뿐만 아니라 관련된 변수도 포함되어 있음

     예를 들어, ruby의 내장 class인 string에는 upcase(대문자 표시)와 reverse(문자 반대로 표시) 등의 함수가 존재

 3) 인스턴스(instance)에는 해당 class가 가지고 있는 함수와 변수를 가지고 있으며, 거기에 대해서 인스턴스 만의 값(인스턴스 변수)이 존재

 4) class에 존재하는 함수(메소드)에서 인스턴스 변수를 사용하려면, 생성자(__init__)에서 매개 변수로 self를 지정, 각 메소드에서 활용

 5) 객체 지향 프로그래밍을 해야 하는 이유

 - 여러 개의 메소드(함수)를 하나의 class으로 묶어 연관성을 잘 나타내서 가독성을 높힐 수 있음 (class의 메소드는 인스턴스로 복제 되기 때문)

 - 프로그램이 복잡해질 경우, 기존에 정의한 여러 개의 메소드(함수)와의 중복/충돌이 일어나는 걸 미연에 방지할 수 있음

   즉, 객체(class) 라는 block으로 묶여져 있어서 안전하게 보관할 수 있음 


3. 실습 내용 

 No

 입력 코드

결과 

 설명

class Cal(object): 

    def __init__(self, v1, v2): 

        self.v1 = v1

        self.v2 = v2


    def add(self): 

        return self.v1 + self.v2

        

    def subtract(self):

        return self.v1 + self.v2


c1 = Cal(10,10)

print(c1.add())

print(c1.subtract())


c2 = Cal(30,20)

print(c2.add())

print(c2.subtract())

20

0

50

10

1. 객체(class) 생성


 1) class의 첫 번째 메소드(함수), 생성자 (__init__)

 - 모든 class에는 class 안의 메소드가 호출되기 전에 공통으로 실행되는 

   생성자(init)가 존재하며 <def __init__>의 첫번째 매개 변수로는 <self>

 - <self>는 다른 이름으로도 지정 가능하며, class의 다른 메소드에서 

   인스턴스 변수를 인식, 활용할 수 있도록 하는 역할을 함

 - <__init__>에 있는 변수(v1, v2)는 다른 메소드에서 사용 불가

   <self.v1 = v1>과 같이 인스턴스 변수를 지정해야 함


 2) 객체 안의 메소드 생성

 - 해당 객체 안에[ 메소드를 생성할 때는 <def add(self):> 방식으로 입력,

   생성자(init)에서 지정한 인스턴스 변수를 활용함


2. 생성한 객체(claas)를 활용한 인스턴스 생성


 1) <Cal(10,10)>은, <Cal> class에 10,10이라는 인스턴스를 생성한 것이며,

    <c1 = Cal(10,10)>로서 c1가 해당 cal와 값을 가진 인스턴스 변수가 됨

 2) <c1.add()>은, 인스턴스 변수(c1)에 Cal의 class에 있는

     add 메소드를 호출, 인스턴스 변수에 들어있는 값을 이용해 연산됨



4. 궁금점/감상

 1) 역시나 이해하는 데에 많은 시간이 걸린 객체 지향 프로그래밍...ㅠㅠ

 2) 모듈화 해서 사용하는 것과의 차이는, 객체화(class)하여 충돌을 방지할 수 있기 때문...이 가장 큰가? (모듈에도 변수 넣을 수 있지 않나?) 더 공부가 필요하다!



'1_Python' 카테고리의 다른 글

15. 객체와 변수  (0) 2019.01.19
13. 모듈 (Module)  (0) 2019.01.12
12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15

13. 모듈 (Module)

1_Python2019. 1. 12. 17:33

1. 공부한 내용

 1) 모듈(Module)의 개념 이해

 2) 모듈 또한 내장 모듈이 있고 직접 모듈을 만들 수도 있음 (별도의 file로)

 

2. 실습 내용 

 No

 입력 코드

결과 

 설명

 1

import math

print(math.ceil(2.1))

print(math.floor(2.1))

print(math.sqrt(4))

3

2

2


1. 내장 모듈 사용


<import math>를 입력하므로서 <math>라는 내장 모듈을 불러옴

그 상태에서 <math.XXX>의 형식으로 math 모듈 안에 있는 함수를 사용함


math는 연산 관련 모듈이며 안에 들어 있는 함수는 

ceil(소수점 올림), floor(소수점 내림), sqrt(제곱근) 등이 있음

from sdm import b as z

import har as k

print(k.a())

print(z())


 - sdm의 모듈 내용 -

def a():

    return 'a'

def b():

    return 'b'

def c():

    return 'c'


 - har 모듈 내용 -
def a():
    return 'B'

B

b

2. 모듈 작성 후 사용


 1) sdm, har 라는 모듈 작성

 - 각 모듈에 왼쪽에 나온 것처럼 함수를 정의함


 2) 모듈 호출 및 Print

 - 일반적인 모듈 호출은 <import har> 이며, <har>라는 모듈 이름을 바꾸고 싶은 경우, 뒤에 <as k> 추가

 - import 한 모듈를 사용할 경우, <모듈 이름.함수이름()> 형식으로 입력

   예시 : import har / print(har.a())

 - 호출할 모듈 안에 일부 함수만 사용하는 경우,

   <from sdm import b> 형식으로 입력

    즉, sdm의 모듈에 b라는 함수만 import 한다는 의미)

 - from 로 입력한 모듈의 경우, 모듈 이름 없이 함수로만 호출함

    즉, sdm.a() 형식이 아닌 그냥 a()


* 다른 모듈에 각각 같은 이름의 함수가 존재하는 경우, 나중에 import 된 모듈의 함수를 호출함

 3

import auth


input_id=input("아이디를 입력해주세요. \n")


if auth.login(input_id):

        print('hello!, ' + input_id)

else:

        print('Who are you?')


 - auth 모듈의 내용 - 


def login(_id):

        members = ['har', 'space', 'SDM']

        for member in members:

                if member == _id:

                        return True

        return False

(입력) har (혹은 space, SDM)

(출력) hello!, har


(입력) asdajlds

(출력) Who are you?

3. 기존 로그인 어플리케이션에 모듈 적용


 1) auth 라는 이름의 모듈을 작성, 그 안에 login 함수를 정의해놓음

 2) 별도의 file에서 <import auth> 하여 모듈을 불러온 뒤,

    <auth.login()> 하여 auth 모듈 내의 login 함수 호출함

 3) 나머지는 기존 로그인 어플리케이션 그대로


* auth에 있는 함수와 변수를 다른 곳에서도 import 하여 재활용이 가능함


3. 의미/중요한 부분

 1) 모듈을 만들어 성격이 비슷한 함수(내장 함수로 예를 들면 math는 연산자 관련 함수들이 들어 있음)를 모아 놓을 수 있음

 2) 모듈은 file로서 존재하며 안에 변수 및 함수를 담아 '재활용' 할 수 있음


4. 궁금점/감상

 1) 항상 생각하자! 좋은 프로그래머가 되기 위한 조건!

  중복의 제거! 

  ②기존 작성한 함수, 변수는 모듈화 하여 재활용! 

  ③수정이 필요한 변수값(데이터)는 여러 곳에 두지 말고 모아서 한 번의 수정으로 바뀌게끔 할 것!


'1_Python' 카테고리의 다른 글

15. 객체와 변수  (0) 2019.01.19
14. 객체 (Class) / 객체 지향 프로그래밍  (0) 2019.01.13
12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15

12. 함수

1_Python2019. 1. 6. 17:17

1. 공부한 내용

 1) 함수의 개념 (내장 함수/외장 함수) 확인

 2) 함수를 직접 만들고 정의하는 방법 및 return 값에 대한 의미 숙지

 3) 직접 만든 함수(외장 함수)에 입력값을 지정하는 방법 숙지

 4) 직접 함수를 만들어서 로그인 어플리케이션 작성


2. 실습 내용 

 No

 입력 코드

결과 

 설명

 1

def a3():

    print('aaa')


a3()

aaa

1. 함수를 지정하는 함수 정의


함수 지정을 위한 함수는 def 임

<def a3():>로 작성하면 a3라는 이름의 함수가 정의됨

def a3():

    return 'aaa'

print(a3())

aaa

2. 함수를 지정할 때 return 값의 존재 유무에 따른 차이


①return 값이 존재 하지 않으면

 - def에 지정된 내장 함수의 값만 출력 (print, len 등)

 - 내장 함수도 없는 경우, None를 출력함

 - 즉, 함수가 호출되도 아무런 값도 반환되지 않음


②return 값이 존재하면

 - def에서 최종 계산/연산된 값이 함수가 호출된 지점에 반환함

 - 내장 함수(print, len 등)이 없는 경우 프로그램 상에서는 아무런 값도 표시

   되지 않으나 해당 함수의 값은 존재함

 - 함수를 정의함으로서 해당 반환된 값을 언제든 호출하여 활용할 수 있음

 - return 이후 해당 함수 연산이 끝나기 때문에 def 안에 존재하는, return 이후의 코드는 실행 안 됨

 3

num = input("a를 몇 번 반복하시겠습니까? \n")


def a(num):

    return 'a' * int(num)


print(a(num))


* 실습 코드에서 <input>를 추가해봄!

(입력) 5

(출력) aaaaa

3. 지정 함수에 입력값을 부여하는 방법


def로 정의한 함수 안(괄호 안)에 변수를 지정하여 값을 입력할 수 있음

즉, 함수 안에 num라는 변수를 지정 후 5라는 입력값을 받아 

print로 해당 함수를 호출하면,

정의한 함수 안의 계산식 ('a' * num)을 return 해서 출력됨


기존 실습 예제에 input를 활용하여,

실제 사용자의 입력값을 받아서 계산하는 코드로 바꿔봄 ㅎㅎ

(int는 입력값을 정수로 인식하기 위한 코드)

 4

def make_string(str, num):

    return str * num


print(make_string('abc\n', 2))


abc

abc

4. 외장 함수에 여러 개의 입력 값을 넣기


def로 정의한 함수 안(괄호 안)에 여러 개의 변수를 지정하여,

1개가 아닌 여러 개의 입력 값을 받아 함수 값을 호출 할 수 있음


왼쪽 예제의 경우, 먼저 make_string 라는 함수 안에

str, num 라는 변수를 지정 후

그 아래에 <str * num> 값이 <return> 되는 함수를 정의함


이후 make_string 함수를 print할 때, 

각각 str과 num에 해당하는 변수 값을 지정(abc, 2)하면 

함수에 입력된 <str * num> 라는 코드에 따라 계산된 값이 <return> 됨


... 하 적어놓고 보니 엄청 장황하다 ㅠㅠ  일단 이해했음!

def login(_id):

        members = ['har', 'space', 'SDM']

        for member in members:

                if member == _id:

                        return True

        return False


input_id=input("아이디를 입력해주세요. \n")


if login(input_id):

        print('hello!, ' + input_id)

else:

        print('Who are you?')

아이디를 입력해주세요

(입력) har

(출력) Hello!, har


(입력) space

(출력) Hello!, space


(입력) SDM

(출력) Hello!, SDM


(입력) adsahkdasjdlk

(출력) who are you?

5. 로그인 어플리케이션의 코드를 함수로 지정하기


1) <def login(_id):>라는 함수에 로그인 어플리케이션 코드 입력

2) 해당 함수에 기존에 존재했던 list(members), for문을 그대로 입력

3) 만약(if) 함수의 변수(_id)가 for문의 member(members list)와 같으면, 

   함수값으로 <True>를 return함 (이후 함수 연산 종료)

4) 함수의 변수(_id)가 같지 않으면, for문(반복문)의 if가 종료 되지 않으므로,

   for문의 아래에 <False>를 return함 (이후 함수 연산 종료)

5) 변수 값의 연결 고리

 - input_id -> login(input_id) -> 외장 함수 login(_id) -> for, if문 _id

 - har 입력 -> login(har) -> 외장 함수 login(har) -> for, if문 _id = har


* 함수의 변수값(_id)을 지정할 때는 내장 함수와 겹치지 않도록 설정

* for문 안에는 <return>이든 기존에 배운 <import sys, sys.exit>로 맺어야

  함수 연산이 정상적으로 종료됨


3. 응용 내용

 만들고자 하는 코드

만들어본 코드 

 결과

 설명

원가와 마진을 입력하면,

단가가 산출되는 코드

(관세는 8%로 고정) 

def margin(_mg):

        return 1 - float(_mg)


def price(_tp):

        duty = 1.08

        return int(_tp) * duty


input_tp=input("TP를 입력해주세요. \n")

input_margin=input("마진을 입력해주세요. \n (관세는 8% 고정. 마진 5%인 경우, 0.05 입력) \n")


import math

print(math.ceil(price(input_tp)/margin(input_margin)))

TP를 입력해주세요.

(입력) 200

마진을 입력해주세요.

(관세는 8% 고정. 마진 5%인 경우, 0.05 입력)

(입력) 0.05


(결과) 228

... 만들어 놓고 보니 뭔가 삽질한 느낌이

물신 나지만...


어쨌든 def를 이용하여 각각,

원가에 관세 8%를 계산한 값을 리턴,

마진을 계산한 값을 리턴하여

관세 8%에 마진이 계산된 단가를 산출


이렇게 안 해도 되는 건데...;;

어쨌든 응용해봄!


4. 의미/중요한 부분

 1) 함수를 정의하여 작성하는 코드는, 해당 file 안에 대량의 코드를 입력하거나, 해당 함수가 반복적으로 이루어지거나, 동시에 여럿이서 수정을 할 때 유용함

 2) 단 한 번의 연산을 하는 내용은, 굳이 함수 정의를 할 필요는 없음

 3) return 값의 유무에 따라 정의한 함수의 값이 달라지니 주의!


5. 궁금점/감상

 1) 함수가 값을 입력 받아 값을 반환하는 과정을 여러 번 복습할 필요가 있어 보임... (헷깔려 ㅠㅠ)

'1_Python' 카테고리의 다른 글

14. 객체 (Class) / 객체 지향 프로그래밍  (0) 2019.01.13
13. 모듈 (Module)  (0) 2019.01.12
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15
9. 컨테이너 (Container)  (0) 2018.12.15

1. 공부한 내용

 1) 반복문을 이용해서 컨테이너를 다루는 방법 숙지 (중복 삭제)

 2) while 보다 좀 더 간결하게 표현 가능한 for in 코드를 활용한 반복문 작성 방법 숙지

 3) for문 응용 활용법 숙지


2. 실습 내용 

 입력 코드

결과 

 설명

members = ['SDM', 'Single', 'Seoul']

print(members[0])

print(members[1])

print(members[2])

SDM

Single

Seoul

단순 컨테이너의 원소값을 Index 순서대로 반복 출력함

반복되는 코드가 3개를 아래와 같이 반복문을 통해 중복 삭제 가능

members = ['SDM', 'Single', 'Seoul']

i = 0

while i < len(members):

    print(members[i])

    i = i + 1

SDM

Single

Seoul

출력 결과는 상기의 코드와 같으나 코드 자체가 간결해짐

< len(members) >를 통해 members 라는 컨테이너에 들어간

원소 갯수에 맞춰 원소값을 모두 출력


이 경우 list의 원소값이 3개고 i가 원소값보다 작을 때 True 이기 때문에,

0~2까지의 index가 출력됨 (i = i + 1)

즉, 저 상태로 list에 원소값을 추가/수정하는 것으로 출력값에 반영됨!

members = ['SDM', 'Single', 'Seoul']

for member in members:

    print(member)

SDM

Single

Seoul

for in문을 통해 members 라는 list(컨테이너) 안의 원소값을 

순서대로 반복하여 출력함


즉, for 뒤에는 해당 list의 원소값을 꺼낼 변수를 지정 후 뒤에 list가 옴

 -> for 변수값 in list(컨테이너) = for member in members


따라서 for in문 뒤에 오는 <print(member)>에는 members의 원소값이 담겨서 순서대로 반복되어 출력


* 위의 while 코드와 결과값은 같으나 작성된 코드가 간결하며 다른 코드에 영향 받을 가능성이 적음

for item in range(5, 11):

    print(item)

5

6

7

8

9

10

range는 반복 범위를 지정하는 코드이며 5, 11인 경우 

5부터 6번(11) 실행되면서

<item>이라는 변수에 담겨 5,6,7,8,9,10의 숫자가 출력됨


만약 <print(item)> 부분을 <print(hello)>로 수정하면,

hello가 6번 반복 출력됨

input_id=input("아이디를 입력해주세요. \n")

ids = ['har', 'space', 'SDM']

for id in ids:

    if id == input_id:

        print('Hello!, ' +id)

        import sys

        sys.exit()

print('who are you?')

아이디를 입력해주세요

(입력) har

(출력) Hello!, har


(입력) space

(출력) Hello!, space


(입력) SDM

(출력) Hello!, SDM


(입력) adsahkdasjdlk

(출력) who are you?

전제 1) ids 라는 list에 3개의 id가 존재함

전제 2) <for id in ids:> 코드를 통해 ids의 list 갯수만큼 3번 반복됨

전제 3) for문 안에 if 조건문 <if id == input+id:> 추가하여

          입력한 id(input_id)가 id(ids의 각 3개의 원소)와 True일 때,

          if문 안에 적은 <print("Hello!, ' +id)> 가 출력됨

          이후 <import sys, sys.exit()>를 통해 for 반복문 종료

전제 4) if문이 False면 if문 밖에 있는 <print('who are you?')>가 출력됨


* 단순히 코드를 작성하는 게 아닌, 위와 같이 풀어서 생각하는 게 중요!


3. 응용 내용

 기존 코드

학습 응용 코드 

 결과

 설명

i = 0

while i < 10:

    print('print("Hello world '+str(i*9)+'")')

    i = i + 1

for i in range(10):

    print('print("Hello world '+str(i*9)+'")')

print("Hello world 0")

print("Hello world 9")

print("Hello world 18")

print("Hello world 27")

print("Hello world 36")

기존에 while 반복문으로 작성한 것을

for문을 통해 좀 더 간결하게 작성함


결과는 완전 동일하나 입력 코드는 

네 줄에서 두 줄로 많이 줄어듬!!!


4. 의미/중요한 부분

 1) 이번 시간을 통해 좀 더 반복문과 컨테이너 개념의 이해를 높힐 수 있었던 거 같음!

 2) for문은 while문과 대비하여 반복해야 하는 횟수 변수(while의 i)를 별도로 지정하지 않아도, range로도 해결 가능함. 고로 다른 코드에 영향 받을 가능성이 낮음!

 3) for <변수명> in <변수에 들어갈 내용(range 혹은 list)>를 꼭 기억하자! for는 in 뒤에 들어가는 list의 갯수 또는 range 범위에 따라 반복 횟수가 정해짐

 4) for문은 별도의 반복 중지<import sys, sys.exit()>를 넣어주지 않으면 반복이 계속됨 (...맞나?)


5. 궁금점/감상

 1) 기존에 배운 코드를 이번에 배운 코드로 바꿔서 응용해보니 신기하기도 하고... 앞으로 이런 응용 학습을 자주 해야 겠다고 생각함

'1_Python' 카테고리의 다른 글

13. 모듈 (Module)  (0) 2019.01.12
12. 함수  (0) 2019.01.06
10. 반복문  (0) 2018.12.15
9. 컨테이너 (Container)  (0) 2018.12.15
8. 주석  (0) 2018.11.17

10. 반복문

1_Python2018. 12. 15. 18:51

1. 공부한 내용

 1) 반복문의 기본 문법(while) 숙지

 2) 반복되는 횟수 설정 방법

 3) 반복될 때마다 내용이 일부 바뀌도록 하는 방법 숙지

 4) 반복문 안에 조건문을 넣어서 반복되는 횟수 및 출력 결과를 다르게 하는 방법 숙지


2. 실습 내용 

 입력 코드

결과 

 설명

while False:    

    print('Hello world')

print('After while')

After while

반복문(while) 뒤에는 반드시 True 혹은 False가 와야 함

횟수 지정 없이 True로 설정할 경우, 반복문이 무한 반복됨

False의 경우 while 안에 속한 코드는 동작 안 함 (일반 boolean과 동일)

i = 0

while i < 3:

    print('Hello world')

    i = i + 1

Hello world

Hello world

Hello world


보통 반복문의 횟수를 지정하는 변수는 i를 사용

while 안에 있는 <i = i + 1>이 한 번 실행 될 때마다 i의 값이 달라짐

반복문 안에 반복되는 횟수를 지정하는 변수를 넣는 게 Point


i은 최초 0으로 시작하여 한 번 반복 될 때마다 + 1이 되며,

i가 3보다 작으면 True, 2 이상의 큰 숫자가 되면 

<while i < 3:>은 False로 변경됨

즉, 0, 1, 2의 순서로 3번 값이 바뀌므로 총 3번 반복되는 횟수가 지정

i = 0

while i < 10:

    print('print("Hello world '+str(i*9)+'")')

    i = i + 1

print("Hello world 0")

print("Hello world 9")

print("Hello world 18")

print("Hello world 27")

print("Hello world 36")

print("Hello world 45")

print("Hello world 54")

print("Hello world 63")

print("Hello world 72")

print("Hello world 81")

본 코딩은 9로 반복되는 코드를 만들기 위한 것임

(0~81까지의 숫자를 직접 입력하려고 하면 많이 번거롭기 때문)


<while i < 10:>을 통해 총 10번을 반복하는 반복문 (0~9)

<print("hello world 0")>식의 결과값을 얻기 위해,

print 안에 print를 넣는 방식의 코드임


숫자 부분은 9를 반복해야 하므로 <i*9>를 넣어야 하며,

해당 결과값을 숫자가 아닌 문자열로 바꾸기 위해 <str()>을 사용

문자열로 바뀐 값을 Hello world의 문자열과 결합하기 위해,

<'+str(i*9)+'>로 바꿔야 함

i = 0

while i < 10:

    if i != 4:

        print(i)

    i = i + 1

0

1

2

3

5

6

7

8

9

<while i < 10:>이므로 총 10번을 반복하는 반복문 (0~9)

반복문에 조건문의 <if i != 4:>를 추가하면,

i의 값이 4가 아닐 때 참(True)이 되므로 4를 제외한 값이 출력

(즉, 4는 False이기 때문에 미출력)


<if i == 4:>으로 바꾸면 4의 결과만 참(True)가 되므로 4만 출력됨

i = 0

while i < 10:

    if i == 4:

        break

    print(i)

    i = i + 1

print('after while')


0

1

2

3

after while

기존 10번 반복의 반복문에 <if i == 4:>의 조건문과

해당 조건문에 <break>를 추가하면

10번 반복이 아닌 4번 반복 후 멈춤 (i가 4일 때 break)


i의 최초 값은 0이므로 0~3이 출력되며

break 이후에는 반복문(while) 및 조건문(if)에 기재되지 않은,

나머지 코드가 실행/출력됨


3. 의미/중요한 부분

 1) 반복문(while) 뒤에는 반드시 True/False(같거나 크거나 작거나)와 같은 boolean가 들어가야 함

 2) 반복문 자체 혹은 조건문을 추가하여 반복되는 횟수나 출력되는 값을 바꿀 수 있음

 3) 반복되는 코드를 입력해야 할 경우, 반복문을 통해 해당 코드가 출력되게끔 해서 복/붙으로 쉽게 입력 할 수 있다는 점이 중요!


4. 궁금점/감상

 1) 반복문은 꼭 한 번 더 반복이 필요할 것으로 생각. 조건문과 블리언도...

 2) 반복문 이거 단순한 거 같으면서도 이것저것(일정 규칙으로 반복되는 숫자 추가 등)도 더해지면... 살짝 어렵넹

'1_Python' 카테고리의 다른 글

12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
9. 컨테이너 (Container)  (0) 2018.12.15
8. 주석  (0) 2018.11.17
7. 논리 연산자  (0) 2018.11.11

1. 공부한 내용

 1) 하나의 변수 안에 여러 개의 원소를 넣을 수 있는 컨테이너 (Container) 이론 공부 (Python에서는 list, Ruby에서는 Array)

 2) Python 공식 사이트를 통해 원하는 기능을 탐색, 사용하는 방법 숙지


2. 실습 내용 

 입력 코드

결과 

 설명

print(type('har'))

name = 'har'

print(name)

print(type(['har', 'new year', 'korean']))

names = ['har', 'new year', 'korean', 33, True]

print(names[4])

names[1] = 2019

print(names)

<class 'str'>

har

<class 'list'>

True

['har', 2019, 'korean', 33, True]

type을 통해 문자열(str)인지 컨테이너(list)인지 확인할 수 있음

문자열은 ''로 묶고, 리스트는 []로 묶음

리스트에는 숫자, 문자열, 블리언 등을 다양한 데이터형을 한꺼번에 묶을 수 있음


리스트의 Index(순서)는 0부터 시작됨

<print(리스트명[index])>를 통해 해당 원소값만 출력 가능하며,

<리스트명[index] = 원소값>를 통해 해당 원소의 값을 변경 가능

SDM = ['Seoul', 'Man', '2018 - 33 age']

print(len(SDM))

SDM.append('Single')

print(SDM)

del(SDM[0])

print(SDM)

3

['Seoul', 'Man', '2018 - 33 age', 'Single']

['Man', '2018 - 33 age', 'Single']

<len(리스트명)> = 해당 리스트 index의 갯수 확인

<리스트명.append('원소값')> = 해당 리스트 끝에 새로운 원소값 추가

<del(리스트명[index])> = 해당 리스트의 해당 index 원소값을 삭제

<print(min(리스트명))> = 해당 리스트의 가장 작은 값을 출력

<print(max(리스트명))> = 해당 리스트의 가장 큰 값을 출력


3. 의미/중요한 부분

 1) 하나의 문자열로 된 것은 변수, 여러 문자열 혹은 다양한 데이터형을 가진 변수값의 Type은 Container (python에서는 list)

 2) 컨테이너의 활용법에 대해서는 그때 그때 숙지할 것. 어떤 것들이 있는 지는 python site(https://docs.python.org/3/library/index.html)에서 확인


4. 궁금점/감상

 1) 감으로는 앞으로 컨테이너가 어떤 식으로 쓰일 지, 예상은 되지만... 활용법이 다양한 만큼 숙지하는 데 시간이 필요할 듯?

 2) 영어..영어...영어!!! ㅠㅠ 

'1_Python' 카테고리의 다른 글

11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15
8. 주석  (0) 2018.11.17
7. 논리 연산자  (0) 2018.11.11
6. 입력과 출력  (0) 2018.11.11

8. 주석

1_Python2018. 11. 17. 19:25

1. 공부한 내용

 1) 적어 놓은 코딩의 부연 설명이나 문자열을 생략하여 실행되지 않게 해주는 주석(#) 기능 활용법


2. 실습 내용 

 입력 코드

결과 

 설명


1. 주석(#)을 걸지 않은 코드

# user input password

input="abc"

real_har=11

real_space="abc"

if real_har == input:

    print("Hello!, har")

elif real_space == input:

    print("Hello!, space")

else:

    print("Who are you?")


2. 일부 조건문에 주석(#)을 건 코드

# user input password

input="abc"

real_har=11

# real_space="abc"

if real_har == input:

    print("Hello!, har")

# elif real_space == input:

#     print("Hello!, space")

else:

    print("Who are you?")


1. 주석(#)을 걸지 않은 코드의 결과

Hello! space (elif의 조건문 결과 출력)


2. 일부 조건문에 주석(#)을 건 코드의 결과

Who are you? (else의 조건문 결과 출력)



문자열 앞에 #를 추가하면 프로그램 실행 시, 

문자열이 아닌 해당 코드의부연 설명을 위한 주석으로 인식함


1.의 결과는 코딩 안에 주석이 없으므로 아무런 영향이 없음

  input가 abc이므로 변수값 real_space=abc 및 동등연산자가 True


2.의 결과는 real_space=abc의 변수값과,

  elif real_space == input:의 동등 연산자 앞에 #가 추가 되면서,

  프로그램 실행 시 주석으로 인식됨

  


3. 의미/중요한 부분

 1) 주석을 적절하게 사용하므로서 제 3자가 이해할 수 있도록 부연 설명 가능

 2) 미리 작성한 코딩 내용을 on/off 하는 기능으로서 사용하여 다양한 결과를 확인 할 수 있음

 3) Atom 프로그램 사용 시, 주석 on/off의 단축키는 Ctrl + /


4. 궁금점/감상

 1) 가장 중요한 건 주석을 사용하지 않아도 제 3자가 이해할 수 있어야 한다는 저엄~

 2) 단, 하나의 코딩 내용으로 여러 결과 값을 확인할 때는 유용할 거 같음!

'1_Python' 카테고리의 다른 글

10. 반복문  (0) 2018.12.15
9. 컨테이너 (Container)  (0) 2018.12.15
7. 논리 연산자  (0) 2018.11.11
6. 입력과 출력  (0) 2018.11.11
5. 조건문  (0) 2018.10.14