2020년 5월 14일 목요일

09. Python Basic - 파일 읽고, 쓰기

목표

- Open 함수
- 파일 모드의 이해
- 파일 읽기 실습
- 파일 쓰기 실습

# 읽기 모드 : r, 쓰기 모드(기존 파일 삭제): w, 추가 모드(파일 생성 또는 추가): a

외부 리소스를 불러왔을 때는 반드시 닫아줘야한다.
f = open('./resource/review.txt''r')
content = f.read()
print(content)
print(dir(f))
# 반드시 close 리소스 반환
f.close()

with 문을 활용했다면 자동으로 close가 된다.
# 예제2 [ with 문은 자동으로 close를 해준다 ]
with open('./resource/review.txt''r'as f:

한문장씩 읽어오고 싶다면 readline( ) 명령어를 사용한다.
with open('./resource/review.txt''r'as f:
    line = f.readline()
    print(line)

그러나 한 문장씩 여러번 읽어오고 싶다면 While문을 활용하여 반복한다.
with open('./resource/review.txt''r'as f:
    line = f.readline()
    while line:
        print(line, end="####")
        line = f.readline()

파일쓰기

파일 쓰는 방법 ( 새로운 이름의 텍스트 파일을 생성한다. ) - [ w ]
with open('./resource/text1.txt''w'as f:
    f.write('Niceman!\n')

파일을 추가 시키는 방법 - [ a ]
with open('./resource/text1.txt''a'as f:
    f.write("Goodman!")

코드 - [ randint ]는 랜덤의 int 즉 랜덤의 숫자를 생성하는 코드이다.
코드 - [ writelines ]는 리스트를 쓰는 명령어
with open('./resource/text3.txt''w'as f:
    list = ['Kim\n''Park\n''Cho\n']
    f.writelines(list)

Print 명령어를 활용하여 파일을 생성하는 코드
with open('./resource/text4.txt''w'as f:
    print('Test Contents1!'file=f)
    print('Test Contents2!'file=f)

08. Python Basic - 모듈과 패키지

학습 목표

1. 패키지 설정
2. 모듈 사용 및 Alias 설정
3. 패키지 사용 장점

..  : 부모 디렉토리로 이동
.   : 현재 디렉토리로 이동

Class를 활용한 패키지
from pkg.fibonacci import Fibonacci

Fibonacci.fib(300)
print("ex2: ", Fibonacci.fib2(400))
print("ex2: ", Fibonacci().title)

[import *] = 전체 클래스를 다 가져오겠다는 명령어 / 컴퓨터의 용량을 많이 사용되기 때문에 권장하지 않는다.
[import x, y] = 콤마(,)를 활용하여 다수의 클래스를 불러올 수 있다.

Alias을 활용하는 법
# 사용3(클래스) - Alias실행법 권장
from pkg.fibonacci import Fibonacci as fb
fb.fib(1000)
print("ex2: ", fb.fib2(1600))
print("ex2: ", fb().title)

함수를 활용한 패키지
#사용4(함수)
import pkg.calculations as c
print("ex4: ", c.add(10,100))
print("ex4: ", c.mul(10,100))

#사용5(함수) - 필요한 함수를 가져오는 방법
from pkg.calculations import div as d
print("ex5: "int(d(100,10)))

패키지 폴더 안에 [ __init__.py ] 패키지를 제작해 준다

패키지 안의 함수가 실행이 잘 되는지 테스트를 위한 코드
# 단위 실행 (독립적으로 파일 실행)
if __name__ == "__main__":
    prt1()
    prt2()

2020년 5월 5일 화요일

Pyrhon Basic - Class

Self, 클래스 변수, 인스턴스 변수

클래스의 네이밍의 첫 글자는 대문자로 설정해 놓는다.
보통은 속성과 메소드

속성: 이름 나이 성별 주소 전화번호
메소드 : 걷다 뛰다 - 움직이 있는 것이다. - action

클래스를 활용시에는 반드시 초기화 선언을 해야한다.
def __init__(self):

클래스/인스턴스 차이를 이해하는 것이 중요
네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간 - (ex 이름, 나이, 주소)

  • 클래스 변수 : 직접 사용 가능하며 객체보다 먼저 생성이 된다.
  • 인스턴스 변수 : 객체마다 별도로 존재하며 인스턴스 생성 후 사용한다.
인스턴스 네임스페이스에 변수가 없으면 클래스 네임스페이스에서 값을 찾는다. 거기에도 없다면 오류가 발생한다.

상속, 다중 상속

슈퍼클래스(부모) 및 서브클래스(자식) -> 모든 속성, 메소드 사용이 가능하다
슈퍼클래스(부모) - 중복되는 속성

코드 작성법

class Car:
    """"Parent Class"""
    def __init__(selftpcolor):
        self.type = tp
        self.color = color

    def show(self):
        return 'Car Class "Show Method"'

class BMWCar(Car):
    """Sub Class"""
    def __init__(selfcar_nametpcolor):
        super().__init__(tp,color)
        self.car_name = car_name
    
    def show_model(self) -> None:
        return "Your Car Name: %s" %self.car_name

class BenzCar(Car):
    """Sub Class"""
    def __init__(selfcar_nametpcolor):
        super().__init__(tp,color)
        self.car_name = car_name

    def show_model(self) -> None:
        return "Your Car Name: %s" %self.car_name

    def show(self):
        print(super().show())
        return 'Car Info: %s %s %s' %(self.car_name, self.type, self.color)

일반 사용방법

model1 = BMWCar('520d''sedan''red')

print(model1.color) # Super, 부모에서 가져온 값
print(model1.type)
print(model1.car_name) # Sub, 자식에서 가져온 값
print(model1.show()) # Super, 부모에서 가져온 값
print(model1.show_model())
print(model1.__dict__)

# Method Overriding(오버라이딩) - 올라타다? - 부모에 있는 값을 모두 사용하지 않고 
필요에 따라 개선 또는 추가 내 목적에 맞게 재구성하는 방법
model2 = BenzCar("220d"'suv'"black")
print(model2.show())
        
print()
# Parent Method Call
model3 = BenzCar("350s""sedan"'silver')
print(model3.show())

상속정보를 파악할때 사용되는 소스 코드 = (mro)

print(BMWCar.mro())
print(BenzCar.mro())

파이썬에서는 다중상속(Class)이 가능하다

2019년 11월 5일 화요일

Python_9

1

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    i = int(input("1: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("2: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("3: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("4: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("5: 정수를 입력하시오 =>"))
    int_list.append(i)
    sum = int_list[0] + int_list[1] + int_list[2] + int_list[3] + int_list[4]
    print(int_list)
    print("리스트 숫자들의 합 = ", sum)

※ input 처음에는 무조건 문자열이 들어와야한다. 

2

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    for j in [1,2,3,4,5]:
        k = int(input(str(j) + ": 정수를 입력하시오 => "))
        int_list.append(k)
    sum = int_list[0] + int_list[1] + int_list[2] + int_list[3] + int_list[4]
    print(int_list)
    print("리스트 숫자들의 합= ", sum)


3

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    sum = 0
    for j in [1,2,3,4,5]:
        k = int(input(str(j) + ": 정수를 입력하시오 => "))
        int_list.append(k)
        sum = sum + k #sum = sum + int_list[j-1]
    print(int_list)
    print("리스트 숫자들의 합= ", sum)


6-1

for i in [1,2,3,4,5,6,7,8,9]:
    print("9*", i ,'=', 9*i)
dan = int(input("몇 단을 출력하시겠습니까?"))
for i in [1,2,3,4,5,6,7,8,9]:
    print(dan,'*',i,'=',dan*i)

6-2

for i in range(1, 6, 1):
    print(i, end = ' ')
print(
for i in range(1, 6, 2):
    print(i, end = ' ')
print()
for i in range(6,0,-2):
    print(i, end=' ')
print()

#결과 값
1 2 3 4 5 
1 3 5 
6 4 2 

6-3

import turtle
t = turtle.Turtle()

for count in range(6):
    t.circle(100)
    t.left(360/6)

#연습문제
import turtle
t = turtle.Turtle()
cnt = int(input("몇 개의 뭔을 출력하시겠습니까? "))
for count in range(cnt):
    t.circle(100)
    t.left(360/cnt)

6-4

import turtle
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(-200,0)
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(200,0)
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-1

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(random.randint(-300,300),0)
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(random.randint(-300,300),0)
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-2

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(random.randint(-300,300),random.randint(-300,300))
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(random.randint(-300,300),random.randint(-300,300))
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-3

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

for j in range(5):
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #정삼각형 그리기
    for i in range(3):
        t.forward(100)
        t.left(360/3)

    #이동하기
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #정사각형 만들기
    for i in range(4):
        t.forward(100)
        t.left(360/4)

    #이동하기
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #오사각형 만들기
    for i in range(5):
        t.forward(100)
        t.left(360/5)

    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #육사각형 만들기
    for i in range(6):
        t.forward(100)
        t.left(360/6)


6-4-4

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
for x in range(5):
    for y in [3,4,5,6]:
        #이동하기
        t.penup()
        t.goto(random.randint(-300,300),random.randint(-300,300))
        t.pendown()

        #정삼각형 그리기
        for i in range(y):
            t.forward(100)
            t.left(360/y)

※ While문은 반드시 조건 값이 들어간다, While true를 넣으면 무한루프가 가능하다.  
※ For문은 반드시 범위가 들어가야한다. 

6-4-5


import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
x = 0
while x<5:
    x = x+1
    y = 2
    while y <= 6:
        y=y+1
        #이동하기
        t.penup()
        t.goto(random.randint(-300,300),random.randint(-300,300))
        t.pendown()

        #정삼각형 그리기
        i=0
        while i < y:
            i = i+1
            t.forward(100)
            t.left(360/y)

6-5

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

for i in range(30):
    length = random.randint(1,100)
    t.forward(length)
    angle = random.randint(-180,180)
    t.right(angle)


6-5-1

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
i=0
while i <= 30:
    i=i+1
    length = random.randint(1,100)
    t.forward(length)
    angle = random.randint(-180,180)
    t.right(angle)
    

6-6

import turtle
t=turtle.Turtle()
t.shape("turtle")
i=0
while i<5:
    t.forward(200)
    t.right(144)
    i=i+1

6-6-1

import turtle
t=turtle.Turtle()
t.shape("turtle")

for i in range(5):
    t.forward(200)
    t.right(144)

6-6-2

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

cnt = int(input("몇 개의 별을 출력하시겠습니까 ? "))
for i in range(cnt):
     t.penup()
     t.goto(random.randint(-300,300),random.randint(-300,300))
     t.pendown()
     for x in range(5):
            t.forward(200)
            t.right(144)

Python_7

random의 가지수:

random.randrange : 숫자 하나만을 사용한다?
random.randint : 4부터 10까지

if의 가지수:

-if
-if~else
-if~elif~elif
-if~elif~elif~elif~elif~elif~elif~elif~elif....
-if~elif~elif~elif~elif~elif~elif~elif~elif....else

또한 if를 선언할 시 반드시 조건문을 넣어야한다.

2019년 10월 15일 화요일

Python_6

파이썬, 자바 스크립는 어떤 종류의 자료도 저장할 수 있다.

String = 문자들의 나열
Unicode - 10byte
Ascicode - 5byte

str -> 한 문자를 2byte로 나타낸다.

정수형과 문자열의 byte계산 방법이해가 안된다.

% -> 문자열에 변수의 값을 삽입하여 출력하고 싶을때 기호 사용 -> 따음표에서의 경우를 얘기한다.

%s -> 문자열로 받아들인다.
%d -> 정수형으로 받아들인다.
%f -> 실수형으로 받아들인다.

turtle
s = turtle.textinput("","이름을 입력하시오: ")

t.Turtle() -> 생성하겠다는 명령어


print(s[6:10]) -> 6부터 10되기 전까지만을 출력하라는 명령어

import time -> 1970년 1월 1일에서 지난 초

append - 리스트
근데 한번 상수로 넣는 경우는 왜 넣는건가?
list에 넣어 index로 저장하는가?
script하고 언어의 차이점은?

ctrl t -> 키보드 interuped로 오류를 만들어서 무한 반복문에서 빠져나온다.
: <- 요거를 사용했으면 4칸 앞으로 가야한다. -> 어떤 명령문에 종속을 시키기 위함.

2019년 10월 14일 월요일

Python_5


str를 사용해야 하는 이유 :
만약 'str'를 선언하지 않았을 경우 각각 한 개씩 선언을 한다.
그러나 'str'를 선언했을 경우 숫자로 인식하여 6byte에서 4byte로 된다?

각각 한 개씩 선언하기 위해서는 'char' 을 선언한다.