ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22-08-26_python Day03
    main 2022. 8. 26. 12:50

    쌤이 짠 가위바위보 코드

    import random
    
    #변수선언부
    mine = input("홀/짝을 고르시오.")
    com = ""
    result = ""
    
    #변수에 값 넣어줌
    rnd = random.random()
    if rnd>0.5 :
        com = "홀"
    else : 
        com = "짝"
        
    if mine == com :
        result = "이김"
    else : 
        result = "참"
        
    #출력
    print("나 :", mine)
    print("컴 :", com)
    print("결과 :", result)

     

     

     * 가장 기본적인 함수들을 사용 

     ==> 다른 언어들에서도 호환이 되기 좋은. 모양으로 짰음. 

     

    변수선언/입력/출력

    MVC패턴처럼 나누어서 코드를 짬

     

    #가위바위보 

    import random
    
    mine = input("가위/바위/보를 고르시오.")
    com = ""
    result = ""
    
    rnd = random.random()
    if rnd>0.33 :
        com = "가위"
    elif rnd>0.66 : 
        com = "바위"
    else : 
        com = "보"
        
    if com == "가위" and mine=="가위" :   result = "비김"
    if com == "가위" and mine=="바위" :   result = "이김"
    if com == "가위" and mine=="보" :   result = "짐"
        
    if com == "바위" and mine=="가위" :   result = "짐"
    if com == "바위" and mine=="바위" :   result = "비김"
    if com == "바위" and mine=="보" :   result = "이김"
        
    if com == "보" and mine=="가위" :   result = "이김"
    if com == "보" and mine=="바위" :   result = "짐"
    if com == "보" and mine=="보" :   result = "비김"
    
        
    print("나 :", mine)
    print("컴 :", com)
    print("결과 :", result)

    ==> if문을 돌려서 줄 자체를 짧게 할 수도 있지만 코드를 이렇게 직관적으로 짜는 이유는, 

    나도 나중에 오류나 이슈가 있을 때 확인하기 편하고, 클라이언트들과 대화할 때에도 클라이언트도 이정도는 읽을 수 있기 때문에 대화가 됨.  ---> 야근을 피할 수 있다.

     

     문제가 있는 부분을 직관적으로 알아차릴 수 있음. 

     

     

     

    [메서드]

    #메서드 (==function, definition), def라고 선언함. 

     ( java : method / javascript : function / python : definiton ) 

     

    sum = add(5,6)
    
    print("sum", sum)
    
    def add(a,b):
        return a+b
    
    #선언을 아래에 하면 에러남 : interpreter언어라서.

    ** sum = add 에서 에러남

     

    ** #선언을 아래에 하면 에러남 : interpreter언어라서. 

     interprint == script 대본

     위에서부터 아래로 읽어가면서 메모리를 만드는거니까. 

     

    자바는 문법적으로 체크, 아래에 있어도 상관 없음. 통채로 compile 해버리면 되니까. 에러 안 남. 

     

    ## 메서드(정의) 선언 연습

    def add(a,b):
        return a+b
    
    def minus(a,b):
        return a-b
    
    def divide(a,b):
        return a/b
    
    def multiply(a,b):
        return a*b
    
    sum = add(5,6)
    min = minus(5,6)
    div = divide(5,6)
    mul =multiply(5,6)
    
    print("sum", sum)
    print("min",min)
    print("div",div)
    print("mul",mul)
    
    #선언을 아래에 하면 에러남 : interpreter언어라서.

    **** pass : {}가 없이 탭으로 표기하니까, 에러나지 않게 pass시키는것. 

       print("skip)"  같은 의미

     

     

     

    **구구단을 출력하는 정의를 짜보자.

    def showDan(dan):
        pass
    def showDan(dan):
            for i in range(1,9+1):
                print("{} X {} = {}".format(dan,i,dan*i))
    
            # print("{} X {} = {}".format(dan,1,dan*1))
            # print("{} X {} = {}".format(dan,2,dan*2))
            # print("{} X {} = {}".format(dan,3,dan*3))
            # print("{} X {} = {}".format(dan,4,dan*4))
            # print("{} X {} = {}".format(dan,5,dan*5))
            # print("{} X {} = {}".format(dan,6,dan*6))
            # print("{} X {} = {}".format(dan,7,dan*7))
            # print("{} X {} = {}".format(dan,8,dan*8))
            # print("{} X {} = {}".format(dan,9,dan*9))    
    
    
    showDan(5)

     

     

    ** 1~9까지의 수 중 하나를 랜덤으로 출력하는 정의를 짜보자

    #1~9까지의 수 중 하나를 랜덤으로 출력하시오
    import random
    
    def getRandom1_9():
        
        su = int(random.random()*9)+1
        return su
    
    su = getRandom1_9()
    print("su",su)

     

    **모든 구구단 출력

    def allgugudan():
        
        for dan in range(2,9+1) :
            print("{} X {} = {}".format(dan,1,dan*1))
            print("{} X {} = {}".format(dan,2,dan*2))
            print("{} X {} = {}".format(dan,3,dan*3))
            print("{} X {} = {}".format(dan,4,dan*4))
            print("{} X {} = {}".format(dan,5,dan*5))
            print("{} X {} = {}".format(dan,6,dan*6))
            print("{} X {} = {}".format(dan,7,dan*7))
            print("{} X {} = {}".format(dan,8,dan*8))
            print("{} X {} = {}".format(dan,9,dan*9))
            print()   
        
        
    allgugudan()

     

     

    input이 있느거, 없는거, / input output이있는거, output만있는거 / input output이 엇는거 / input만 여러개,  / output이 여러개인 것 (multi-return)

     

     

    ** 파이썬에만 있는 muti return 기능

    #multireturn     ==>    파이썬만 있는 기능
    
    def addmindivmul(a,b):
        return a+b, a-b, a/b, a*b
    
    
    sum, min, div, mul = addmindivmul(5, 6)
    
    print(sum, min, div, mul)

    [결과]

    11 -1 0.8333333333333334 30

     

     

    #multireturn     ==>    파이썬만 있는 기능
    
    def addmindivmul(a,b):
        return a+b, a-b, a/b, a*b
    
    
    sum, min, div= addmindivmul(5, 6)
    
    print(sum, min, div)
    
    
    
    
    #multireturn     ==>    파이썬만 있는 기능
    
    def addmindivmul(a,b):
        return a+b, a-b, a/b, a*b
    
    
    sum, min= addmindivmul(5, 6)
    
    print(sum, min)

    코드를 이렇게 짜면, 각각

    이렇게 나옴 그런데

     

     

    #multireturn     ==>    파이썬만 있는 기능
    
    def addmindivmul(a,b):
        return a+b, a-b, a/b, a*b
    
    
    sum= addmindivmul(5, 6)
    
    print(sum)

    이렇게 하나로 받으면

     

    이렇게 다 나옴. 작은 배열이라고 해서 tuple이라고 하며, 배열과 동일하게 사용 가능함. 

     

    #multireturn     ==>    파이썬만 있는 기능
    
    def addmindivmul(a,b):
        return a+b, a-b, a/b, a*b, -1, 23
    
    
    sum= addmindivmul(5, 6)
    
    print(sum)

     이렇게 배열과 동일한 모양으로 사용 가능하다. 

     

     

     

     

    [객체 지향 프로그램]

    # Obeject Oriented Program

     (Oriented? ==> 이재용 Oriented from 이건희)

     

    객체, 속성(전역변수), 메서드(속성을 바꿔주는 것)

     

    # 사람, 동물을 가지고 예시를 가져보자. 

    동물과 사람의 공통점 = 움직인다. (움직인다/움직이지 않는다)

    ==> boolean 타입 //움직인다 ==true

     

    죽으면? => 움직이지 않는다. move=false

     

     

    #Animal.java

    package day03;
    
    public class Animal {
    	boolean flagMove = true;
    	
    	public void die() {
    		flagMove = false;
    	}
    }

     

    #OopTest.java

    package day03;
    
    public class OopTest {
    
    	public static void main(String[] args) {
    		Animal ani = new Animal();
    		
    		System.out.println(ani.flagMove);
    		ani.die();
    		System.out.println(ani.flagMove);
    
    	}
    
    }

     

     

     

    OOP가 생기면서, 코드가 인문학에 가까워짐. 수학이 줄어들고. 프로그래밍이 컴공만의 전유물이 되지 않음 이제. 

     

    # OOP의 핵심. 상속(extends) / 수만줄 복사 붙여넣기 하는 것 보다, 상속해서 쓰면 편안함. 

     

    package day03;
    
    public class Human extends Animal{
    	int skill_tool = 0;
    	
    	public void momstouch(int stroke) {
    		skill_tool +=stroke;
    		
    	}
    }

    ## Animal을 상속을 받아서 해보자. 

    skil_tool, 도구를 사용하는 능력지수를, 

    momstouch / storke , 엄마한테 얼마나 뚜까맞아서 배우냐에 따라 증감하는

    int지수하고 보고.

     

    package day03;
    
    public class OopTest {
    
    	public static void main(String[] args) {
    		Human hum = new Human();
    		
    		System.out.println(hum.flagMove);
    		System.out.println(hum.skill_tool);
    		hum.die();
    		hum.momstouch(10);
    		System.out.println(hum.flagMove);
    		System.out.println(hum.skill_tool);
    
    	}
    
    }

    ==>코드가 딱딱한 수학에서 인문학적으로 변화함. 

     

    # 지금은 만들어서 상속을 받은 코드들인데, 내가 상속을 받지 않았는데, 상속받아서 쓸 수 있는 것들이 있음.

     

    Object 객체로부터 상속받음되어서 사용할 수 있는 내용들이 있다 .

    Object Oriented Program... 즉 Object....는 이미 받아서 쓰고 있음. 

     

    본적은 없지만 인간의 조상은 아담이다라는 말처럼 이미 상속되어있는 것. 

     

    Overroad는 println같은 것. 그 안에 있는 다 쓸 수 있음. 

    Overroad 와 Override의 차이...

     

     - java에만 Overroad가 있음. 

     

    javascript는 지금도 변하는 언어라서 공부하기 좋은 언어는 아닌데, 초반에 정립이 안 될 떄, 나 혼자 알고 있어야 돈을 잘 벌어용

    남들 모르는데 나만 아니까^^

    공부는 어렵게 해야 돈을 버는거예요

     

    새로 나오는거 어렵다고 막 포기하지 말고, 오늘은 포기해도 내일은 포기하지 말기

    잃는게 있어야 기억나는것도 있다....

     

     

    자바에서 한 모양대로

    파이썬에서 OOP를 한다고 하면

    class Animal:
        def __init__(self):
            self.flagMove = True
        
        def die(self):
            self.flagMove = False
            
            
    #java라고 한다면 new 연산자가 생략된 형태
    ani = Animal() 
    print(ani.flagMove)
    ani.die()
    print(ani.flagMove)

    DO IT 점프 투 파이썬 p.185

     

     

    # 파이썬, 상속

    https://wikidocs.net/16073

     

    43. class 정리 - 상속(inheritance)

    ## 1. 상속(inheritance) 이란? - 클래스에서 상속이란, 물려주는 클래스(Parent Class, Super class)의 내용(속성과 메소드)을 물려받는 ...

    wikidocs.net

    ## 인터넷 검색해보는거... ==>삽질..

     우리는 삽질을잘해야 해요. 그런데 한두개만 파보면 잘 모르거든

    삽질은 충분~~~~~~~히 해야한다.

     

     

     

    이렇게 일단 해 볼까용

    class Animal:
        def __init__(self):
            self.flagMove = True
        
        def die(self):
            self.flagMove = False
            
            
    #java라고 한다면 new 연산자가 생략된 형태
    ani = Animal() 
    print(ani.flagMove)
    ani.die()
    print(ani.flagMove)
    
    
    class Human(Animal):
        def __init__(self):
            self.skill_tool =0
            
        def momstouch(self, stroke):
            self.skill_tool +=stroke
            
    hum = Human()
    print(hum.flagMove)
    print(hum.skill_tool)
    
    hum.die()
    hum.momstouch(10)
    print(hum.flagMove)
    print(hum.skill_tool)

    -- 부모거를 뭔가 못 갖고 오네?

     

    ==> 부모객체의 내용을 가져오려면 자바에서의 super를 호출해야 한다.

    class Animal:
        def __init__(self):
            self.flagMove = True
        
        def die(self):
            self.flagMove = False
            
            
    #java라고 한다면 new 연산자가 생략된 형태
    ani = Animal() 
    print(ani.flagMove)
    ani.die()
    print(ani.flagMove)
    
    
    class Human(Animal):
        def __init__(self):
            self.skill_tool =0
            super().__init__()
            #w조상을 한번 불러줘야 flagMove에 있는 값을 가져올 수 있다. 
            
        def momstouch(self, stroke):
            self.skill_tool +=stroke
            
    hum = Human()
    print(hum.flagMove)
    print(hum.skill_tool)
    
    hum.die()
    hum.momstouch(10)
    print(hum.flagMove)
    print(hum.skill_tool)

    이제 잘 나옴

     

    언어의 유사도에 따라서 보면.....

    C, C++                      ->1초

    java C#                     ->10초

    java javascript            ->15초

    python                        ->20초

     

    처리속도는 예를 들면 이런 느낌이라고 봐야 함.

    그러면 C로 프로그래밍을 할 텐데, 지금 대세가 자바...?

    그러면 왜 자바가 대세죠?

    java와 C는 열배 가까운 격차가 있는데도 왜 java를 쓰는가?

     

     

    --

    잠깐 외출다녀옴. (12:15에들어옴)

    --

     

    자바 private, public... 중요한데 파이썬이나 JS도 걍 public처럼씀

    파이썬 재미있고 인공지능 재미있으면 파야되고, 자바스크립트도 변혁중(중요)

    .

     

     

    -----??

     

     

     

     

    [파이썬 다중상속]

    ## 자바에는 없는 다중상속

    class LeeJY:
        def __init__(self):
            self.money = 10
        def phonepari(self):
            self.money +=5
            
    class Byden : 
        def __init__(self):
            self.cnt_war =1
        def bubkyu(self,cnt):
            self.cnt_war += cnt
            
    class HyungJ(LeeJY,Byden):
        def __init__(self):
            LeeJY.__init__(self)
            Byden.__init__(self)
            #다중상속에서는 이렇게 부모객체를 불러와서 사용하면 됨
          
          
    hj = HyungJ()
    print(hj.money)
    print(hj.cnt_war)
    
    hj.bubkyu(1)
    hj.phonepari()
    print(hj.money)
    print(hj.cnt_war)

    다중상속에서는 부모객체를 이렇게 불러오면 됨.

     

    낙타표기법 : openClass (camel case)

    스네이크표기법 : open_class (snake case)

    헝가리안 표기법 : open -> pn (자음을 날림), C++에서 많이씀

     

    소형divice에서는 c언어를 씀. 작은 컴퓨터를 넣어야 하고, 메모리를 아껴야 하니까, 변수명도 작게 설정함. 그래서 헝가리안 표기법으로 변수명을 줄임.

     

     ##요즘은, 인간이 코드를 얼마나 잘 읽을수 있느냐... 를 또 같이 보니까, caml/snake 많이씀

     

     

    python의 destroyer (소멸자)

    java는 GarbageCollector가 있음. JVM이 쓸모없으면 청소해버림.

    C나 이런 거는 메모리를 제거하려면 delete 명령어 써 줘야 함. 자동으로 안 됨. 

     

    JDBC만썼을때, 자동으로 close안 해줌

    close안 해줬을때........심히느려짐..............

    ibatis 쓰는 이유는.... 자동으로 닫아주니까. 

     

    튜닝하면 ojdbc가 더빠르기는 한데, 한두건만 할 때는 쓰더라도, 모르면 ibatis써라....

    class Academy :
        def __init__(self):
            print("constructor")
            self.cnt_student =0
            
        def openClass(self):
            self.cnt_student +=20
            
        def __del__(self):
            print("destroyer")
            
            
            
    Academy()

     

    ** 

    가바지콜렉터가 없어서 

        def __del__(self):
            print("destroyer")

     

    이게 메모리를 내려주는 역할을 한다...

     

     

     

     

     

     

     

     

     

     

     

     

     

    'main' 카테고리의 다른 글

    22-09-06_파이썬  (0) 2022.09.06
    살려주세요  (0) 2022.09.05
    220905_파이썬  (0) 2022.09.05
    22-08-25_web programming draft note  (0) 2022.08.25
    22-08-25 python _draft note  (0) 2022.08.25
Designed by Tistory.