An Informal Introduction to Python
다음에 보여드릴 예제에서, 입력과 출력은 프롬프트(>>>또는 …)가 있는지 없는지에 따라 구분이 됩니다. 예제를 따라하시려면요 항상 프롬프트 옆에다가 프롬프트가 떴을때 입력을 하셔야해요. 프롬프트가 없는 줄은 입력이 아니고 결과 값을 보여주는 출력라인입니다. 밑에 예제에서 보여주는 Secondary prompt는 빈줄을 넣었을때 나오는데요 보통 여러줄의 명령어를 입력할때 사용합니다.
파이썬은 #로 시작하면 그 줄의 끝까지를 주석으로 인식합니다. 여기 매뉴얼에 나온 많은 예제들이 주석과 함께 제공이 되는데요, 프롬프트에서 실행하는 예제들도 주석과 함께 제공됩니다. 주석은 어디든 넣을 수 있지만 파이썬의 문자열 변수 안에서는 #를 넣어도 주석으로 인식되지 않습니다. 그때는 그냥 문자열의 일부가 되는 것이지요. 주석은 파이썬에 의해 컴파일되지 않으며, 그저 코드에 대한 부연설명을 주어 코드의 의도를 좀더 명확하게 해주는 역할을 합니다. 프롬프트 예제에 나온 주석은 참고만 하시구요 굳이 넣지 않으셔도 됩니다. 아래는 주석에 대한 예제입니다.
# 이것은 첫번째 주석입니다
spam = 1 # 이것은 두번째 주석입니다
# 그리고 이것은 세번째고요
text = "# 이것은 주석이 아닙니다. 왜냐면 문자열 변수 안에 들어와 있으니까요"
Using Python as a Calculator
자 그럼 이제 간단한 파이썬 명령어를 실행해 볼까요? 파이썬 인터프리터를 실행하고 >>>프롬프트가 나타날때까지 기다리세요. 파이썬 인터프리터는 터미널에 다른 옵션없이 python이라고만 치면 바로 실행이 됩니다.
Numbers
인터프리터는 계산기로도 사용할 수 있어요: 프롬프트에 풀고자하는 산수공식을 입력하고 엔터를 치면 바로 결과를 보여주거든요. 공식을 입력할때는 +, -, *, /등의 연산자를 이용해 입력하시면 되고, 만약 먼저 계산해야하는 부분이 뒷쪽에 있거나 한 경우에는 (,)를 이용해서 계산의 우선순위를 정해줄 수 있습니다. 아래는 파이썬 인터프리터를 계산기로 활용하는 예제입니다.
>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5 # 나누기는 정수를 나누어 떨어져도 항상 실수로 결과를 보여줍니다
1.6
인터프리터에 보이는 2,4,20과 같은 숫자는 정수이고 파이썬에서 정수타입의 데이타는 int로 정의합니다. 그 밑에 5.0이나 1.6같은 숫자는 실수이고 파이썬에서 실수타입의 데이타는 float로 정의합니다. 숫자타입에 대한 더 자세한 내용은 앞으로 더 다룰 예정이니 계속 따라와주세요.
나누기(/)는 위의 주석에서도 언급했듯이 항상 실수로 결과를 반환합니다. 만약 정수 이하의 자리를 “버림”한 나누기를 하고 싶으실때는 //연산자를 사용하시면 됩니다. 그리고 몫으로 나눈 나머지만 얻고자 할때는 %연산자를 사용합니다.
>>> 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 ** 2 # 5의 제곱 (5 squared)
25
>>> 2 ** 7 # 2의 7제곱 (2 to the power of 7)
128
“같음”표시(=)는 변수에 값을 할당할때 사용합니다. 프롬프트에서 변수에 값을 할당하고 엔터를 쳤을때는 출력값으로 아무것도 나타나지 안습니다. 해당 변수를 입력하기 전까지는 말이죠.
>>> width = 20
>>> height = 5 * 9
>>> width * height
900
만약 선언되지 않은 (값을 할당하지 않은) 변수를 갖다 쓰려고 시도할때는 에러가 납니다.
>>> n # n이라는 변수는 어떤 값도 할당한 적이 없는데 여기서 쓰려고 합니다
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
프롬프트에 공식을 넣을때 정수와 실수를 마구 섞어서 계산을 시켜도 파이썬은 문제없이 잘 풀어 냅니다. 사용자가 일일이 데이타타입을 맞춰 줄 필요없이 파이썬이 자동으로 데이타타입을 변환하여 결과를 도출합니다.
>>> 4 * 3.75 - 1
14.0
대화형 모드에서는, 마지막에 출력된 결과가 _라는 변수에 매번 자동으로 저장이 됩니다. 이 말은 파이썬을 계산기로 사용하면 먼저 계산된 결과를 다시 입력할 필요없이 _로 대신하여 손쉽게 사용할 수 있다는 말이지요. 예제를 봐주세요.
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
이 변수 _는 읽을 수만 있고 임의로 값을 할당할수 는 없습니다. _에 억지로 값을 할당하려고 하지마세요. 그렇게 되면 _이 가지고 있는 마법같은 기능이 사라지고 _는 일개 변수로 전락해 버리니까요.
추가로, 파이썬에서는 int와 float 이외에도 Decimal이나 Fraction과 같은 다른 숫자 타입들도 지원하고 있습니다. 그리고 파이썬 역시 허수(complex numbers)를 기본적으로 지원하고 있으며, 사용은 j나 J를 숫자 뒤에 명시하여 구현할수 있습니다. 예를 들면 3+5j같이 말입니다.
Text
파이썬은 숫자뿐아니라 문자열을 다루는데도 매우 용이합니다. 문자열을 저장하는 변수는 str로 선언합니다. 문자는 단어rabbit나, 이름Paris, 문장Got your back. 그리고 특수문자!:)등을 전부 포함합니다. 문자열은 따옴표('...')에 넣어서 만들수도 있고 쌍따옴표("...")에 넣어서 저장할 수도 있으며 결과는 동일합니다.
>>> 'spam eggs' # 따옴표로 만든 문자열
'spam eggs'
>>> "Paris rabbit got your back :)! Yay!" # 쌍따옴표로 만든 문자열
'Paris rabbit got your back :)! Yay!'
>>> '1975' # 숫자도 따옴표에 넣으면 문자열이 됩니다
'1975'
여기서 한가지 주의할 점이 있는데 따옴표나 쌍따옴표를 문자열의 일부로 넣어주고 싶을때는 역슬래시\를 앞에 넣어 이스케이프 시켜줍니다. 따옴표로 만든 문자열에서는 쌍따옴표를 그냥 넣을 수 있고, 반대로 쌍따옴표로 만든 문자열에서는 역슬래시 없이 따옴표를 문자열에 포함시킬수 있습니다.
>>> 'doesn\'t' # \를 넣어서 중간에 따옴표가 문자열을 닫는 예약어가 아니고 그냥 문자로 인식
"doesn't"
>>> "doesn't" # 아니면 그냥 문자열을 쌍따옴표로 만들면 \없이 따옴표 사용 가능
"doesn't"
>>> '"Yes," they said.'
'"Yes," they said.'
>>> "\"Yes,\" they said."
'"Yes," they said.'
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
파이썬 쉘에서는 정의된 문자열과 출력되는 문자열이 다르게 보일 수 있습니다. 파이썬의 print()함수를 이용하면 보다 보기 좋은 결과를 출력할 수 있습니다. 아래 예제를 봐주세요.
>>> s = 'First line.\nSecond line.' # \n 는 줄바꿈을 뜻합니다
>>> s # print()함수를 쓰지 않으면, 줄바꿈기호가 그대로 출력됩니다
'First line.\nSecond line.'
>>> print(s) # print()를 쓰면, 줄바꿈기호가 실제로 줄바꿈을 실행한 결과를 보여줍니다
First line.
Second line.
만약 \로 표현되는 특수기호들을 무시하고 싶을때는 문자열 앞에 r을 넣어 \와 함께 표현되는 특수기호들도 그저 문자열의 일부로 인식이 됩니다. 아래 예제를 봐주세요.
>>> print('C:\some\name') # 여기서는 \n가 줄바꿈으로 인식되어 결과에 줄바꿈이 되었습니다.
C:\some
ame
>>> print(r'C:\some\name') # 문자열 앞에 r을 붙임으로써 특수기호도 일반 문자열로 인식하게 합니다.
C:\some\name
위와 같이 r을 넣어 따옴표 안에 모든 문자열이 순수하게 문자로만 인식되도록 하게 한 것을 raw string, 순수문자열 이라고 합니다. 이 순수문자열에서는 조금 이상한 부분이 있는데요, 그게 순수문자열 안의 \의 개수는 항상 짝수로 들어가야 한다는 겁니다. \가 홀수로 들어가면 에러가 나요. 이 문제에 대한 자세한 설명과 해결채은 the FAQ entry에서 확인해주세요.
>>> r'C:\this\will\not\work\'
File "<stdin>", line 1
r'C:\this\will\not\work\'
^
SyntaxError: unterminated string literal (detected at line 1)
문자열은 여러개의 줄로 나누어 선언할 수 있습니다. 그 방법은 """..."""나 '''...'''와 같이 3중따옴표를 사용하는 것입니다. 이때 발생한 줄바뀜 기호는 자동으로 문자열 안에 포함이 됩니다. 만약 줄바꿈 기호를 문자열에 포함시키고 싶지 않은 경우에는 줄의 맨 끝에 /를 추가하면 됩니다. 아래는 예제입니다.
print("""줄바꿈 \
안 되었습니다.
이번에는 되었구요.
""")
위의 명령은 아래의 결과를 출력합니다. 첫번째 줄은 \사용으로 줄바꿈이 안된것을 주목해주세요.
줄바꿈 안 되었습니다.
이번에는 되었구요.
여러개의 문자열은 +기호를 통해 서로 붙일 수 있고, *기호로는 여러번 반복시킬수도 있습니다.
>>> 2 * 'ma' + 'mia'
'mamamia'
두개 이상의 문자열들을 나열하면 자동으로 하나의 문자열로 인식됩니다.
>>> 'Py' 'thon'
'Python'
이 기능은 아래의 예제와 같이 긴 문자열을 정의할때 유용합니다.
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
단, 이 기능은 오직 문자열끼리만 가능하고 중간에 변수나 정수, 연산자등이 끼어 있으면 에러가 납니다.
>>> prefix = 'Py'
>>> prefix 'thon'
File "<stdin>", line 1
prefix 'thon'
^^^^^^
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^^^^^
SyntaxError: invalid syntax
만약 문자열을 변수와 붙이고 싶으면 +기호를 사용해서 붙일 수 있습니다.
>>> prefix + 'thon'
'Python'
문자열은 사실 각 문자들이 배열에 저장이 되어 연결된 형태로써 배열방 번호로 접근이 가능합니다. 문자열의 첫번째 문자는 배열방 법호 0번을 가집니다. 파이썬에서는 하나의 캐릭터를 위한 데이터 타입은 따로 존재하지 않으며, 하나의 문자는 단지 길이가 1인 문자열이 됩니다.
>>> word = 'Python'
>>> word[0] # character in position 0
'P'
>>> word[5] # character in position 5
'n'
배열방 번호는 음수로도 표현이 가능하며, 이때는 문자열의 맨 끝에서 부터 -1로 하나씩 늘어납니다.
>>> word[-1] # last character
'n'
>>> word[-2] # second-last character
'o'
>>> word[-6]
'P'
-0은 0인 관계로 뒤에서 부터 세는 방번호는 -1부터 시작합니다.
추가로 파이썬에서는 문자열을 잘라 나누는 기능도 제공합니다. 배열방 번호로 각 문자들을 방문할 수 있었다면, slicing은 문자열의 특정 부분을 떼어내는데 사용할 수 있습니다.
>>> word[0:2] # 0부터 2까지 (2번째 방 미포함)
'Py'
>>> word[2:5] # 2부터 5까지 (5번째 방 미포함)
'tho'
위의 예제에서 보듯이 0부터 2까지는 2번 주소가 가리키고 있는 배열방의 값은 포함하지 않습니다.
문자열 자르기는 매우 유용한 기본 기능을 가지고 있습니다. 만약 첫번째 인자가 생략이 되면 그것은 젤 처음 방부터 라는 의미입니다. 같은 맥락에서 두번째 인자가 생략이 되었다면, 마지막 문자까지라는 의미입니다.
>>> word[:2] # 앞에서 두자
'Py'
>>> word[4:] # 4번방 문자부터 끝까지
'on'
>>> word[-2:] # 뒤에서 두자
'on'
위의 예제들을 보셨다시피, 문자열 자르기에서 첫번째 인자에 적힌 배열방에 저장된 문자는 항상 포함이 되고, 두번째 인자에 명시된 방번호의 문자는 항상 제외시킵니다. 그래서 어떤 문자s를 s[:i] + s[i:]하게 되면 결과는 언제나 s입니다.
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'
주소가 각 방의 사이에 존재한다고 생각하면 외우기가 좀더 쉽습니다. 왼쪽 끝을 0이라고 하고 오른쪽 끝을 배열방의 개수라고 생각하고 Slice로 두개의 숫자가 호출되면 그 사이의 문자만 가져오게 되는 것입니다.
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
위의 표에서 보시듯이 첫번째 줄의 숫자는 0부터 6까지로 양수로 표현되고 두번째 줄은 동일한 뜻을 가지는 음수표현입니다. i부터 j까지를 slice한다면 해당 i와 j사이의 문자열을 잘라 반환하는 것이지요.
양수로 문자열을 slice하는 경우에 첫번째와 두번째 숫자간의 차이는 바로 반환할 문자열의 개수와도 일치합니다. 예를 들면 word[1:3]의 결과가 되는 문자열의 개수는 3-1, 즉 2가 되는 것처럼 말이죠.
만약 정의된 문자열의 길이보다 더 큰 주소에 접근하려고 한다면 에러가 납니다.
>>> word[42] # 문자열은 6자리인데 42자리에 접근하려고 하면 에러가 남
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
그런데 이와는 반대로 slice를 할때 더 큰 주소를 쓰는 것에는 좀 더 관대합니다.
>>> word[4:42]
'on'
>>> word[42:]
''
파이썬의 문자열은 바꿀수 없습니다. 이것을 immutable하다고 하지요. 그렇기 때문에 이미 할당된 문자열의 배열방에 접근하여 다른 문자로 바꾸려는 시도는 에러를 초래합니다.
>>> word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
만약 여러분이 다른 문자열을 저장해야할 필요가 있으시다면 새로운 문자열을 만드셔야합니다.
>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'
빌트인 함수인 len()은 문자열의 갯수를 반환합니다.
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
참고 문서:
Text Sequence Type — str
문자열은 시퀀스 타입의 예이며 시퀀스 타입에서 지원하는 모든 기능은 문자열에서도 지원합니다.String Methods
문자열은 기본 변환 및 검색을 위한 다양한 방법을 지원합니다.f-strings
표현식이 포함된 문자열Format String Syntax
str.format()을 사용한 문자열 형식화에 대한 정보printf-style String Formatting
문자열이 % 연산자의 왼쪽 피연산자일 때 호출되는 이전 형식화 연산은 여기에서 더 자세히 설명됩니다.
Lists
Python은 여러개의 값을 묶어서 관리하는데 여러 가지 복합적인 변수형태를 제공합니다. 그중 가장 요긴하게 쓰이는 것이 list로, 대괄호 사이에 쉼표로 구분된 값(항목)들을 나열하여 작성할 수 있습니다. 하나의 List에 다양한 변수형의 값을 저장할 수도 있지만 일반적으로 하나의 List에 저장하는 항목은 동일한 변수형을 갖습니다.
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
문자열과 마찬가지로 list도 방번호로 접근이 가능하고 slice도 할수 있습니다.
>>> squares[0] # indexing returns the item
1
>>> squares[-1]
25
>>> squares[-3:] # slicing returns a new list
[9, 16, 25]
모든 slice연산은 새로운 list를 만들어 필요한 값들을 저장한 뒤 결과를 반환합니다. 아래 slice의 결과는 list의 shallow copy 한 결과를 반환합니다. shallow copy란 새로운 list를 만들고 각 값들은 기존에 있던 변수의 주소를 가져와 저장하는 방식으로, 해당 변수까지도 다 새로 만들어 복사하는 deep copy와는 차이가 있습니다.
>>> squares[:]
[1, 4, 9, 16, 25]
또한 List는 문자열의 붙임과 비슷한 기능을 제공합니다.
>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
하지만 immutable한 특성을 지니는 문자열과는 달리 list는 mutable 타입으로 특정 아이템의 내용을 다른 것으로 변경할 수 있습니다.
>>> cubes = [1, 8, 27, 65, 125]
>>> cubes[3] = 64 # 3번방의 내용을 다른 값으로 대체합니다
>>> cubes
[1, 8, 27, 64, 125]
또한 list의 맨 끝에 새로운 값을 추가할 수도 있습니다. 이는 list.append() 함수를 사용하여 구현이 가능한데 이에 대한 더욱 자세한 설명은 추후에 언급하도록 하겠습니다.
>>> cubes.append(216)
>>> cubes.append(7 ** 3)
cubes
[1, 8, 27, 64, 125, 216, 343]
list의 각 방에 접근하여 변경하는 것 뿐만 아니라 slice기능을 하면서도 일부 내용을 변경하는 것이 가능합니다. 심지어 list의 총길이를 변경하거나 안의 내용을 아예 싹 지워 초기화 하는 것도 가능합니다.
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # slice기능을 통해 list의 일부내용을 변경
>>> letters[2:5] = ['C', 'D', 'E']
letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # 일부분만 삭제
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # list의 내용 전부 삭제
>>> letters[:] = []
>>> letters
[]
빌트인 함수인 len()는 list에도 사용할 수 있습니다.
>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4
또한 리스트 안에 값으로 또다른 리스트를 넣는 것이 가능합니다.
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
First Steps Towards Programming
물론 파이썬은 2+2같은 단순한 일 말고도 훨씬 복잡한 일들을 수행할 수 있습니다. 예를 들면 피보나치 수열(Fibonacci series)의 초기 하위 수열을 작성하는 것등 말이죠:
>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while a < 10:
... print(a)
... a, b = b, a+b
...
0
1
1
2
3
5
8
위의 예제에서는 몇가지 새로운 기능들을 사용했는데요:
- 첫번째 줄을 보시면 변수 a와 b가 동시에 0과 1의 값을 할당 받는 것을 보실수 있으실거에요. 이것이 새로 추가된 기능 중 하나인
다중 할당기능입니다. 예제의 마지막 줄에도 보시면 다중 할당이 되고 있는데요 오른쪽에 공식이 계산된 값이 b에 할당이 됩니다. - 여기서 while 반복문은 a가 10보 작은 동안 계속 반복됩니다. C와 마찬가지로 파이썬에서도 0이 아닌 모든 정수는 True가 됩니다. 하지만 변수의 값이 0이면 False입니다. 추가로, 반복문의 조건은 True나 False뿐만 아니라 문자열이나 List가 될수도 있고 다른 어떤 연속되는 저장공간이 들어갈 수도 있습니다. 단 List나 문자열의 길이가 0이면 False입니다. 위의 예제에서 사용된 비교문은 단순히 a를 정수 10과 비교하는 간단한 조건문 입니다. 표준 비교 연산자는 C와 동일하게 작성됩니다. <(보다 작음), >(보다 큼), ==(같음), <=(작거나 같음), >=(크거나 같음) 그리고 !=(같지 않음).
- 반복문 안의 본문은 들여쓰기가 되어 있습니다. 들여쓰기는 파이썬에서 각 명령어를 그룹화하는 방식입니다. 대화형 프롬프트에서는 들여쓰기된 각 줄에 탭이나 공백을 입력해야하고, 실제로 파이썬 코드를 파일에 저장하여 실행하는 경우에는 좀더 복잡하게 그룹화 할수 있습니다. 요즘 나오는 대부분의 편집기는 자동 들여쓰기 기능이 있어서 코딩하는데 수월하실거에요. 그리고 대화형으로 코딩을 하실때 들여쓰기를 해서 여러줄에 코드를 나누어 코딩하실때는 맨 마지막 줄을 빈줄로 남겨 놓아야 인터프리터가 거기가 코드의 끝인 줄을 알게 됩니다. 인터프리터는 어디까지가 코드의 끝인 줄을 모르기 때문에 마지막 줄을 빈줄로 넘기면 그때 인터프리터는 이제 여기까지 하고 결과를 보여줘야 하는 구나 하고 알게 되는 것이지요. 참고로 들여쓰기를 하실때 주의하실 점은 반드시 들여쓰는 양이 각 블록마다 동일한 양만큼 들여쓰기가 되어야 합니다. 어떤 블락은 2개 공백으로 들여쓰기 하시고 어떤 블락은 4개 공백으로 들여쓰기 하시면 들여쓰기가 일정하지 않다는 에러가 납니다.
print()함수는 넘겨받은 매개변수의 값을 출력합니다.print()가 출력을 진행하는 방식은 다양한 인자값이나, 부동 소수점의 갯수 또는 문자열에 따라 서로 다르게 처리할 수 있습니다. 앞의 계산기 예제에서 했던 것과 같이 단순하게 그저 여러분이 원하는 표현식을 출력하는 것과는 다른 방식으로 사용되어 질수 있어요. 일단 print()함수를 사용하시면 출력된 결과에서 문자열에 따옴표는 사라집니다. 그리고 print()의 인자로 여러개의 출력하고자하는 값을 나열할 수도 있습니다. 아래와 같이 두번째 인자에 변수명을 넣으면 첫번째 문자열을 출력한 후에 두번째 인자로 넣은i변수값65536을 그 뒤에 출력하는데요, 이때 자세히 보시면 각 아이템 간에공백이 들어가 있는 걸 참고하세요.
>>> i = 256*256
>>> print('The value of i is', i)
The value of i is 65536
print()를 사용하시면 얘가 출력후에 줄바꿈을 자동으로 합니다. 그런데 어떤때는 줄바꿈 없이 반복해서 출력하고 싶을때도 있잖아요. 그럴때는 키워드 인수 end를 사용하면 출력하고 나서 줄바꿈을 넣지 않고 대신에 end에 명시한 문자로 대체하여 출력해줍니다. 아래 예제를 봐주세요.
>>> a, b = 0, 1
... while a < 1000:
... print(a, end=',')
... a, b = b, a+b
...
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,