-
22-08-26_python Day03main 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 # 파이썬, 상속
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