003. python 튜토리얼_03 - chohankyun/python-django-study GitHub Wiki

3.비공식 파이썬 소개

다음의 예제에서 입력, 출력은 프롬프트(">>>")가 있느냐 없느냐로 구별 할 수 있다.
프롬프트 이 후에 입력하고 출력에는 프롬프트가 표시 되지 않는다.
프롬프트에서 공백 라인을 입력하면 다중 라인 명령이 끝났다는걸 의미한다.

많은 예제에서 대화형 프롬프트와 주석을 포함한다.
파이썬에서 주석은 "#" 로 시작되며 라인의 끝이 주석의 끝이 된다.
주석은 라인은 맨 앞에 위치하거나 공백 뒤에 위치하며 문자열 중간에는 위치 하지 않는다.
문자열 중간에 위치한 "#" 는 그냥 문자로 처리 된다.
주석은 코드를 명확히 하기 위해서지 파이썬 인터프리터를 위한것이 아닙니다.
인터프르터는 주석을 코드에서 생각 합니다.

# this is the first comment
spam = 1  # and this is the second comment
          # ... and now a third!
text = "# This is not a comment because it's inside quotes."

###3.1.파이썬을 계산기로 사용
파이썬의 간단한 명령어를 사용하자.
인터프르터를 시작하고 프롬프트 ">>>" 를 기다린다.

####3.1.1.숫자형 자료(Numbers)
인터프리터는 단순한 계산기처럼 동작 한다. 인터프리터에 계산식을 입력하면 입력한 것에 대한 값을 출력 한다.
계산식은 다른 모든 언어에서 사용하듯이 +, -, *, / 을 사용한다.

>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5  # division always returns a floating point number
1.6

정수형 숫자(ex:2, 4, 20) 은 int 타입이고 소수형 숫자(ex:5.0, 1.6) 은 float 타입이다.
앞으로 더 다양한 숫자형 타입을 볼 수 있다.

