● 변수 : 한 개의 값을 저장하는 것

숫자, 문자열, boolean 등 각각의 값을 할당한 변수를 정의할 수 있다.

정의 시 할당한 값의 타입이 그 변수의 타입으로 결정된다.

 

변수를 연산하기 위해서는 타입을 통일해야 한다.

비교연산자는 true나 false등 bool값을 반환해줘

● 연산자

1. 산술연산자 : + - * ** / // %

2. 비교연산자 : < > <= >= == !=

a = 10, b = 15

a, b = 10, 15

3. 논리연산자 : bool값에 대한 연산 (True / False)

and or not

and : 피 연산자 모두 True 일때만 True, 나머지는 False

or : 피 연산자 하나만 True이면 True

not : 반전

 

4. 대입연산자 : = 오른쪽 값을 왼쪽에 할당

 

● 제어문 : 프로그램 문장의 흐름을 제어하는 문

1. 조건문 : atm 출금. 카드를 넣는다. 카드 비밀번호를 입력한다.

yes : 출금할 금액을 인출한다.

no : 비밀번호를 다싯 입력한다.

위의 예처럼 한 상황에서 여러 경우의 수가 발생했을 때 이를 조건문으로 구현할 수 있다.

조건을 따져서 True, False 등 bool값에 따라 실행문을 다르게 구현할 수 있다.

1) if문 : 조건을 만족할 경우 실행할 코드만 구현. 조건을 만족하면 if블록을 실행하고 조건이 false이면 건너뜀

 

if 조건 :

      실행문

2) if - else문 : 조건 하나를 명시하고 이 조건이 True이면 if블록을 실행하고 False이면 else블록을 실행. 합격/불합격, 짝수/홀수

 

3) if -elif문

if 조건1 - elif 조건2 - elif 조건3 - else문

다양한 조건을 제시하여 True인 조건 블록만 실행하고 종료

어느 조건도 True가 아니면 else블록 실행

만약 조건1을 만족하지 않으면 그 다음조건인 조건2, 조건3 이렇게 순서대로 실행한다.

 

● 반복문 : 특정 문장을 조건을 만족하는 동안이나, 지정한 횟수만큼 반복하는 문

1) while문 : 조건을 따져서 True이면 반복하고 False이면 while문을 빠져나간다

loop를 빠져나오는 명령어 : break

 

2) for문 : 리스트, 문자열 등 나열된 값의 갯수만큼 반복하고자 할 때 사용

혹은 지정한 횟수만큼 반복하고자 할 때 사용

range를 이용해서 1씩 감소시키면서 가능 

b = 'abcdefghijk'

for i in b:
    print(i)
print()

for i in range(-1, -12, -1):
    print(b[i])
print()

ㅇ ㅇ역순으로 추출

 

 

 

 

 

for i in range(1, len(b) + 1):
    print(b[0:i])
print()

 

 

range함수(시작값, 끝값, 간격)

 

<1>

어제 내용 복습

tuple : 여러개를 반환, 요소 자체 변경이 불가하고 추가 /삭제도 불가하다.

tuple에는 대입 연산자를 사용할 수 없다.

다이렉트로는 안되지만 우회적으로 하는 건 가능(요소로 리스트를 넣어준다)

 

키를 같이 제공하는 이유가

dic은 키와 값을 같이 저장

tuple list는 순서가 있어

 

<꼭 알아야 하는 것>

기본 : 변수, 연산자, 제어문

응용 : 리스트

 

나중에 유지보수를 어떻게 편하게 할 수 있을까 이것도 봐야해

모듈을 부품이라 생각해

 

함수를 사용하는 이유는 자주 사용하는 코드를 반복적으로 작성하지 않고 모듈화하여

필요할 떄 호출해서 반복사용하는 방법

 

<함수사용방법>

* 함수 정의 :

def 함수명(파라메터 리스트):

     실행문1

     실행문2

* 함수 호출 : 

 

 

프로그램을 짜는 이유는 사용자들에게 판매하려고..

유즈케이스를 통해 기능들을 정의

함수 만들기 전에 필요한 기능과 변수들을 정리한 후

순서대로 만든다.

 

파라메터 0, 1, 2,,,

결과물 : 리턴값

 

함수이름 : 어떠한 기능을 수행하는지 알려주는 이름

값을 받아오려면 이런식으로 구현

def add(a, b):

     c = a + b

     #print(c)

      return(c)

 

외부로부터 값을 안 받아와도 되면 이런식으로 구현

def hello():

     print('hello')

호출을 하지 않으면 실행이 안돼

 

함수호출은 이름을 불러줘

만약 함수에 파라메터가 있다면 호출 시 그 값을 넣어줘

add(1, 2) 

 

함수를 호출하면 그 함수로 점프한다.

프로그램은 순서대로 실행됐지만 함수는 순서대로 진행하다가 함수로 점프됨

대입연산자는 우선순위가 나중이다

 

<2>

호출할떄 값을 넣어주는 걸 아규먼트

받는 걸 파라미터


# 파라메터로 단수를 받아 구구단 한단 출력하는 함수 정의, 호출, 반환값 없음

구구단 함수

def gugudan(dan):
    for i in range(1, 10):
        print(dan, ' * ', i, ' = ', dan * i)

gugudan(3)

3단을 출력

 

 

 

2-9단 구구단

for i in range(2, 10):
    gugudan(i)

이렇게 2단부터 9단까지 출력된다.

 

계싼기 만들기

def add(a, b):
    c = a + b
    return c

def minus(a, b):
    c = a - b
    return c

def multiple(a, b):
    c = a * b
    return c

def divide(a,b):
    c = a / b
    return c

x = 12
y = 3

print(x, ' + ', y, ' = ', add(x, y))
print(x, ' - ', y, ' = ', minus(x, y))
print(x, ' * ', y, ' = ', multiple(x, y))
print(x, ' / ', y, ' = ', divide(x, y))

 

def 더하기(a, b):#a, b:계산할 숫자 2개
    c=a+b
    return c

def 빼기(a, b):
    return a-b

def 곱하기(a, b):
    return a*b

def 나누기(a, b):#함수에서 아무값도 반환하지 않으면 None객체 전달됨
    if b!=0:
        return a/b


x = 6
y = 3
print(x,' + ', y, ' = ', 더하기(x, y))
print(x,' - ', y, ' = ', 빼기(x, y))
print(x,' * ', y, ' = ', 곱하기(x, y))
res = 나누기(x, y)
if res==None:
    print('0으로 나눌 수 없음')
else:
    print(x,' / ', y, ' = ', res)

 

<3>

약수

 

# 파라메터로 숫자를 받아서 그 숫자의 약수 출력하는 함수, 리턴값 없음
def 약수(num):
    print(num, '의 약수 : ', end='')
    for i in range(1, num+1):
        if num % i == 0:
            print(i, end=' , ')
    print()

x = int(input('num : '))
약수(x)

def 약수2(num):
    res = []
    for i in range(1, num + 1):
        if num % i ==0:
            res.append(i)
    return res

def 약수프린트(data):
    print(data[len(data) - 1], '의 약수 : ', end='')
    for i in data:
        print(i, end=' ,')
    print()

