2018년 2월 27일 화요일

gerrit 반드시 사용하자

http://d2.naver.com/helloworld/6033708

파이썬 요약

Pythonにおけるタブ補完について正しいものを選択肢から選びなさい。
正解: 変数とモジュール名の補完はインタープリタの起動時に自動で有効になっており、[Tab]キーで補完機能が呼び出せる。


-여러 줄로 된 문자열(multiline string) ''' or """
-입력은 이런게 가능
a = int(input('첫 번째 숫자를 입력하세요: '))    # int를 사용하여 입력 값을 정수로 변환
b = int(input('두 번째 숫자를 입력하세요: '))    # int를 사용하여 입력 값을 정수로 변환

print(a + b)
-한번에 두개 입력받기
변수1, 변수2 = input(문자열).split(기준문자)
-이런걸 맵으로 하면 이쁘다
a, b = map(int, input('숫자 두 개를 입력하세요: ').split())
-출력시 가운데 문자 붙임
print(1, 2, 3, sep=', ') , end='' 는 그냥 뒤에 붙여줘,
-몫과 나머지 한번에
quotient, remainder = divmod(5, 2)
-모듈 이름 지정
import 모듈 as 새이름
-모듈의 일부만
from 모듈 import 변수
from math import sqrt
from math import sqrt as s
from 패키지.모듈 import 변수 as 새이름, 함수 as 새이름, 클래스 as 새이름
 from urllib.request import Request as r, urlopen as u
-모듈해제
del math
-모듈 다시가져오기
importlib.reload(math)
- python에 -m 옵션을 지정해서 pip를 실행할 수도 있습니다. -m 옵션은 모듈을 실행하는 옵션이며 pip도 모듈입니다.
インタープリンタを起動時のオプション「-m」の説明として適切なものを選びなさい。正解: モジュールの指定を行う。
sudo pip install requests 또는
python -m pip install requests
-리스트에 추가하기 팁
>>> a = [0, 0, 0, 0, 0]
>>> b = a
>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
a is b
list( for 변수1 in 리스트1 if 조건식1 
        for 변수2 in 리스트2 if 조건식2
         ...
        for 변수n in 리스트n if 조건식n)
a = [i * j for j in range(2, 10) for i in range(1, 10)] 구구단
>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]
>>> x = {'a': 10, 'a': 20, 'c': 30, 'd': 40, 'e': 50}
>>> x['a']    # 키가 중복되면 가장 뒤에 있는 값만 사용함
20
>>> x    # 중복되는 키는 저장되지 않음
{'a': 20, 'c': 30, 'd': 40, 'e': 50}
단, 키에는 리스트와 딕셔너리를 사용할 수 없습니다.
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.popitem()
('d', 40)
>>> x
{'a': 10, 'b': 20, 'c': 30}
popitem()은 딕셔너리에서 임의의 키-값 쌍을 삭제합니다(파이썬 3.6 이상에서는 맨 뒤에 있는 값을 삭제합니다). 그리고 삭제된 키-값 쌍을 튜플로 반환합니다.
x = {key: value for key, value in dict.fromkeys(keys).items()}
  • 딕셔너리[키][키] = 값 처럼 딕안에 딕도가능
  • 세트는 리스트나 딕셔너리와 달리 세트 안에서 세트를 사용할 수 없습니다.
>>> a = {1, 2, 3, 4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
add(요소)는 세트에 요소(값)를 추가합니다.remove(요소)는 세트에서 특정 요소(값)를 삭제하고 요소가 없으면 에러를 발생시킵니다.discard(요소)는 세트에서 특정 요소(값)를 삭제하고 요소가 없으면 그냥 넘어갑니다. 다음은 세트 a에 3이 있으므로 3을 삭제하고, 5는 없으므로 그냥 넘어갑니다.pop()은 세트에서 임의의 요소(값)를 삭제하고 해당 요소를 반환합니다. 만약 요소가 없으면 에러를 발생시킵니다.
>>> a = {i for i in 'pineapple' if i not in 'apl'}
>>> a
{'e', 'i', 'n'}
import pickle
 
name = 'james'
age = 17
address = '서울시 서초구 반포동'
scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}
 
with open('james.p', 'wb') as file:    # hello.txt 파일을 바이너리 쓰기 모드(rb)로 열기
    pickle.dump(name, file)
    pickle.dump(age, file)
    pickle.dump(address, file)
    pickle.dump(scores, file)

파이썬 객체를 파일에 저장할 때는 pickle 모듈의 dump를 사용합니다.

>>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(*x)
이름:  name
나이:  age
주소:  address

즉, 딕셔너리를 한 번 언패킹하면 키를 사용한다는 뜻이 됩니다. 따라서 **처럼 딕셔너리를 두 번 언패킹하여 값을 사용하도록 만듭니다
>> x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**x)
이름:  홍길동
나이:  30
주소:  서울시 용산구 이촌동
이때는 a.copy()  해서 해결
b = list() 또는 b = []
>>> a = [1, 2, 3]
>>> a[len(a):] = [10, 20]
>>> a
[1, 2, 3, 10]
-for 인덱스 , 값 in enumerate(리스트)
>>> a = [38, 21, 53, 62, 19]
>>> for index, value in enumerate(a):
...     print(index, value)
0 38
1 21
-a.sort(reverse=True)
- b = list(i for i in range(10))    # 0부터 9까지 숫자를 생성하여 리스트 생성
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-d = [i * 2 for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
-b = [i + 5 for i in range(10) if i % 2 == 1]    # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성
[6, 8, 10, 12, 14]
-a = list(map(str, range(10)))
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
-문자열과 반복문
>>> for i in 'Hello':
...     print(i, end=' ')
...
H e l l o
-람다
lambda 매개변수1, 매개변수2: 반환값
>>> list(map(lambda x: x + 10, [1, 2, 3]))
[11, 12, 13]
>>> f = lambda x: x + 10
>>> list(map(f, [1, 2, 3]))
[11, 12, 13]
-람다예제2
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: str(x) if x % 3 == 0 else x, a))
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]

-클래스 사용하기
class 클래스이름:
    def 메서드(self):
        코드
>>> class Person:
...     def greeting(self):
...         print('Hello')
...
james = Person()
james.greeting()    # 안녕하세요.
-비공개 속성은 __속성과 같이 이름이 __(밑줄 두 개)로 시작해야 합니다. 단, __속성__처럼 밑줄 두 개가 양 옆에 왔을 때는 비공개 속성이 아니므로 주의해야 합니다.
-속성뿐만 아니라 메서드도 이름이 __(밑줄 두 개)로 시작하면 클래스 안에서만 호출할 수 있는 비공개 메서드가 됩니다.
-추상클래스
from abc import *

class 추상클래스이름(metaclass=ABCMeta):
    @abstractmethod
    def 메서드이름(self):
        코드
-제네레이터 yeild
def number_generator():
    yield 0
    yield 1
    yield 2

for i in number_generator():
    print(i)

** fizz buz
print('Fizz' * (i % 3 == 0) + 'Buzz' * (i % 5 == 0) or i)

파이썬 시험대비

그냥 여기 다 읽어 보삼.
코딩 도장 풀어봐야함
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))