나누기(/)는 언제나 float 타입을 리턴한다. 정수 리턴 나누기(floor division)은 가장 가까운 작은 수의 정수를 리턴하고 표현식은(//)을 사용한다.
(예: 11//4 = 2.75 => 2 리턴, (-11)//4 = -2.75 => -3 리턴)
나누기의 나머지를 리턴하기 위해서는 나머지(%)을 사용한다.

>>> 17 / 3  # classic division returns a float
5.666666666666667  
>>>
>>> 17 // 3  # floor division discards the fractional part
5
>>> 17 % 3  # the % operator returns the remainder of the division
2
>>> 5 * 3 + 2  # result * divisor + remainder
17

거듭제곱 연산은 "**" 으로 처리된다.

>>> 5 ** 2  # 5 squared
25
>>> 2 ** 7  # 2 to the power of 7
128

"=" 은 대입 연산자로 사용 된다.

>>> width = 20
>>> height = 5 * 9
>>> width * height
900

할당되지 않은 변수는 에러를 발생 시킨다.

>>> n  # try to access an undefined variable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

부동소수점 연산을 지원하고, 정수 타입과 부동소수점타입을 같이 계산하면
부동소수점 타입의 결과가 나온다.

>>> 3 * 3.75 / 1.5
7.5 
>>> 7.0 / 2
3.5

대화형 모드에서 "_" 를 사용해서 바로 전에 사용된 값을 그래도 사용 할 수 있다.
그리고 이 값은 읽기전용으로 사용된다.

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06

파이써은 int, float 외에 Decimal(십진법), Fraction(분수) 을 지원하며, complex numbers(복소수) 를 지원한다.

####3.1.2.문자열 자료(Strings)
파이썬은 숫자형 자료 뿐만 아니라, 여러가지 방법으로 표현이 가능한 문자열을 처리 할 수 있다.
문자열은 작은 따옴표('...') 또는 큰 따옴표("...") 로 쌓여 있으면 둘은 같은 결과의 문자열을 나타낸다.
역슬래쉬()를 사용해서 작은 따옴표 또는 큰 따옴표를 문자열 안에서 사용 할 수 있다.

>>> 'spam eggs'  # single quotes
'spam eggs'
>>> 'doesn\'t'  # use \' to escape the single quote...
"doesn't"
>>> "doesn't"  # ...or use double quotes instead
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

대화형 모드에서 문자열은 " 또는 ' 로 둘러 쌓여서 출력되며, 특수문자를 출력하려면 특수문자
앞에 \ 를 붙인다. \을 붙이므로써 가끔은 입력한 문자열과 출력한 문자열의 형태가
다르게 보일 수 있다. 하지만 둘은 같은 문자열이다. 문자열 안에 " 또는 ' 을 표현하기
위해서는 ' 또는 " 으로 둘러 쌓으면 된다.
(예: "I'm a boy" 또는 'we called "NASA"')
print 함수는 문자열을 보기 좋게 만들어준다. " 또는 ' 로 둘러 쌓여진 부분을 생략한다.

>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
>>> print('"Isn\'t," she said.')
"Isn't," she said.
>>> s = 'First line.\nSecond line.'  # \n means newline
>>> s  # without print(), \n is included in the output
'First line.\nSecond line.'
>>> print(s)  # with print(), \n produces a new line
First line.
Second line.

만약 특수문자 출력을 위해 \ 를 사용하지 않기를 원한다면 r 를 사용 할 수 있다.
문자열의 시작 " 또는 ' 앞에 r 를 추가해서 문자열을 원본대로 출력 할 수 있다.

>>> print('C:\some\name')  # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name')  # note the r before the quote
C:\some\name

여러 문자열을 사용하기 위해서는 """ 또는 ''' 으로 둘러 쌓으면 된다.
또는 문자열 끝에 \ 을 붙인다.

print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")  

다음과 같이 출력된다.

Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to

+ 연산자를 사용해서 문자열을 붙일 수 있고, * 연산자를 사용해서 문자열을 반복해서 출력 시킬 수 있다.

>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'

두개의 문자열을 연속해서 나열하면 두개의 문자열은 자동적으로 합쳐진다.

>>> 'Py' 'thon'
'Python'

만약 변수를 사용해서 연속해서 문자열은 선언하면 두개의 문자열은 자동적으로 합쳐지지 않는다.

>>> prefix = 'Py'
>>> prefix 'thon'  # can't concatenate a variable and a string literal
  ...
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
  ...
SyntaxError: invalid syntax

문자열이 할당된 변수와 문자열 또는 문자열이 할당된 변수와 변수를 합치려면 + 연산자를 사용하면 된다.

>>> prefix + 'thon'
'Python'

긴 문자열을 변수에 선언 할때는 () 를 사용한다. () 안에 긴문자열은 나눠서 선언 하면 된다.
변수에는 나눠서 선언되지만 사용시에는 자동으로 합쳐져서 보여준다.

>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

문자열은 배열과 같이 숫자에 의해서 색인된다, 문자열의 첫번째 문자는 0 으로 색인 된다.
문자의 분리를 위한 형태는 존재하지 않는다, 단순히 한 문자는 문자열의 한 크기에 해당된다.

>>> word = 'Python'
>>> word[0]  # character in position 0
'P'
>>> word[5]  # character in position 5
'n'

문자열의 숫자에 의한 색인으로 마이너스 숫자도 사용 가능하다.
마이너스 숫자로 접근할때는 오른쪽부터 숫자를 계산한다.

>>> word[-1]  # last character
'n'
>>> word[-2]  # second-last character
'o'
>>> word[-6]
'P'

문자열 숫자 색인 -0 는 색인 0 과 같다. 마이너스 숫자 색인은 -1 부터 시작된다.

추가적으로, 숫자 색인을 사용해서 문자열을 분리 시킬 수 있다. 숫자 색인을 사용해서
문자열 안에 있는 특정 문자를 얻을 수 있다. 문자열 나눔으로 문자열을 일부분을 얻어 올수 있다.

>>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
'tho'

색인의 시작 숫자의 값은 항상 포함 하고, 마지막 숫자의 값은 항상 포함되지 않는다.
그래서 s[:i] + s[i:] = s 이다.

>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

숫자 색인으로 문자열을 나눔에 있어서 default 값은 매우 유용하다. 첫번째 숫자 색인을 생략하면
첫번째 숫자 색인의 default 값은 0 이다, 두번째 숫자 색인을 생략하면 두번째 숫자 색인의
default 값은 그 문자열의 크기이다.

>>> word[:2]   # character from the beginning to position 2 (excluded)
'Py'
>>> word[4:]   # characters from position 4 (included) to the end
'on'
>>> word[-2:]  # characters from the second-last (included) to the end
'on'

나눔에 있어서, 어떤 방법으로 적용되는지를 기억하는 방법은 문자 사이를 숫자로 지정하고, 첫번째 문자의 왼쪽
끝은 숫자 0, 그리고 마지막 문자의 오른쪽 끝은 문자의 크기 n 을 숫자 색인 n 으로 한다.

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

위의 첫번째 행은 각 문자 사이에 숫자는 0~6 이 색인 된다. 두번째 행은 마이너스 색인과 관련된다.
모든 문자 사이와 맨 왼쪽과 맨 오른쪽을 포함해서 숫자색인을 한다.

마이너스 색인인 아닌 정상 색인에서는 문자를 나누기 위한 길이는 숫자색인과는 다르다.
만약 문자열 나눔에 있어 앞 뒤를 모두 포함하고 위에 선언한 방식으로 보면 word[1:3] 의 문자열 길이는 2 이다.

만약 숫자색인된 것보다 큰 수를 사용하게 되면 에러가 발생한다.

>>> word[42]  # the word only has 6 characters
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

파이썬 문자열은 변경 불가 타입이다. 따라서 숫자 색인을 통한 문자 수정을 하면 에러가 발생한다.

>>> word[0] = 'J'
  ...
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
  ...
TypeError: 'str' object does not support item assignment

만약 문자열 변경을 원한다면 새로운 문자열을 생성해야 한다.

>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'

내장 함수 len() 은 문자열의 크기를 반환한다.

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

추가사항:

문자 시퀀스 타입 - 문자열
문자열은 시퀀스 타입이고, 시퀀스 타입이 가지는 일반적인 작업을 지원한다.

문자열 메쏘드
문자열은 기본적인으로 문자 변환 및 검색에 대한 많은 메쏘드를 지원한다.

문자열 서식
문자열은 자체 표현 서식을 지원한다.

서식 문자열 문법
str.format() 메쏘드를 통해서 문자열 서식 정보를 알 수 있다.

출력형태의 문자열 서식
예전 서식 작업은 문자열 왼쪽에 % 작업이 붙으면 호출 된다.
⚠️ **GitHub.com Fallback** ⚠️