x = int(input('num : '))
d = 약수2(x)
약수프린트(d)

 

파이썬의 모든 변수는 값이 들어가는 게 아니라 참조값(주소값)이 들어가는 것

<4>

<점심>

<5>

지역변수는 가장 가까운 것부터 출력

없으면 그럼 전역변수에 있나.. 하고 확인하고 출력

 

만약 전역변수에도 없으면 에러가 나

함수안에 그 이름으로 만든 함수가 있다면 지역변수를 사용하고 없다면 전역변수를 사용한다.

 

지역변수는 어디든 사용이 가능하다.

전역변수는 그 함수 내에서만 사용이 가능하다.

 

읽기를 할때는 전역변수를 사용하면 되고, 단 전역변수 값을 수정하고자 하면 값을 할당하면 지역변수를 생성하므로 global num 이라고 위에 작성을 해줘야 한다.

 

global이 없으면 지역변수

글로벌로 지정하면 전역변수로 되기 때문에 똑같은 이름을 못써

지역 변수 : 함수 내에서 선언한 변수로, 해당 함수가 실행되는 동안에만 존재하며 실행이 끝나면 사라진다.

전역 변수 : 프로그램 내 어디에서나 사용 가능한 변수

 

 

 

 

 

 

# a라는 이름의 리스트를 생성. 숫자 1, 2, 3, 4, 5로 초기화해서 생성하시오.

a = []
for i in range(1, 6):
a. append(i)
print(a)

 

# a의 요소를 하나씩 출력
for i, j in enumerate(a):
print (j)

# a의 인덱스가 2인 요소의 값을 13으로 변경하시오
i =a.index(2)
a[i] = 13
print(a)

# a의 요소 중 짝수만 출력
even = []
for i, j in enumerate(a):
if j % 2 == 0:
even.append(j)
print(even)

# a의 인덱스가 2인 요소를 삭제하시오

del a[2]
print(a)

# 이름이 b 2 3칸 리스트를 생성, 모두 0으로 초기화해서 생성

b = [[0] * 3] * 2]
print(b)

# 0번줄의 2번방 요소를 10으로 변경

b[0][2] = 10
print(b)


# b의 요소를 0번 줄은 [1, 2, 3], 1번 줄은 [4, 5, 6]로 변경

for i in range(0, 3):
del b[0][0:3]
b.append(i + 1)
print(b)

'''
# b의 모든 요소 출력
for i in range(0, 3):
for j in range(0, 3):
print[i][j]

'''

<2>

집합 데이터를 프로그램에서 효율적으로 다루기 위해

리스트, 셋, 튜플, 딕셔너리 등을 사용할 수 있다.

 

list 변경

set 변경불가

tuple 변경 불가, 함수 반환값

dictionary 

 

변수는 다른 것을 계속 대입해서 값을 변경할 수 있다.

값을 변경하기 싫으면 list를 사용하면 된다.

 

파이썬이나 자바는 할당받지 않은 방보다 더 큰 인덱스에 항목을 입력할 수 없다.

 

리스트를 사용하는 방법은 대괄호로 나열을 하거나 리스트 함수를 사용하거나, 초기화하여 추가하는 방법 등이 있다.

<3>

퀴즈 해석

# 0번줄의 2번방 요소를 10으로 변경

b[0][2] = 10

print(b[0][2])

print(b)

# b의 요소를 0번 줄은 [1, 2, 3], 1번 줄은 [4, 5, 6]로 변경

for in range(0, 3):
del b[0][0:3]
b.append(i + 1)
print(b)

