2018년 2월 27일 화요일

파이썬 시험대비

그냥 여기 다 읽어 보삼.
코딩 도장 풀어봐야함
https://dojang.io/mod/page/view.php?id=972

코딩스타일
http://pythonstudy.xyz/python/article/511-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%94%A9-%EC%8A%A4%ED%83%80%EC%9D%BC

http://pythonstudy.xyz/python/article/7-%EA%B8%B0%EB%B3%B8-%EB%8D%B0%EC%9D%B4%ED%83%80-%ED%83%80%EC%9E%85


バイナリデータレコードの処理を行うモジュールを選択肢の中から選びなさい。
正解: struct

-10페이지
// 기호는 소수점이하 버림
%는 소수점이하만
_ 는 마지막 연산 값
print(r'c:\fff\') 하면 스킵문자없이 그냥 출력됨. raw 뜻
''' 또는 """ 는 긴 문장 기호
[:2] 라고 하면 0,1 까지만 가져옴
[-2:] 라고 하면 뒤에서 부터 두개..뒤에서는 -1 부터 시작
for n in 배열: 하면 배열의 요소 모두 반복
print(range(10) 은 rang(0,10) 이 나옴 착각 말도록 print(list(range(10))) 해야함.
range(10) 은 0..9 까지임
for 문에 continue 있음
아큐먼트 줄때 무효가 되는 거
pattor(voltage=5.0, 'dead') 키워드 인수뒤에 비키워드 인수
pattor(110,voltage=200) 에러남 같은 voltage 아규를 두번 지정해서.
아규의 * 는 여러개 받음
** 는 딕셔너리 형태 key=value 로 되어 있는거 받음.
단* 는 ** 앞에 있어야 한다.
args=[3,6] 또 됨.list(range(*args))
def parrot(voltage,state='a',action'boom')
d={"voltage":"v","state":"a","action":"hehe"}
parrot(**d);
람다로 클로저 함수를.
def make_incrementor(n): return lamda x:x+n
f=make_incrementor(42);
f(1) >>> 43
parirs = [(1,'one'),(2,'two'),(3,'three')]
paris.sort(ket lambda pair:pair[1])
[(3,'three'),(2,'two'),(1,'one)]
docstring 은  print(my_function.__doc__) 라고 하면됨(물론 함수에 """ ...""" 되어있어야.)
def f(arg1:str , haha:str = 'babo') -> str 하면 리턴값을 string 으로 정확히 해야함.
list
append(x) a[len(a):]=x 와 같다. extend(L) a[len(a):]=Llist 와 같다. insert(i,x) , remve(x) pop([1]) 인데 pop 은 뒤에서 꺼냄, clear del a[:] 와 같다. index(x) 는 index 번호, sort(key-non, reverse=false) , reverse,copy 는 a[:] 와 같은데 얇은 카피즉,값을 카피
remove(값) - 전달한 값을 삭제 (중복된 경우 처음 나오는 값을 삭제)
pop(인덱스) - 인덱스에 위치한 값을 리턴하면서 삭제 (인자가 없으면 맨 뒤 값을 pop)

from collection import deque 는 이용하면 앞에서 popleft 도 가능
list(map(lambda x:x**2, range(10))) = [x**2 for x in range(10)] 과 같다.
[(x,y) for x in [1,2,3] for y in [3,1,4] if x != y] 는
combs = []
for x in [123]:
    for y in [314]:
        if x!=y:
            comb.append(x,y)
와 같다.
from math impor pi
[str(round(pi, i)) for i in range(1,6)] -> [3.1, 3.14, 3.142

3x4 행렬은 열과 행으로 묶을떄
[[row[i] for row in matrix] for i in range(4)]는
for i in range(4):
    trans.appens([row[i] for row in matrix]) 는
for i in range(4):
    trans_row = []
   for row in matrix :
        rrans_rows.append(row[i])
   trans.append(trans_rows)
간단히 패킹후에 언패킹하면
list(zip(*matrix))

del babolist[:] 과 del babolist 는 다름 , 후자는 아예 변수의 존재 자차를 지움.에러남
튜플은 절대 값지정안됨.주의!!!
single = 'hello',leng(single) = 1 이다.     2가 아니라는 점에 주의
set 은 _,-,+,&,^(공통되지 않은것만)
a = {x for x in 'abdfdf' if x not 'ab'}
딕셔너리 {x: x **2 for x in (2,4,6)} -> {2:4 , 4:16, 6:36} 이 된다.안에 튜플 이라는거 주의
dict(sape=1, b=2,c=3) -> {'sape':1, 'b':2 , 'c':3}
리스트를 인덱스번호와 함께 출력하기
for k,v in enumerate(['a','b','c'])
a = [a,b,c] b= [d,e,f] zip(a,b) = {a:d, b:e, c:f} 가 됨.
sorted 함수로 쇼트시 for f in sorted(set(basket)) 하면 basket 의 중복데이터 제거후 쇼트됨.
s1,s2,s3 = '', '2','3' , result = a or b or c , result 는 '2' 가 됨. and 라면 뒤의 값. or 라면 값이 발견된 장소에서 리턴.
python 모듈.py 인수 하면 __name__ 은 '__main__' 이 됨. 따라서 메인인지 확인후 sys.argv[1] 등해서 인수 확인하면 됨.
sys.path 에는
-입력스크립트디렉토리, PYTHONPATH, 인스톨 디렉토리를 모듈 찾기에서 겁색한다. 초기화후 패스를 변경가능
컴파일끝난 python 파일은 __pycache__ 폴더에 pyc 로 저장됨.__pycache__/spam.cpy-43.pyc 로 저장됨
컴파일시 -0,-oo 하면 크기 작아짐. 또느 opt
-0 은 assert 삭제, -00 은 __doc__까지도 삭제
최적화 되도, 실행속도는 영향없음, 모듈읽는게 빠를뿐
compileall 을 사용하면 디렉토리 모두 pyc
pep3147 에 있데
표준 모듈은 sys
dir() 모듈이 정의되어있는이름을 확인.正解: モジュールが定義している名前を確認することができる。인수없을떄는 현재레벨에 정의되었는 모듈 모두 나열
a=[1,2] import fibo fib-fibo,fib dir() -> ['__builtins__''__name__''a''fib''fibo''sys]
패키지는 점으로 구분된 모듈명을 사용해서 모듈을 구축하는 방법 모듈명A.B 는 패키지 A 에있는 모듈 B 를 말함
모듈에서 __int.py 에 _all=['모듈1','ㅁ듈2'] 이면 * 에 대응
repr() 은 인터프리터가 읽을수 있는 표현을 생성하는 것을 의도한다. eval 을 위해
rjust,ljust 는 문자열전체길이지정,zfill 은 zero 로 채움
print('{1} and {0} ended'.format('span','egg');
!a=ascii !s = str !r =repr , {0:.3f}쩜세자리 {0:10}열자리
딕셔너리 O[Jack]:d 또는 .format(**table) 해서 {Jack:d} 로도 가능
f.write(b'0122343') 바이너리, seek(5) f.close 함.
try 에서 else 는 에러가 없을떄 실행, finally 는 무조건 실행
try->else->finally , try->excep->finally, try->finally->지정안된 예외 traceback
크린업동작 with open("file") as f: for line in f: print(line,end="")
class 에서 nonlocal 은 인스턴스의 변수로, global 으로 선언되면 전역변수로됨.(즉 바인딩이 달라짐)
def scope_test:
  def do_nonlocal():
      nonlocal spam
      spam = "non"
  def do_global:
        global spam
      spam = "g spam"
   print (spam)
print ('gpam",spam)
해도 scope_tes 에서는 spam 값은 "non" 이다.  밖에서출력해야 g spam 임.
표준 라이브러리
re(레귤러익스), math,random,statistics(수학평균,중앙치,분산),urllib,smtp,
from urllib.request import urlopen
with urlopen('..) as response:
    for line in responese:
        line = line.decode()
from datetime import date, zlib,from timeit import timer ,unittest,email.jspn,sqlite3,replib,pprint,textwrap, locale, from string import Template, time,os,struct, threading,zipfile
class AsyncZip(threading.Thread):
    def __init__(self, infile, outfile):
        threading.Thread.__init__(self)
        self.infile = infile
        self.outfile = outfile
    def run(self):
        f = zipfile.ZipFile(), f.write, f.close()
background = ASytncZip('.txt','zip')
background.start()
background.join()
로그는 logging - > logging.debug, info,warning,error,critical
from array import array, from collections import deque, import heapq,decimal
가상환경->virtualenv pyenv 라고 한다, activate 햇 ㅓdeactivate 한다.
pip search, install, uninstall, freeze
.python_history
format(math.pi, '.12g') -> 3.141592643243
.1+.1+.1 == .3  == false
round(.1+.1+.1,10) == round(.3,10) ==true

import json
x = {'name':'yamada','data':[2,3,4]}
print(json.dumps(x))
{"data": [2, 3, 4], "name": "yamada"}


PEP 8
함수나 클래스는 2개의 공백 라인을 추가하여 구분한다. 메서드는 한 개의 공백 라인으로 구분한다
import는 (여러 모듈을 콤마로 연결하지 말고) 한 라인에 하나의 모듈을 import한다
컬렉션 인덱스나 함수 호출, 함수 파라미터 등에서 불필요한 공백을 넣지 않는다
변수 할당시 할당자 앞뒤로 하나의 공백만 넣는다
함수, 변수, Attribute는 소문자로 단어 간은 밑줄(_)을 사용하여 연결한다
클래스의 protected instance attribute는 하나의 밑줄,
클래스의 private instance attribute는 2개의 밑줄
import 문은 항상 파일의 상단에 위치하며, 표준 라이브러리 모듈, 3rd Party 모듈, 그리고 자신의 모듈 순으로 import 한다


-pip 목록 보기 pip list ( 仮想環境にインストールされたすべてのパッケージを表示するpipのオプションを 選択肢の中から選びなさい。)
-virtualenv active deactive
-날짜 임포트 from datetime import date
-タプルは「immutable」であり、 アンパッキングしてアクセスすることができる
>>> t (12345, 54321, 'hello!') >>> x, y, z = t
-참고 | 진수, 8진수, 16진수 정수는 10진수 이외에도 2진수, 8진수, 16진수로도 표현할 수 있습니다. 2진수: 숫자 앞에 0b를 붙이며 0과 1을 사용합니다. 8진수: 숫자 앞에 0o(숫자 0과 소문자 o)를 붙이며 0부터 7까지 사용합니다. 16진수: 숫자 앞에 0x 또는 0X를 붙이며 0부터 9, A부터 F까지 사용합니다(소문자 a부터 f도 가능).

https://wikidocs.net/15132 repr 과 str 차이점. 즉 eval 에서 사용하기위한.?

-이런게 된다.--
i = 10 def num(arg=i): print(arg) i = 7 num() = 10

-print(range(5)) 는 range(5)
-캭...정규식 모듈은 re 야..
-파이썬 히스토리는 python_history


컥..이런건 처음보네
--발췌
-아래 예제는 0부터 9까지 숫자들중 3으로 나눈 나머지가 0인 숫자에 대해 그 제곱에 대한 리스트를 구한 예이다.

1
2
3
4
list = [n ** 2 for n in range(10) if n % 3 == 0]
print(list)
# 출력: [0, 9, 36, 81]
-튜플 변수 대입 , 이런것도 처음
name = ("John", "Kim")
print(name)
# 출력: ('John', 'Kim')
firstname, lastname = ("John", "Kim")
print(lastname, ",", firstname)
# 출력: Kim, John

-딕션너리 선언은 이렇게 
scores = {"철수": 90, "민수": 85, "영희": 80}
-투플로 부터 대입

persons = [('김기수', 30), ('홍대길', 35), ('강찬수', 25)]

mydict = dict(persons)




-딕셔너리 업데이트
persons = [('김기수', 30), ('홍대길', 35), ('강찬수', 25)]
mydict = dict(persons)
mydict.update({'홍대길':33,'강찬수':26})
-딕셔너리 모두 삭제
.clear()  # 모두 삭제
-딕셔너리 값 얻기
.get("민수")  <--["민수"] 도 되지만 get 은 에러 안냄
-딕셔너리를 튜플로 구성된 값으로 변경
scores = {"철수": 90, "민수": 85, "영희": 80}
items = scores.items()
print(items)
# 출력: dict_items([('민수', 85), ('영희', 80), ('철수', 90)])
# dict_items를 리스트로 변환할 때
itemsList = list(items)
-set 관련
# set 정의
myset = { 1, 1, 3, 5, 5 }
print(myset)    # 출력: {1, 3, 5}
# 리스트를 set으로 변환
mylist = ["A", "A", "B", "B", "B"]
s = set(mylist)
print(s)        # 출력: {'A', 'B'}


myset = {1, 3, 5}


# 하나만 추가

myset.add(7)

print(myset)


# 여러 개 추가

myset.update({4,2,10})

print(myset)


# 하나만 삭제
myset.remove(1)
print(myset)
# 모두 삭제
myset.clear()
print(myset)

a = {1, 3, 5}
b = {1, 2, 5}
# 교집합
i = a & b
# i = a.intersection(b)
print(i)
# 합집합
u = a | b
# u = a.union(b)
print(u)
# 차집합
d = a - b
# d = a.difference(b)
print(d)

-***함수의 전달방식 ***
# 함수내에서 i, mylist 값 변경
def f(i, mylist):
    i = i + 1
    mylist.append(0)
k = 10       # k는 int (immutable)
m = [1,2,3# m은 리스트 (mutable)
f(k, m)      # 함수 호출
print(k, m)  # 호출자 값 체크
# 출력: 10 [1, 2, 3, 0]
-함수의 가변길이 파라메터
def total(*numbers):
t = total(1,5,2,6)
-리턴값
def calc(*numbers):
    return count, tot
count, sum = calc(1,5,2,6# (count, tot) 튜플을 리턴


testcode


# -*- coding: cp949 -*-#
x = {'a': 10, 'a': 20, 'c': 30, 'd': 40, 'e': 50}


print(x['a'])

import sys
x = ["a","b","c","d","e"]
print(sys.path)
dic = [
    ['Noro', 'Nakao', 'Miyaoka'],
    ['Noro', 'Nakao', 'Miyaoka'],
    ['Kimura', 'Miyashita', 'Shibata'],
    ['Matsumoto', 'Tanaka', 'Ivan'],
]

print(list(zip(*dic)))

print(('Noro','Noro'))

print((1,3,5) < (1,2,3,4))

import json
x = {'name':'yamada','data':[2,3,4]}
print(json.dumps(x))


x = '''abcdefghijklmnopqrstuvwxyz'''single = 'hello',"2",
print(len(single))

print({x for x in 'abdfdf' if x not in 'ab'})
s1,s2,s3 = '', '2','43'print(s1  or s2 or s3)



print(x[2:5])
print(x.split('j')[0])

mylist = ['kim',1000,'babo','삼성전자', 'SK하이닉스', '현대차', '한국전력', '아모레퍼시픽', '제일모직', '삼성전자우', '삼성생명', 'NAVER', '현대모비스']
babolist = mylist.copy();
del babolist[:]
mylist.append(456)
mylist.insert(0,'hehe')
del mylist[-2]
print(mylist)
print(babolist)


mytuple = ('삼성전자', 'SK하이닉스', '현대차')
a,b,c = mytuple
print(a,b,c)

cur_price = {}
cur_price['삼성전자'] = 30000cur_price['SK하이닉스'] = 20000cur_price['현대차'] = 10000
print(cur_price['삼성전자'])
print(list(cur_price.keys()))
print('삼성전자' in cur_price.keys())

if 3 > 1:
        print("3이 크다")
else:
        print("3이 작다")

price=1400if price < 1000:
    bid = 1elif price >= 1000 and price < 5000:
    bid = 5elif price >= 5000 and price < 10000:
    bid = 10elif price >= 500000:
    bid = 1000
print(bid)

class PrintMy:
    def __init__(self,preStr):
        self.preStr = preStr
    def print_n(self,n):
        print(self.preStr + n)
        # pass        return n
oh = PrintMy('taeho->')

for i in range(1,5):
    oh.print_n("%d" % i)
for i in mylist:
    oh.print_n("%s: buy 10" % i)
for company, val in cur_price.items():
    oh.print_n("%s: buy %s" % (company, val))

0 comments:

댓글 쓰기