Print 사용법


# 참조 : https://www.python-course.eu/python3_formatted_output.php

다양한 print출력
separator사용
end사용
python Format사용

 

참고 : Escape 코드

\n : 개행
\t : 탭
\\ : 문자
\' : 문자
\" : 문자
\000 : 널 문자
...


# 기본 출력

print('Python Start!')  #자주사용
print("Python Start!")  #자주사용
print("""Python Start!""")
print('''Python Start!''')

print() #그냥 프린트는 줄바꿈이 된다.



# separator 옵션 사용

print('P', 'Y', 'T', 'H','O','N')   #P Y T H O N
print('P', 'Y', 'T', 'H','O','N', sep='')   #PYTHON
#sep를 공백으로 하면 붙어서 나온다.
print('010', '7777', '7777', sep='-')   #010-7777-7777
print('python', 'google.com', sep='@')  #python@google.com





# end 옵션 사용

print('Welcome To', end=' ')
print('IT News', end=' ')
print('Web Site')

#welcome to IT News web site


print문은 자동으로 줄바꿈을 해주지만
end옵션을 넣으면 끝부분을 어떻게할건지 정할 수 있고 그 다음 print문으로 이어질수 있다.


# file 옵션 사용

import sys #import는 예약어이기 때문에 변수로 할당할 수 없다.

print('Learn Python'), #file='test.txt')
#print문의 내용을 외부에 지정한 파일인 test.txt에 쓰는 것이다.
#(test.txt는 잘못된코드 일종의 예시를 보여주기 위해서 사용한것.)

print('Learn Python', file=sys.stdout)
#sys.stdout는 cmd+i를 눌러 나오는 콘솔아웃을 의미한다.
#그래서 실행하면 그냥 똑같이 나오는 것이다.





# format 사용(d정수 :3 , s문자열: 'python', f실수: 3.144)

print('%s %s' % ('one', 'two')) #one two %는 일종의 다리 역할을 한다.
print('{} {}'.format('one', 'two')) #one two
print('{1} {0}'.format('one', 'two')) #two one

#프로그래밍은 첫 번째는 0부터 시작한다. 인덱스는 무조건 0부터 생각하자.
#암묵적으로 {} {}가 비어 있으면 {0}(1)순서대로 인것이다.

 


# %s (string)

print('%10s' % ('nice',)) #      nice   10은 자릿수를 의미한다.
print('{:>10}'.format('nice'))#      nice

print('%-10s' % ('nice',)) #nice       -를 쓰면 왼쪽부터 채워서 10자리
print('{:10}'.format('nice'))#nice      위의 결과와 같음.
print('{:<10}'.format('nice'))#nice     위의 결과와 같음.

print('{:_<10}'.format('nice')) #______nice 공백을_로 바꿈
print('{:^10}'.format('nice'))  #   nice    중앙정렬

print('%.5s' % ('pythonstudy',)) #pytho 점(.)이 붙으면 5글자만 절삭을 한다.
print('%5s' % ('pythonstudy',))
#pythonstudy 점이 없으면 내가 공간을 5개만 확보했더라도 그냥 다 들어온다.

print('{:.5}'.format('nice'))#nice(공백없음)
print('{:.5}'.format('pythonstudy'))#pytho
print('{:10.5}'.format('pythonstudy'))#pytho     (6칸 공백)
#총 10글자의 자리를 확보하는 5글자민 나와라 라는 뜻. 다만, 공간은 10개를 가지고 있다.

 



# %d  (digit)

print('%d %d' % (1, 2)) #1 2
print('{} {}'.format(1, 2)) #1 2

print('%4d' % (42)) #  42 (42,)라고 적어도 된다.
print('%4d' % (4254354)) #4254354 4자리를 정해도 값이 그대로 출력된다.
print('{:4d}'.format(42)) #  42 정수일 때는 4뒤에 d를 붙여줘야한다.

print('%4d' % (42)) #  42 (42,)라고 적어도 된다.

 

 



# %f  (float)