'''
# b의 모든 요소 출력
for i in range(0, 3):
for j in range(0, 3):
print[i][j]

 

얕은복사

a = [1, 2, 3]
b = a
print(a)
print(b)

a[2] = 30
print(a)
print(b)

이렇게 했는데 a[2]만 바꿨는데 b도 바뀌어 버렸다.

그 이유는 참조값이 복사 되었기 떄문이다.

b = a 의 주소값만 복사가 된 거기 때문에, a를 바꾸면 b도 바뀐다. (사실상 a는 b와 같다.)

메모리는 한 개인데 이름만 두개인 꼴..

import copy

a = [1, 2, 3]
b = copy.copy(a)
print(a)
print(b)

a[2] = 30
print(a)
print(b)

copy 함수를 활용할 수 있다. 이걸 쓰려면 import copy() 를 하면 된다

<4>

copy처럼 유용한 함수를 미리 누군가가 구현해둔 라이브러리를 사용할 수 있다.

import copy 처럼 불러와서 사용할 수 있다.

import는 다른 기능들을 불러다 쓸 때 자주 사용한다.

deepcopy도 copy와 비슷한 거다.

opencv에서도 이미지를 처리할 때 얕은카피가 아닌

deepcopy를 사용해야 한다. 얕은복사를 하면 원본 손상이 일어날 수 있다.

 

set : 집합

요소의 중복허용을 허락하지 않는다.

순서가 없다.

요소를 변경하는 건 불가하지만 셋 자체는 변경이 가능하다 (데이터를 삭제하거나 추가하는 건 가능하다)

 

리스트는 인덱스 순서가 있는데 셋은 없다.

중복이 되나 안되나 체크를 하려면 tree 구조를 이용해 정렬해야 한다.

대괄호 ( [ ] ) 가 아닌 중괄호 ( { } ) 로 만든다.

s = {1, 2, 3}
print(s)
print(type(s))

 

이렇게 만들면 

 

 

 

 

리스트처럼 중괄호로 만들면 타입이 딕셔너리로 나올 수 있다.

s = {}
print(type(s))

s= set()
print(type(s))

 

그렇기 때문에 세트를 생성하려면 set함수를 사용해서 생성해야 한다.

 

요소의 순서가 없기 떄문에 인덱스도 없다.

s = {1, 2, 3}
for i in s:
    print(i)

for문을 돌려 요소 값을 하나씩 꺼내는 건 가능하지만 인덱스가 없기 때문에 인덱스를 사용하여 호출하거나 출력하는 것을 불가하다.

 

 

 

s = {'aaa', 1, False}
print(s)

순서가 없기 때문에

 

순서대로 출력되지는 않는다.

 

변경 가능한 요소를 가질 수 없기 때문에 set를 값으로 가질 수 없다. list도 가질 수 없다.

s = {1, 2, {3, 4, 5}}
print(s)
s = {1, 2, [3, 4, 5]}
print(s)

 

그렇기 떄문에 에러가 뜬다.

 

 

셋에 요소를 추가할 수 있다.

add함수를 활용할 수 있다.

s.add('bbb')
print(s)

한개씩만 추가가 가능하기 때문에 여러개를 하려면 다른 함수를 사용해야 한다.

 

여러개를 추가하려면 update 함수를 사용해야 한다.

a = [5, 6, 7]
s.update(a)
print(s)

 

리스트 추가는 안되지만 이렇게 하나씩 리스트 내의 값을 빼내서 추가할 수 있다.

 

요소 삭제도 가능하다.

 

s.remove('aaa')
s.discard(1)
print(s)

 

둘다 삭제하는 건데 remove 함수는 없는 요소를 삭제했을 때 에러가 뜨고 discard는 없는 요소를 삭제해도 에러가 뜨지 않는다.

 

pop함수는 한개씩 빼는거다.

x = s.pop()
print(x, ' 가 삭제됨')
print(s)

x = s.pop()
print(x, ' 가 삭제됨')
print(s)

이렇게 두번 반복을 하면

하나씩 삭제된 것을 확인할 수 있다.

 

clear함수는 모든 요소를 삭제하는 함수이다. 리스트에서도 동일하게 적용된다.

s.clear()
print(s)

 

<점심시간>

<5>

튜플도 집합데이터를 다룬다.

요소도 변경안됨, 튜플도 변경안됨

고정된 집합데이터를 저장하거나 읽는 작업

추가, 삭제도 안돼

다만 우회적으로 변경이 가능하고 MUTABLE 요소도 가능하다.

보통 여러개의 값을 한번에 초기화하는 작업에 많이 사용한다.

a, b, c = 1, 2, 3
print(a)
print(b)
print(c)

 

나열하여 변수 여러개를 초기화

위의 경우에 묵시적으로 튜플이 사용됐다고 본다.

 

튜플을 생성하는 법은 일반 소괄호다.

다른 리스트나 딕셔너리와 괄호의 종류만 달라지지 파이썬 자체에서는 생성하는 법이 거의 비슷하다.

t1 = (1, 2, 3)

튜플은 인덱스 사용이 가능하다.

t1 = (1, 2, 3)
for i in t1:
    print(i, end=', ')
print()

for i in range(0, len(t1)):
    print(t1[i], end=', ')
print()

 

이러하다.

 

리스트를 넣어도 된다.

 

t2 = ('asd', 12, True, [3, 4, 5])
print(t2)

 

 

 

빈 튜플을 생성할 때는 빈 괄호로 할 수 있다.

t3 = ()
print(type(t3))

 

 

다만 값이 한 개인 튜플을 생성할때는 값 하나만 괄호에 넣으면 안된다.

그렇게 되면 그 해당 값의 타입형으로 반환되기 때문에 값에 무조건 

t4 = (1)
print(type(t4))

t5 = (1,)
print(type(t5))

t6 = ('d')
print(type(t6))

t7 = ('d',)
print(type(t7))

 

요소 값이 1개인 튜플을 생성할 때 뒤에 콤마( , ) 를 해줘야 한다.

문자열이든, 숫자든 관계없다.

 

튜플은 생성 이후에 다이렉트로 추가 변경은 어렵지만 우회적으로는 가능하다.

다만, 튜플에 들어가있는 건 안되고 리스트에 들어가있는 항목들만 가능하다.

t1 = (1, 2, 3, 4, [5, 6, 7])
print(t1)

t1[4][0] = 50
print(t1)

t1[4].append(8)
print(t1)

del t1[4][0]
print(t1)

 

 

튜플은 함수의 파라미터ㅏ 어쩌고...

 

딕셔너리

키와 값을 묶어서 저장

키는 중복 허용 안 함. 키는 중복되면 안되지만 값은 중복되도 상관없다..

키의 타입은 변경불가한 값, 값의 타입은 제약이 없다.

요소 추가, 변경, 삭제가 가능하다.

 

키와 값을 묶어서 저장한다.

 

{'name': 'aaa', 'age': '12', 'flag': True}
<class 'dict'>
{1: 'aaa', 2: 'bbbb', 3: 'ccc'}
<class 'dict'>

 

 

 

앞의 것들은 인덱스로 접근했지만 키 이름으로 접근이 가능하다는 게 특징이다.

print(d1['name'])
print(d1['age'])
print(d1['flag'])

 

요소를 접근할 떄 이렇게 가능하다.

요소를 추가할 떄는 

키와 같이 추가해줘야 ㅎ ㅏㄴ다.

d1['tel'] = '1234'
print(d1)

 

이미 있는 키를 추가하면 값이 변경된다. 수정할 떄 이렇게 하면 된다.

d1['name'] = 'bbb'
print(d1)

 

전체 항목을 불러올 떄는

items 함수를 사용할 수 있다.

d1['name'] = 'bbb'
print(d1)

items = d1.items()
print(items)
for i in items:
    print(i)

 

 

 

요소를 삭제하려면 del 함수를 사용하면 된다.

del d1['name']
print(d1)

 

 

요소를 접근할 때 다양한 함수를 사용할 수가 있다.

get함수는 키에 해당하는 값을 반환해준다.

d1['name'] = 'aaa'
print(d1.get('name'))

name에 다시 aaa를 넣고 값을 부르면

 

keys 함수는 키의 목록을 반환해준다. values 함수는 키의 값을 반환해준다.

keys = d1.keys()
print(keys)

vals = d1.values()
print(vals)

이렇게 나온다.

 

 

 

 

for k in keys:
    val = d1[k]
    print(k, ' : ', val)

d1.clear()
print(d1)

 

 

 

사용 빈도수는 리스트가 제일 높다.

num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
    print('*' * i)

num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
    print(' ' * (num-i), '*' * i)

 

num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
    print(' ' * (num-i), '*' * (2 * i - 1))

 

num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
    print(' ' * (num-i), '*' * (2 * i - 1))
    if num == i:
        for i in range(num - 1, 0, -1):
            print(' ' * (num-i), '*' * (2 * i - 1))

for i in range(2, 101):
    TF = True
    for j in range(2, i):
        if i % j == 0:
            TF = False
            break
    if TF:
        print(i, end=' ')

 

 

<1>

 

 

 

변수는 값 1개만 저장된다

하나의 변수에 값을 여러개 담아야 할 때 사용하는 것은 리스트(list)

리스트는 집합 데이터를 효율적으로 활용하기 위해서 사용한다.

 

a = [1, 2, 3]
b = ['asdf', 'ghj', 'jkl']
c = [12.24, 34.56]
d = [True, False, True]

 

이러한 식으로 숫자, 문자열, 실수, boolean 등 다양한 타입을 넣을 수 있다.

리스트의 각 항목들이 들어가있는 순서를 방 번호라고 생각하고, 방 번호로 호출할 수 있다.

이것을 인덱스라고 부른다.

예를 들어 첫번째 항목을 부르고 싶으면 리스트명[0], 두번째 항목은 리스트명[1] 이런식으로 부를 수 있다.

빈 리스트를 만드는 방법은 두가지가 있다.

e = []
f = list()

이렇게 빈 리스트를 할당하거나, list함수를 통해 생성이 가능하다.

 

 

 

append 함수는 방을 확장하고 값을 저장할 수 있다.

a.append(4)

이런식으로 하면 4를 넣을 수 있다.

 

e = []
e[0] = 1

빈 리스트에 이렇게 넣으면 안된다.

무조건 append 사용해야 한다.

 

파이썬은 타입에 자유로운데 이유는 모든 타입이 참조타입이기 때문이다.

데이터는 변수 타입이 자유롭기 때문에 좋다.

a = 10
a = 'asdf'

이런 식으로 숫자를 넣었다가 문자열을 넣어도 된다.

 

 

참조값이란 컴퓨터가 자료를 찾을 때 변수에 먼저 접근하는 것이 아니라 주소로 접근한다고 생각하면 된다.

 

 

<2>

 

 

 

리스트의 항목들을 하나씩 출력하려면

 

a = [1, 2, 3]

for i in range(0, 3):
    print(a[i])
for i in a:
    print(i)

위의 방법을 사용할 수 있고, 결과값은 동일하다.

 

리스트의 길이를 알고 싶으면 len함수를 사용할 수 있다.

len함수는 길이, 즉 length를 묻는 함수이다.

a = [1, 2, 3, 4, 5]
print(len(a))

이렇게 요소가 다섯개 인 리스트의 길이를 출력하면

 

결과는 위와 같다.

 

Quiz. 숫자 10개를 입력받아 리스트에 저장한 뒤 출력하라.

data2 = []
for i in range(0, 10):
    x = int(input('num:'))
    data2.append(x)
print(data2)

결과는 위와 같다.

Quiz. 학생 5명의 점수를 입력받아 총점과 평균을 출력하라.

score = []
sum = 0
for i in range(0, 5):
    x = int(input("점수를 입력하시오 : "))
    score.append(x)
for i in range(0, 5):
    sum += score[i]
avg = sum/len(score)
print('총점은 ', sum, '점')
print('평균은 ', avg, '점')

결과는 위와 같다.

 

 

 

 

<3>

 

변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.

리스트도 요소를 변경할 수 있다.

 

a = [1, 2, 3, 4, 5]
print(a)

a[2] = 30
print(a)

이렇게 리스트 a를 할당해 준 후에 인덱스로 호출하여 값을 변경한 후에 다시 출력해보면

값이 변경된 것을 확인할 수 있다.

 

 

 

 

del 함수를 사용하여 삭제를 할 수도 있다.

del함수는 항목 1개만 사용하는 것이 아니라 원하는 범위만큼 삭제할 수 있다.

del a[2]
print(a)
del a[1:3]
print(a)

처음은 a[2] 요소가 사라진 것을 확인할 수 있다.

그 다음은 a 리스트에서 a[1]부터 a[3] 전까지 삭제하고 나머지만 출력된 값이다.

 

 

 

특정 값을 찾아 삭제하는 것도 가능하다.

a = [1, 2, 3, 4, 5]
a.remove(1)
print(a)

 

remove 함수를 통해 특정 값을 입력해준 뒤 값을 찾아 삭제하는 것이다.

만약에 입력한 특정 값이 없는 값이라면 에러가 뜬다.

 

 

 

리스트에서 인덱스를 출력하는 것도 가능하다.

b = [2, 7, 4, 5, 3]
print(b.index(7))

리스트에서 7이라는 값을 가진 인덱스를 찾아 출력하는 것이고, remove와 마찬가지로 없는 값이라면 에러가 뜬다.

b[1] 항목이 7이기 때문에 1을 반환해준다.

 

 

 

 

리스트 정렬도 가능하다.

list.sort(b)
print(b)

sort 함수를 사용하면 오름차순 순서대로 정렬할 수 있다.

오름차순 순서대로 정렬된 것을 확인할 수 있다.

 

 

 

 

<4>

Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후

최대값과 최소값 출력하라.

 

변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.

리스트

 

Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후

최대값과 최소값 출력하라.

 

변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.

리스트

enumerate

 

 

 

 

<점심시간>

 

 

<5>

 

enumerate 함수는 반복자라고 불린다.

리스트에서 요소를 한개씩 순서대로 추출하는 것을 반복하는 함수다.

방번호(인덱스)와 요소(값)를 추출해서 반환한다.

a = [9, 8, 7, 6, 5]

for idx, i in enumerate(a):
    print(idx, i)

이렇게 코드를 짜게 되면

값이 이렇게 출력된다.

 

 

<6>

 

enumerate

 

a = [9, 8, 7, 6, 5]

for idx, i in enumerate(a):
    print('a[', idx, ']', i)

enumerate

 

 

 

 

다차원 리스트는 복잡한 구조의 데이터를 표현하기 위해 사용

리스트를 요소로 갖는 리스트

 

<7>

Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후

최대값과 최소값 출력하라.

# 성적 처리 프로그램
# 3명의 번호, //수 인력받아 각 학생의 총점, 평균 계싼하여 결과 출력

 

 

# 요소 입력받아 저장

코딩을 할 때 머리로만 생각하지 말고 하드코드 적으며 해라.

 

<8>

Quiz. 성적 처리 프로그램 만들기.

3명의 번호, 국/영/수 입력받아 각 학생의 총점, 평균 계산하여 결과 출력하기

 

<1>

 

가장 중요한 건 영상을 처리하는 것과

머신러닝, 딥러닝을 이용해서 영상학습을 하는 것이다. 이걸 할 줄 알아야 한다.

 

요새 이것을 활용한 딥페이크도 유행을 하는데, 영상을 처리할 때 가장 중요한 것은

잡음을 제거하고 중요한 것에 대한 이미지를 추출해서 컴퓨터를 학습시키는 것이다.

 

 

학습을 시키는 것을 통해 모델을 만들고 그 모델을 통해 서비스를 제공해야 한다.

영상처리 알고리즘이 수학, 미적분으로 되어있다.

 

OpenCV 함수는 C++ 용, Python용이 있는데 이번 수업에서는 파이썬을 통해 구현하는 것을 학습할 것이다.

데이터를 영구적으로 보관하기 위해 데이터베이스에 대해 배울 것이다. (MySQL)

 

빅데이터 : 의미없는 데이터들에서 필요한 의미있는 데이터를 수집하여 분석하고 결과를 만드는 것

 

대개 그러한 데이터는 공공데이터에서 배울 수 있어서 공공데이터를 활용하는 방법을 배울 것이다.

다양한 형태의 파일 (엑셀, csv, json, xml) 을 가져다가 어플리케이션에 활용할 것이다.

파이썬 UI 프로그래밍도 배울 것이다.

또한 파이썬 GUI 프로그래밍 (tkinter) 도 배울 것이다.

OpenCV 머신러닝 라이브러리를 제공해주기때문에 그도 배울 것이다.

 

소켓통신 pc용 프로그램(tcp)도 학습이 필요하다.

 

취업의 길이 가장 넓은 부분은 웹 기반이다. (Java, Spring)

그 중에서도 몸값을 높이려면 스프링을 학습을 해두는 것이 도움이 많이 된다.

 

국가 프로젝트가 스프링 기반이다. (법원, 공공기관 등)

스프링을 할 줄 안다 = 취업의 문이 넓어진다.

 

 

<2>

 

100까지 출력하는 루프를 만들 것이다.

\t ( \탭)를 하면 역슬래쉬 모양이 된다. ( / ) 의 반대방향 모양

이것을 사용하면 프린트할 때 띄어쓰기를 할 수 있다. 즉, 키보드 상의 Space바와 같다고 보면 된다.

 

한 줄에 여러개를 출력하고 싶다면 end를 통해 \t를 사용할 수 있다.

end 파라미터는 마지막에 자동출력되는 문자를 등록할 수 있다.

dafault 값은 \n 이 들어가있다. \n은 줄바꿈문자이기 때문에, 키보드 상의 Enter와 같은 역할을 한다고 보면 된다.

 

i = 1
while i <= 100:
    print(i, end = '\t')
    if i % 10 == 0:
        print()
    i += 1

i가 100과 같거나 작아질때까지 i를 1씩 증가시키며 출력한다.

출력을 하며 빈칸을 같이 출력한다. 만약 나머지가 0이 된다면 줄바꿈을 한다.

 

결과값은 위와 같다.

 

이중 루프도 사용할 수 있다. 물론 이중 뿐만 아니라 삼중, 사중 등등 가능하다.

while문 안에 if를 넣는다든지 

while문 속 while문을 만든다든지 등등 가능하다.

이중 루프가 필요한 이유는 원하는 것을 여러번 반복하며 출력이 필요할 수 있기 때문이다.

 

 

그리고 보통 변수를 증가시키며 up-counting을 하는데 감소시키며 down-counting을 하는 것도 가능하다.

i = 3
while i > 0:
    print('#', end = '')
    i -= 1
print()

 

ㅇㅇㅇ

j = 1
while j < 3:
    i = 1
    while i < 4:
        print('#', end = '')
        i += 1
    print()
    j += 1

 

 

 

Quiz.

1. 1-100 사이의 소수를 출력

 

 

 

 

 

 

<3>

 

 

 

앞에서의 while 이 횟수에 의한 반복이었지만, 조건에 의한 반복을 하는 경우도 많다.

예를 들어 어제 만들었던 합격, 불합격 프로그램을 조건에 따라 만들 수 있다.

 

 

score = 200
while score > 100 or score < 0:
    score = int(input('score (0-100) : '))

if score >= 60:
    print('합격')
else:
    print('불합격')

위와같이 프로그램이 정상적으로 작동하는 것을 확인할 수 있다.

break는 프로그램이 무한루프에 빠지지 않고 루프가 종료될 수 있도록 하는 문구이다.

 

 

<4>

 

 

 

Quiz. 피카츄 프로그램만들기

* hp   [체력]   : 30으로 시작 (0 이면 죽음)

* exp [경험치] : 0으로 시작

* lv    [레벨]   : 1로 시작 (경험치 20마다 레벨 1 증가)

hp = 30
exp = 0
lv = 1


while True:
    menu = int(input('1.밥먹기 2. 잠자기 3. 놀기 4. 운동하기 5. 종료 : '))
    if menu == 1:
        print('밥먹는다.')
        hp += 5
    elif menu == 2:
        print('잠잔다.')
        hp += 10
    elif menu == 3:
        hp -= 5
        exp += 7
        if hp <= 0:
            print('피카츄가 죽었습니다.')
            break
        else:
            print('논다.')
        if exp >= 20:
            exp -= 20
            lv +=1
            print('레벨이 1 증가하였습니다.')
    elif menu == 4:
        print('운동한다.')
        hp -= 15
        exp += 15
    elif menu == 5:
        print('종료')
        break
print('게임종료')

 

 

죽을까봐 밥먹고 재운 다음에 체력을 증가시키고 놀게 했더니 레벨이 증가한 것을 확인할 수 있다.

 

 

그냥 놀게했더니 픽 죽어버렸슈..

 

 

 

 

 

<점심시간>

<5>

 

list : 값 여러개 담는 변수의 확장판 (메모리에 저장한다)

[ ] 형태로 저장을 한다. 

 

b = [1, 2, 3, 4]

이런식이다.

 

 

변수는 변수 하나에 값 한 개만 담을 수 있지만, 리스트는 한 번에 여러개를 담을 수 있다.

 

위의 b 리스트에서 항목을 불러오려면

print(b[0])
print(b[1])
print(b[2])
print(b[3])
print(b[4])

이런식으로 출력이 가능하다.

 

 

첫번째 항목은 1이 아니라 0이다. 메모리는 0부터 시작하기 때문에 0번째부터 시작한다고 생각하면 된다.

 

값이 여러개인 것을 할 때 보통 반복문(for문)을 사용하는데, 이런 반복문에서 list를 많이 사용한다.

위의 반복문은 다섯개이기 때문에 저렇게 쓸 수 있지만 항목들이 매우 많다면 위의 방법으로는 어렵다.

 

그런 경우에 사용할 수 있는 다른 것이 있는데

 

for i in b:
    print(i)

순서대로 b라는 목록에 있는 것에서 하나씩 i를 꺼내서 출력하는 것이다.

결과는 동일하다. 굳이 리스트 목록대로 출력하지 않고 단 두 줄로 전체를 출력할 수 있는 것이다.

 

 

리스트 뿐만 아니라 문자열도 위와 같이 할 수 있다.

for i in 'hello world':
    print(i)

이렇게 하면 결과는.. 

두구두구두구두구

이렇게 문자열에서 하나씩 가져와서 출력하는 것을 확인할 수 있다.

 

 

range는 처음와 끝을 지정해주고 범위의 리스트를 자동으로 생성해주는 것인데, for문과 함께 자주 사용된다.

주의할 점은 헷갈릴 수 있으니 주의해야한다는 점이다.

for i in range(0,5):
    print(i)

이처럼 처음(0)에서 시작해서 끝(5)을 하면 0부터 5까지 리스트에 담기는 것이 아니라

0부터 4까지 생성이 된다.

 

 

그래서 결과는 이렇게 나온다.

 

또 range함수에서는 간격을 설정해줄 수 있다.

for i in range(1, 10, 2):
    print(i)

가장 끝에오는 2가 간격이다.

1부터 10까지 2의 간격으로 리스트를 만들어서 출력하는 것이다.

결과는 1부터 2의 간격씩 출력이 된다.

 

<6>

 

반복문을 작성할 때 탭(tab), 들여쓰기를 주의해야 하는데

a = 10
if a > 10:
    print('true1')
    print('true2')
print('asdf')

 

이런식으로 작성을 하면 asdf는 if문에 속하지 않고 true1, true2만 if문에 속한다는 점을 참고해야 한다.

 

Quiz. 1부터 10까지 출력하시오.

for i in range(1, 11):
    print(i, end= ', ')
print()

Quiz. 1부터 10 사이의 짝수를 출력하시오.

 

Quiz. 1부터 100까지의 합을 구하시오.

Quiz. 구구단 3단을 출력하시오.

 

 

break 가 loop를 마치는 문구라면

continue는 계속해서 다음문장을 실행하지 않고 loop로 다시 올라가서 다음 루프를 다시 실행을 하는 문구다.

 

 

 

 

 

 

 

 

<7>

 

if 조건문에 대한 내용 복습

 

if 조건:
    실행문1
    실행문2
    실행문3
else:
    실행문

조건이 만족할 시 실행하고 싶은 문장이 많다면 이렇게 

 

 

if 조건:
    실행문
elif 조건:
    실행문
else:
    실행문

조건을 흑백논리가 아니라 여러가지 조건을 나열하여 확인하고 싶다면, elif 를 사용하는 방법이 있다.

 

 

while 조건:
    실행문

조건을 만족하는 동안 블록을 실행시키는 것

 

 

100% 이해를 해야 다음으로 넘어가는 건 안 좋은 습관이라고 하셨다.

사실 처음보는 내용은 낯설기 때문에 이해가 잘 안가는 건데, 

개념을 적용하면서 익숙해지는 부분도 있기 때문에 많이 해보면서 터득하는 것도 좋은 방법이라고 말씀하셨다.

 

 

<8>

 

 

Quiz. 1부터 100 사이의 소수 출력

Quiz. 크기 입력받아 삼각형 출력 (왼쪽이 직각)

Quiz. 크기 입력받아 삼각형 출력 (오른쪽이 직각)

Quiz. 크기 입력받아 삼각형 출력 (트리 형태)

Quiz. 크기 입력받아 마름모 출력

 

num = int(input('숫자를 입력하시오 : '))
if num % 2 == 0:
    print('짝수')
else:
    print('홀수')

플레이데이터 인공지능 sw개발자 10기 수업이 시작되었다.

내가 이 수업을 선택한 이유는 데이터전문 회사 주관이라서, 그리고 일반 학원보다는 커리큘럼이 체계적이어 보여서다.

 

'영상처리를 위한 인공지능 sw개발자 과정' 이 정식 명칭이다.

자율주행, 영상인식, 머신러닝, ai 등을 배울 것이다.

커리큘럼은 아래와 같다.

https://playdata.io/artificial_intelligence_10th

 

인공지능 SW 개발자 10기 상세 페이지 - 인공지능, 컴퓨터비전, 머신러닝, 딥러닝, 웹 서비스

플레이데이터 인공지능 SW 개발자 양성 과정 상세 페이지

playdata.io

 

 

이번 수업에서 사용하는, 제공된 교재는

(1) 이것이 MySQL이다 (개정판)

(2) 데이터분석을 위한 파이썬 철저입문

 

이렇게 두권이다.

 

 

 

앞으로 수업 내용을 여기에 정리해보려 한다.

 

 

 

 

 

<1>

 

계산 : CPU ; 사용할 수 있는 언어는 어셈블리어/이진수(binary) 뿐

기억 : 메모리 (RAM)

 

 

프로그램 : 관련된 작업을 위한 명령어의 집합

 

프로그램을 짠다 = 기계한테 명령을 내린다. 다만, 명령어를 순서에 맞게 입력해야 한다.

 

1) 소스를 작성 : 사람의 언어이지만 파이썬 문법에 맞게 작문한다. 컴퓨터에게 편지를 쓰듯이 적어야 한다.

2) 컴파일  : 번역한다. 에러가 뜨면 틀린 부분을 알려주기 때문에 그 부분을 수정하면 된다.

3) 프로그램 실행 : 어떠한 결과값이 나오거나 프로그램이 실행된다.

 

프로그래밍은 눈으로 하는 공부가 아니라 몸으로 하는 공부이기 때문에 많이 작문을 해봐야 실력이 증가한다.

 

이 수업에서는 python을 사용할 것이다.

 

IDLE 를 실행한다.

언어는 두가지 방식의 언어가 있는데 파이썬은 interpreter 방식 언어다. (java, c++ 도 마찬가지)

이는 컴파일한 결과를 저장하지 않고 바로바로 실행하는 방식이다.

 

Python에서 파일을 저장하고 Run Module 을 하면 컴파일과 실행이 동시에 이뤄진다.

만약 Run Module에서 에러가 있다면 Invalid Syntax 라고 뜨며 실행이 되지 않는다.

 

 

 

<2>

PyCharm(파이참)에서 하려면 파이썬을 굳이 설치하지 않아도 된다.

파이참 툴에 기본적으로 파이썬이 들어있기 때문이다.

 

 

변수 : 값을 담는 그릇. 변수는 값이 바뀔 수 있다.

파이썬은 변수를 미리 선언하지 않고 바로 사용한다.

 

변수 이름 규칙 : 영어(대소문자 구분), 한글, 첫글자 제외하고 숫자포함 변수명도 가능, 특수문자는 _ 만 가능

변수 이름은 어떤 값을 가지고 있는지 예측할 수 있는 이름으로 짓는 게 가장 좋다.

 

컴퓨터에서 = 은 같다가 아닌 '대입'의 의미 ; 우측의 값을 좌측에 대입한다.

메모리를 할당하기 때문에 메모리에 저장이 되는데, 메모리값은 사실 주소값이다.

다만, 일일이 주소값을 기억할 수 없기 때문에 이름을 지정하는 것이다. 그 이름이 바로 변수명이다.

 

변수이름 = 값

함수는 기능을 사용하는 것이다.   ex) print() : 콘솔에 출력기능

print 함수는 출력하고 싶은 것을 괄호 안에 넣으면 된다.

변수에 ' ' 형태로 넣으면 그것은 문자열로 인식이 된다.

 

 

<3>

 

연산에 필요한 값을 담기 위함.

값의 종류가 많다.

문자열(텍스트), 숫자(정수/실수), boolean(참/거짓)

 

str : 문자열타입 ('asd, "asdf")

int : 정수타입 (12, 3535)

float : 실수타입 (12.345)

bool : boolean 타입 (True, False)

 

앞에다 샵 (#) 을 붙이면 주석을 달 수 있다.

주석으로 프로그램에 대한 설명을 작성할 수 있다. 주석은 프로그램 실행에 전혀 영향을 주지 않음.

여러 줄을 주석처리 하고 싶다면 작은 따옴표 3개로 할 수 있다. (''')

type 함수는 괄호 안에 넣은 값의 타입을 반환한다.

변수의 타입은 할당한 값의 타입을 따라간다.

 

연산자라는 것이 있다. 계산기와 비슷하다.

+ : 덧셈

 - : 뺼셈

 * : 곱셈

 / : 나눗셈. 나눈 몫을 소숫점까지 반환

// : 나눗셈. 나눈 몫을 정수로 반환

% : 나눗셈. 나눈 나머지 값을 반환

** : 거듭제곱

 

연산작업은 우선순위 순서대로 진행을 한다.

대입연산자는 우선순위가 제일 낮다. ex) c = a+b

여러가지 연산자를 실행해봤다.

 

a = 10
b = 20
c = 0

c = a + b
print(a, '+', b, '=', c)

c = a - b
print(a, '-', b, '=', c)

c = a * b
print(a, '*', b, '=', c)

c = a / b
print(a, '*', b, '=', c)

c = a // b
print(a, '*', b, '=', c)

c = 2 ** 3
print('2**3=', c)

c = 5 % 2
print('5%2=', c)

 

결과는 이러하다.

 

 

 

 

print() : 출력
input() : 키보드 입력을 받는 것

 

name = input('이름을 입력하시오')
print('name: ', name)
age = input('나이를 입력하시오')
print('age: ', age)

 