print('%f' % (3.141592653589793,)) #3.141593
print('%1.8f' % (3.141592653589793,))
#3.14159265 정수부는 한 자리만 나오고 소수부는 8자리까지 나온다
print('{:f}'.format(3.141592653589793))

print('%06.2f' % (3.141592653589793,)) #003.14
print('{:06.2f}'.format(3.141592653589793))#003.14

 

 

 

print('%10.2f' % (12345678.923,)) #12345678.92

 

12345678.932는 폭이 12이고 10.2f는 10자리의 공백이다.

 

폭은 정수부분을 지칭하기도 하니 먼저 12345678을 쓴다.

그 다음 소수점(.)을 붙이고 소수점 첫자리인 9를 써서 10자리를 맞춘다.

 

12345678.9

 

하지만 2f가 붙어서 소수점이 2자리로 고정이기 때문에 

 

12345678.92로 11자리가 되는 것이다.

 

 

 

 

 

 

 

 

 

 

opentutorials.org/module/3357/19938

'Python > Today I learned' 카테고리의 다른 글

TIL#13 변수  (0) 2021.05.13
TIL#12 Print()  (0) 2021.05.13
TIL#10 생활코딩 Python 보안,pypi,API  (0) 2021.05.12
TIL#09 생활코딩 Python 모듈,리팩토링  (0) 2021.05.12
TIL#08 생활코딩 Python 함수  (0) 2021.05.12

 

 

28강 (활용) 보안(XSS)

 

 

변경사항

 

 

우리가 만든 웹 애플리케이션에서 발생할 수 있는 보안적인 이슈는 어떤것이 있을 수 있는가 살펴보자.

 

 

XSS.html

<html><body>
&lt;script&gt;alert(1)&lt;/script&gt;
</body></html>

 

스크립트 태크안의 자바스크립트 언어로 다른 사람들의 개인정보나  사이트를 팅키게 하거나 하는
짓을 저지를 수 있기 때문에 

태그에서 쓰던 <,>꺽쇠를  문자 꺽쇠로  대체시켜버린다.

 

 

 