이렇게 하면 사용자에게 이름을 입력받고, 그 이름이 출력된다.

그 다음 사용자에게 나이를 입력받고, 그 나이가 출력된다.

 

만약에 나이를 입력받고 10년뒤 나이를 출력하고 싶다고 하면

age = input('나이를 입력하시오')
print('10년 뒤 age: ', age+10)

으로 입력을 하면 에러가 뜬다.

왜냐하면 age 는 문자열이기 때문이다.

 

 

 

 

age를 숫자형으로 바꿔줘야 연산을 할 수 있는데, 이럴 때 필요한 것이 캐스팅함수이다.

 

age = input('나이를 입력하시오')
print('10년 뒤 age: ', int(age)+10)

 

age를 int() 안에 넣어 실행하면 정상적으로 실행되는 것을 확인할 수 있다.

 

 

 

 

 

 

Quiz. 숫자 2개를 입력받아 +, -, *, / 연산의 결과를 출력하시오.

 

과제를 내주셨고

구글 클래스라는 서비스를 통해 과제를 제출하였다.

비대면 시대에 맞춰 발빠르게 움직이는 갓구글 대단하다!

 

a = input('숫자를 입력하시오 : ')
b = input('숫자를 입력하시오 : ')
print('a + b : ',int(a)+int(b))
print('a - b : ',int(a)-int(b))
print('a * b : ',int(a)/int(b))
print('a / b : ',int(a)*int(b))

 

위와 같이 제출했는데

일일이 캐스팅 연산자 int()를 넣어주는 것보다 효율적으로 하는 방법이 있다고 알려주셨다.

 

 

a = int(input('숫자를 입력하시오 : '))
b = int(input('숫자를 입력하시오 : '))
print('a + b : ', a+b)
print('a - b : ', a-b)
print('a * b : ', a*b)
print('a / b : ', a/b)

 

이렇게 처음부터 캐스팅연산자를 통해 변환한 값을 할당해주면

훨씬 효율적으로 할 수 있다.

 

 

 

결과는 아래와 같다.

 

비교연산자도 있다.

> ,< 등 연산자 기호를 기준으로 크기를 측정하는 연산자가 있다.

>=, <= :같거나 크다(작다)

== : 같다.

!=  : 다르다.

 

 

논리연산자도 있다.

조건을 연결하여 연산하는 것인데

(조건1) AND (조건 2) : 두 조건이 모두 참이어야 True, 하나라도 거짓이면 결과는 False.

(조건1) OR   (조건 2) : 두 조건 중 한 개라도 참이면 True

not : 조건 반전 (반대)

 

 

대입연산자도 있다. 이름 그대로 대입하는 연산을 하는 것이다.

 

=  b : a에 b를 넣는다.