if 'id' in form:
    pageId = form["id"].value
    description = open('data/'+pageId, 'r').read()
    description = description.replace('<', '&lt;')   # 태그에서 쓰는 <를 그냥 문자 <로 치환 &lt;(less than)
    description = description.replace('>', '&gt;')  # 태그에서 쓰는 >를 그냥 문자 >로 치환&gt;(greater than)
    update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
    delete_action = '''
        <form action="process_delete.py" method="post">

 

 

 

 

 

 

29강 (활용) Pypi, 패키지 매니저 PIP

 

 

 

어떻게 하면 내가 만들지 않은 다른 사람의 코드를 부품으로 해서 빠르게
 우리가 무언가를 만들어 나갈 수 있는가?

 

////////////////////////////////////////////////////////////

소프트웨어를 우리가 표현하는 다른 말 중에 하나가 패키지이다.
그리고 그 중에서 우리가 패키지란 말을 또 많이 쓰는 맥락은 우리가 만들고 있는 소프트웨어에 부품으로서
사용될 작은 소프트웨어 이러한 것들을 또 패키지란 표현을 많이 쓴다.

 

 

 

30강 (활용) Pypi, 패키지 매니저 PIP

 

 

 

 

이 바닥에서 부품은 우리가 지금까지 배웠던 print,listdir,format과 같은 함수들이다.
우리는 파이썬에서 제공하는 이 함수들을 부품으로 응용해서 컴퓨터가 기본적으로 제공하지
않는 새로운 기능을 만들수 있게 된다.

application이라는 말은 응용 활용이라는 뜻이 있는데 이렇게 기존의 기능을 응용해서 
새로운기능을 만든다는 점에서 우리가 만든 것을 애플리케이션이라고 부른다.

이 바닥에서의 결합방법은 소위 문법(syntax)라고 부른다.
여러가지 문법들이 있지만 그 중에서 가장 중요한 것은 시간의 순서에 따라서 명령이 실행 된다는 것이다.
program이란 말은 시간의 순서에 따라서 일어나는 일들을 의미한다. 
바로 이런 점에 착안해서 우리가 만든 것들을 프로그램이라고도 부른다.

즉 애플리케이션과 프로그램은 소프트웨어를 부르는 다른 표현이라고 할 수 있다.
응용을 했다는 점에서 애플리케이션, 시간의 순서에 따라서 동작한다는 점에서 프로그램.

 

 

 

 

 



그렇다면 API(application Programming Interface)는 무엇일까?

그것은 우리가 애플리케이션을 구현하기 위해서 시간의 순서대로 배치해야 할 기능들을 의미한다.

이를 테면 프린트 리스트dir 모맷과 같은 부품들은 파이썬이 내장하고 있는 api라고 할 수 있다.

우리는 이 api를 이용해서 파이썬 애플리케이션을 만들게 되는 것이다.

또 이런 부품을 프로그래밍해서 새로운 함수를 만들고 그 함수를 타인이 사용할 수 있도록 공개한다면
타인은 우리가 제공한 함수를 호출함으로써 새로운 애플리케이션을 만들 수 있게된다.

이때 우리가 제공한 함수가 api가 되는것이다

 

 

 

26강 (문법) 모듈

 

 

 

서로 연관된 변수,함수, 아직안배웠지만 객체라고 하는 이 부품들을 
그룹핑하는 아주 거대한 수납상자인 모듈을 알아보자.

 

 

math.py

#code 수많은 코드

def average(a,b,c):
    s=a+b+c
    r=s/3
    return r
 
def plus(a,b):
    return a+b

pi = 3.14

#code 수많은 코드

 

여기 있는 수많은 코드 중에 서로 연관된 코드들을 다시 그룹핑하고 싶은 마음이 생긴다.
즉, 함수라는 것만으로는 만족할 수 없게 된다는 말이다.

이럴 때 사용하는 도구가 모듈이다.

 

 

 

 

 

module.py

import math #math모듈을 임포트한것
            #다른 모듈을 더 쓰고 싶으면 import matrh, os이런식으로 뒤에 컴마를 붙여준다.
                  
print(math.average(1,2,3)) #2
print(math.plus(1,2)) #3
print(math.pi) #3.14



 
from math import average, plus, pi

print(average(1,2,3))
print(plus(1,2))
print(pi)

from math import average #math를 임포트한게 아니라 math라는 모듈로부터 average라는 함수를 임포트 한 것

 

 

/////////////////////////////////////////////////////////////////////

 

수업에서는 다루지 않지만 디렉토리로 구분해서 모듈을 물리적으로 정리정돈 하고 싶다면 
그것보다 더 큰 것 가장 큰 수납상자인 패키지라는 것이 있다.

 

 

 

 

 

 

 

 

27강 (활용) 리팩토링/모듈로 함수 정리 정돈/

 

 

변경사항

 

 

view.py

import os
def getList():
    files = os.listdir('data')
    listStr = ''
    for item in files:
        listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
    return listStr

 

create.py/ index.py/ update.py

import cgi, os, view #임포트에 view추가
.
.
.
.
'''.format(title=pageId, desc=description, listStr=view.getList(), form_default_title=pageId, form_default_description=description))  #view.getlist()로 변경

 

이렇게 함으로써 우리가 얻을 수 있는 장점

 

1. 보기가 훨씬 좋아졌다. 

 

2. getlist가 view라는 모듈의 소속이라는 걸 알 수 있다.

 

3. 중복이 제거된다.

 

4. view.py에 있는 getlist라는 함수를 수정하는걸 통해서 
저 모듈 그리고 저 모듈의 겟 리스트라는 함수를 사용하고 있는 모든 곳에서 동시에 업데이트를
수정을 가할수 있다.

 

 


프로그래밍에서 우리가 배워왔던 여러가지 테크닉들이 기능이나 느낌은 많이 다르지만 
본질적으로는 중복을 제거하는 것과 관련되어 있다.

그리고 중복을 제거했을 때 발생할 수 있는 여러가지 폭발적인 효과들은 다 비슷비슷하게 공유하고 있다.
그래서 다른 듯 보이지만 사실은 같은 것들이 세상에 참 많은 것 같다.

 

 

 

 

 

+ Recent posts