a += b : a에 a+b를 넣는다.

a -=  b : a에 a-b를 넣는다.

a *=  b : a에 a*b를 넣는다.

a /=  b : a에 a/b를 넣는다.

a %= b : a에 a%를 넣는다.

 

 

 

 

<점심시간>

 

<4>

제어문 : 프로그램의 흐름을 제어하는 문장으로, 프로그램의 가장 기초적이고 기본적인 부분

프로그램의 뼈대라고 생각하면 된다.

 

 

제어문은 크게 조건문과 반복문으로 나뉜다.

● 조건문 : 조건에 따라 실행유무가 달라진다.

 

'만약에 조건이 참이라면' 의 뜻으로 if문을 사용할 수 있다.

 

 

if 조건 :
          111
          222
333

 

이런 형태로 작성을 하는데, 들여쓰기를 무조건 해야 한다.

333은 if문과 관계가 없고, 111, 222는 조건을 만족할 때 실행이 된다.

만약 조건을 만족하지 않으면 실행하지 않고 건너뛴다.

 

 

a = 10
b = 13

if a > b:
    print('a는 b보다 크다')

if a == b:
    print('a는 b와 같다')

if a < b:
    print('a는 b보다 작다')

 

이런식으로 실행을 하면 조건을 만족하는 부분인

a<b 의 조건문에 대한 부분만 실행되기 때문에 결과는 'a는 b보다 작다'가 출력된다.

 

else문은 if 조건이 만족되지 않으면 실행되는 구문이다.

그렇기 때문에 따로 else 뒤에 조건을 달아줄 필요가 없다.

 

 

점수를 입력받아 합격/불합격 체크문을 만들어보도록 하겠다.

score = int(input('점수: '))
if score >= 60:
    print('합격')
else:
    print('불합격')

 

60점 이상이면 합격, 60점 미만이면 불합격이 출력된다.

 

 

 

3개 이상의 조건이 있으면 if - elif - elif - else 처럼 사용할 수 있다.

다양한 조건이 있을 때, else 대신에 계속 elif로 사용이 되다가 마지막에 else를 사용하면 된다.

 

 

 

 

 

 

짝수, 홀수 체크문을 만들어보도록 하겠다.

num = int(input('숫자를 입력하시오 : '))
if num % 2 == 0:
    print('짝수')
else:
    print('홀수')

 

숫자를 입력받아 2로 나눈 나머지가 0일 경우에 짝수, 아닐 경우 홀수가 출력된다.

 

 

 

 

성인 여성 인증문을 만들어보도록 하겠다.

age = int(input('나이 : '))
gender = input('성별(여:f, 남:m): ')

if age >= 20:
    if gender == 'f':
        print('입장')
    else:
        print('여성만 입장 가능')
else:
    print('성인만 입장 가능')

 

 

조건이 두 가지가 있다.

이런 경우에 위에서 배운 AND 연산자로 묶을 수 있다.

if age >= 20 and gender == 'f':
    print('입장')
else:
    print('성인 여성만 가능')

이렇게 표현하면 훨씬 간결하고 효율적으로 표현할 수 있다.

 

 

Quiz. 점수를(0-100) 입력받아서 학점 출력하시오.

A: 90-100
B: 80-89
C: 70-79
D: 60-69
F: 60 미만

grade = int(input('점수를 입력하시오 : '))
if grade > 100 or grade <0:
    print('잘못된 점수입니다.')
else:
    if 90 <= grade <= 100:
        print('A')
    elif 80 <= grade < 90:
        print('B')
    elif 70 <= grade < 80:
        print('C')
    elif 60 <= grade < 70:
        print('D')
    else:
        print('F')

점수가 100점을 초과하거나 0점 미만일 경우에는 에러 메시지가 뜨도록 설정하였고,

그 외에 점수별로 구분을 해두었다.

 

 

● 반복문 : 특정 동작을 반복하는 문장이다.

 

while문 : 조건을 만족할 때까지 조건문이 계속 실행되는 것. 불만족되는 순간 while문 밖으로 나옴.

 

while 조건 :

               실행문

 

형태로 작성하면 된다.

 

a = 5
while a > 0:
    print(a)
    a -= 1

print('while밖')

 

 

 

이렇게 되면 5부터 순차적으로 1씩 내려가다가 loop를 빠져나온다.

 

Quiz.

1. 1-100 합 구하기

a = 1
b = 0
while a < 101:
    b += a
    a += 1
    print(b)

 

a가 101보다 작아질때까지

b에 b+a를 넣는다.

a는 1씩 증가한다.

 

 

 

2. 1-100 짝수만 출력하기

a = 1
while a < 101:
    a += 1
    if(a % 2 == 0):
        print(a)

a가 101보다 작을때까지

1씩 증가시킨다.

그리고 만약 2로 나눈 결과가 0이면(짝수이면) 그것을 출력한다.

else는 홀수의 경우라 따로 적지 않았다.

 

 

 


3. 구구단 단수를 입력받아 한 단 출력하기

num = int(input('구구단 단수를 입력하시오 : '))
a = 1
while a < 10:
    print(num, '*' ,a,  '=', num * a)
    a += 1

 

단수를 입력받아 1단부터 9단까지 출력한다.

출력 이후에 단수를 하나씩 증가시킨다.

 


4. 약수 구하기 (약수 구할 숫자 입력 받기
)

num = int(input('약수 구할 숫자를 입력하시오 : '))
a = 1
while a <= num:
   if(num % a == 0):
        print(a)
   a += 1

 

숫자를 입력 받고, 약수 1부터 시작하여 

그 약수가 입력받은 숫자와 동일해질때까지 나눗셈을 하여

나머지가 0인 경우에만 출력하는 while문을 짰다.

 

 

 

 

이상 금일 수업 및 과제 내용 정리를 마친다.

 

이 게시물은 맥 [Mac] 기준으로 작성하였습니다.

 

 

R Studio 설치 방법

 

 

R은 통계 컴퓨팅과 그래픽을 위한 프로그램 언어이자 소프트웨어 환경이다. 오픈소스 통계분석 프로그램으로 누구나 어디서나 사용할 수 있다는 장점이 있다. 

요즘 4차산업혁명이 도래한 이후 핫한 프로그램으로 경제학이나 통계학을 공부하는 사람, 데이터분석가 등 다방면의 사용자가 활용하고 있다. 주로 통계 소프트웨어 개발과 데이터분석에 사용된다. 보통 통계학자나 데이터 과학자들도 파이썬과 함께 가장 많이 사용한다.

 

 

 

 

 

R Studio 설치링크

 

 

 

위 사이트에 방문하여 본인의 운영체제에 맞는 것을 골라 설치하면 된다.

Download 버튼을 클릭하면 자동으로 웹페이지에서 나의 PC 사양을 파악하여 설치 파일을 추천해준다.

 

 

 

 

 

 

 

 

 

 

 

 

설치 후 R Studio를 실행하면 아래와 같은 창이 뜬다.

 

 

 

 

 

 

각각의 중요한 pane 들의 기능을 설명하겠다.

  * 소스 (Source) : R 스크립트 파일을 편집하고 실행한다.

  * 콘솔 (Console) : R 명령을 입력하면 결과가 출력된다.

  * 도움말 (Helps) : R의 내부 도움말(HTML 형식)을 보여준다.

  * 플롯 (Plots) : 플롯함수 실행 결과를 보여준다.

  * 환경 (Environment) : 현재 세션에서 사용 가능한 객체(데이터, 변수, 함수)와 각 객체의 크기(예를 들어 데이터 프레임의 행과 열 수)를 보여준다.

  * 파일 (Files) : 디렉터리의 파일들을 보여준다.

  * 히스토리(History) : 이전에 실행한 명령들을 보여준다.

 

 

 

 

 

 

또한 폰트 변경과 폰트 색상 (테마) 변경, 기타 유용한 설정 팁을 공유한다.

  * Appearance > Editor Font : 폰트 변경

  * Appearance > Editor Theme : 여러가지 테마 중에 선택할 수 있다. 배경 색과 포인트 색상이 변경된다.

  * Code > Dispaly > Show margin(80)

  * Pane Layout : 2x2 차원의 기본 구도는 변경할 수 없지만, 각 윈도우가 노출하는 내용을 바꿀 수 있다.

 

폰트 크기는 cmd + '+/-' 단축키로 변환할 수 있다.

R에서 중요한 팁 중 하나는 ? 혹은 ?? 명령을 통해 도움말을 활용할 수 있다는 점이다.

 

 

 

 

라이브러리 설치 방법

 

 

R의 큰 장점은 데이터 가공, 시각화, 모형화를 위한 수많은 양질의 패키지가 있다는 것이다. 

보통 두 가지 패키지를 기본적으로 많이 사용하는데, 설치를 해야한다.

  * dplyr : 데이터를 빠르고 쉽게 처리하는 것을 서포트하는 패키지.

  * ggplot2 : R 플롯 시스템으로 시각화하는 것을 돕는 패키지.

 

 

 

이것을 설치하기 위해서는 아래의 명령어를 실행하면 된다.

 

install.packages("dplyr")
install.packages("ggplot2")

 

 

 

 

 

혹은 R Studio GUI 를 통해서도 설치가 가능하다.

Tools > Install Packages 를 선택한 후 설치가 가능하다.

 

 

 

 

 

위의 두 패키지는 데이터사이언스를 공부하며 R을 다루려면 필수로 설치하는 것이 좋다.

 

 

CRAN 사이트는 R과 관련된 코드, 문서 등을 관리하는 웹 서버다. R package나 관련 파일들을 다운로드할 수 있다.

CRAN의 태스크 뷰 페이지에서는 R 사용자들이 어느 분야에서 어떻게 R을 사용하는지 볼 수 있다.

 

 

 

 

 

 

다양한 분야가 있는데 예를 들어 그 중에 특정 분야의 패키지를 사용하고 싶다면 CRAN의 전체 부가 패키지를 다운받은 후에 해야한다.

install.packages("ctv")

 

 

 

 

 

 

그 후에 예를 들어 자연어처리 패키지 뷰를 새로 설치하거나 업데이트하려면 아래와 같이 명령어를 입력하면 된다.

install.views("NaturalLanguageProcessing")
update.views("NaturalLanguageProcessing")

 

 

 

 

또한 대부분의 데이터 과학자는 SQL을 많이 사용한다. 많은 회사들도 그렇고 하둡 등에서도 데이터를 SQL 문법으로 처리하기 때문에 R에서 SQL을 설치하여 연습할 수 있다. 이를 작동하기 위해서는 패키지가 필요하다.

sqldf 패키지를 설치하면 R의 데이터 프레임들을 데이터베이스 테이블처럼 쿼리할 수 있다.

install.packages("sqldf")

 

 

 

 

 

 

 

 

 

또한, CRAN에서는 패키지에 대한 정보를 알려주는데 특정 패키지가 작동하기 위해 필요한 의존 패키지도 함께 알려준다.

예를 들어, 항목에 이렇게 노출이 된다.

Depends:	R (≥ 3.2.0), lattice (≥ 0.20), ggplot2

 이 말인 즉슨, R 버전이 3.2 이상이어야 하고 lattice 패키지와 ggplot2 패키지가 필요하다는 것이다.

 

 

 

 

 

R 패키지와 관련해 기억해둘 사항은 패키지가 R의 버전에 의존하는 경우가 많기 때문에 가끔씩 R을 업그레이드 해줘야 한다는 점이다.

물론 패키지 자체도 업데이트해줘야 한다.

업데이트 하는 방법은 R Console 에서 아래 코드를 실행하거나, 스튜디오 메뉴에서 'Check for Package Updates...' 를 실행하는 법이 있다.

 

update.packages()

 

 

 

 

 

이상 R Studio 기본 세팅 방법과 라이브러지, 패키지에 대해 설명을 마무리한다.

+ Recent posts