파이썬 기초¶
이 장에서는 주석, 리터럴 상수, 숫자(numbers), 문자열(string), 변수(variables), 수식(expressions), 들여쓰기(indentation), 연산자(operators), 연산 우선순위(operator precedence) 등에 대해서 알아본다.
주석¶
주석이란 소스 코드에서 프로그램을 설명하는 용도로 사용되며 해시문자
#
를 사용한다. 해시문자(#
)가 붙은 줄에서 #
뒤로 적힌 모든
내용들은 명령어로 인식하지 않는다. 예를 들면, 아래 코드에서 #
뒤에
적힌 문장 여기에 적힌 내용들은 명령어로 인식하지 않고 무시한다.
은
프로그램에 아무런 영향을 끼치지 않는다. 이 문장은 단지 코드를 읽는
사람에게 정보를 주기 위한 용도이다.
In [1]:
print("hello") # 여기에 적힌 내용들은 명령어로 인식하지 않고 무시한다.
hello
주석은 코드를 작성하면서 그 코드의 설명을 붙이기 위해서 사용되기도 한다.
In [17]:
def fibonacci(n):
# 피보나치 수열을 함수로 만들어 본 것이다.
if not isinstance(n, int):
raise Exception("정수를 입력하시오.")
if n > 2:
return fibonacci(n-1) + fibonacci(n-2)
elif n < 1:
raise Exception("0보다 큰수를 입력하세요.")
else: # n = 1, 2일 떄 1을 반환한다.
return 1
fibonacci(1)
Out[17]:
1
또는 코드를 실행시키지 않고 싶을 때 사용하기도 한다.
리터럴 상수¶
리터럴(literal)은 ‘글자 그대로’란 의미이므로 리터럴 상수란 ‘눈에 보이는
그대로 객체로 인식한다’는 뜻이다. 예를 들면 파이썬에서 숫자 100
은
정수형(int
) 숫자 100
으로 인식하고 1.234
는
부동소수형(float
) 숫자로 인식한다. 리터럴 상수형으로는 문자열,
정수, 부동소수점, 복소수, 바이트형이 있다.
리터럴 정수¶
리터럴 정수형 예제로
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
여기서 0o177
표현식은 첫번째 문자는 숫자 0
이고 두번째 문자
o
는 영어 소문자이다. 마찬가지로 0b100110111
,
0xdeadbeef
에서도 각각 첫번째 문자는 숫자이고 두번째는 영어
소문자이다. 0o(8진수)
형식은 8진수를 나타내는 것이고 0b(2진수)
,
0x(16진수)
는 각각 2진수, 16진수를 나타내는 것이다.
리터럴 부동소수점¶
리터럴 부동소수점은 숫자에 소수점을 붙여 사용한다. 다음은 여러 가지 부동소수점을 표현하는 방법이다.
3.14 10. .001 1e100 3.14e-10 0e0 -1E-100
여기서 3.14e-10
는 3.14 * 10 ** (-10)
을 의미하는 것이다. 즉
\(3.14 \times 10^{-10}\)을 의미한다.
리터럴 문자열¶
"hello"
, '안녕'
과 같이 큰 따옴표 "
또는 작은 따옴표
'
로 둘러싸인 문자열은 파이썬 문자열형(str
)로 인식한다.
여기서 주의할 것은 따옴표로 둘러싸인 숫자 "100"
은 숫자가 아니라
문자열로 인식한다는 것이다. 뿐만아니라 작은 따옴표 또는 큰 따옴표를
연속으로 3개를 사용하여 문자열을 만들 수 있다. 예를 들면
""" 이것은 문자열이다 """
'''이것도 문자열이다.'''
특히 """
또는 '''
을 사용하면 엔터를 쳐서 여러 줄에 걸쳐서
문자열을 만들 수 있다.
"""
여러 줄에
걸쳐서 문자열을 만들어 낸다.
"""
리터럴 허수¶
리터럴 허수는 부동소수점에 j
또는 J
를 붙여서 만든다.
3.14j 10.j 10j .001j 1e100j 3.14e-10j
리터럴 바이트형은 사이트 https://docs.python.org/3.6/reference/lexical_analysis.html#string-and-bytes-literals를 참조한다.
In [2]:
type(100)
Out[2]:
int
In [3]:
type(1.234)
Out[3]:
float
In [4]:
type("hello")
Out[4]:
str
In [5]:
type('안녕')
Out[5]:
str
In [6]:
type("100")
Out[6]:
str
type(x)
함수는 x
가 어떤 유형의 객체인지를 알려준다.
숫자¶
파이썬 숫자형은 정수형(int
), 부동소숫점형(float
) 및
복소수형(complex
) 세 가지가 있다.
모든 숫자형은 다음과 같은 연산자를 공통으로 갖고 있다.
연산 | 결과 | 참고 | 참조 |
---|---|---|---|
x + y |
x 와 y 의 덧셈 |
||
x - y |
x 와 y 의 뺄셈 |
||
x * y |
x 와 y 의 곱셈 |
||
x / y |
x 와 y 의 나눗셈 |
||
x // y |
x 와 y 의 바닥화된 몫 |
||
x % y |
x / y 의 나머지 |
||
-x |
x 의 부호 변경 |
||
+x |
x 자체 |
||
abs(x) |
x 의 절대값 또는 크기 |
abs() | |
int(x) |
x 를 정수형으로 변환 |
(3)(6) | int() |
float(x) |
x 를 부동 소수점형으로 변환 |
(4)(6) | float() |
complex(re, im) |
실수부분 re , 허수부분 im . im 은 기본값은 0 이다. |
complex() | |
c.conjugate() |
c 의 켤레복소수 |
||
divmod(x, y) |
순서쌍 (x // y, x % y) |
divmod() | |
pow(x, y) |
x 의 y 거듭제곰 |
pow() | |
x ** y |
x 의 y 거듭제곱 |
참고:
x / y
해서 나온 값보다 작거나 같은 정수 중 최대 정수를 반환한다. 예를 들면1//2
은0
,(-1)//2
은-1
,1//(-2)
은-1
, 그리고(-1)//(-2)
은0
이다.- 복소수인 경우는
abs()
를 이용해서 부동소수점으로 바꾼다.13 % 3
은1
을 반환한다.-25.5 % 2.25
는1.5
를 반환한다. 나머지의 부호는 두 번째 피연산자의 부호를 따른다. 항상x == (x//y)*y + (x%y)
의 관계식을 만족한다. - 부동소수점형에서 정수형으로 변환될 때 어림 또는 절단이 발생할 수 있다. 자세한 것은 math.floor() 와 math.ceil()를 참조하자.
float()
는+-
부호와 함께 문자열'nan'
과'inf'
을 인자로 받아서 각각nan(Not a Number)
및+-inf
를 나타낼 수 있다.- 파이썬은
pow(0, 0)
과0 ** 0
을1
로 정의한다. - 숫자형 리터럴 상수도 가능하다.
정수형¶
정수형 숫자의 크기는
무제한이다.
정수형을 만드는 방법은 리터럴 상수형에서 본 것과
같이 리터럴
정수를
사용하는 방법과 정수형
객체를
만드는 함수 int(x)
를 사용하는 방법이 있다.
In [7]:
print(int(100), int(1.56), int(-1.56), sep=', ')
print(int('1234'))
100, 1, -1
1234
int(100)
은 정수형 100을 의미하고 int(1.56)
및 int(-1.56)
은 정수 1
과 -1
을 각각 반환한다. 즉, x
부터 0쪽 방향으로
정수들 중 x
에 가장 가까운 정수를 반환한다. 또한 숫자 대신 문자열을
사용할 수 있다. 즉, int('1234')
은 정수 1234
을 의미한다. 이
때 문자열은 정수 문자열만 가능하다.
int(x, base=10)
을 이용하여 정수형을 만들 수 있다. x
는 숫자가
아니면 문자열,
bytes, 또는
bytearray
객체이어야만 한다. x
가 문자열이면 진법(base
)에 맞는 문자열이
와야 한다.
int('a1', base=16)
과 같이 사용하면 16진수 a1
을 나타내는
것으로 10진수로 161
을 나타낸다.
In [8]:
int('A1', base=16)
Out[8]:
161
진법에 맞지 않는 문자열이 나오면 에러가 난다.
In [1]:
int('1201', base=2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-d5c5cea53d05> in <module>()
----> 1 int('1201', base=2)
ValueError: invalid literal for int() with base 2: '1201'
2진법 문자열 중에 2
가 나왔으므로 오류가 발생된다. 2진법은 0
또는 1
로만 구성되어 있어야 한다.
0b
, 0o
, 0x
로 시작해서 이진수, 8진수, 16진수로 사용할 수
있다.
In [2]:
int(0xFA10)
Out[2]:
64016
직접하기
- 이진수
1001001
을 정수로 나타내시오. - 8진수
70372
를 정수로 나타내시오. - 16진수
1A3FE5
를 정수로 나타내시오. - 위의 각각의 정수를 거꾸로 2진수, 8진수, 16진수로 바꾸어
보시오.(
bin()
,oct()
,hex()
를 사용하시오.)
부동소수점형¶
부동소수점형의 크기는 시스템에 따라 달라질 수 있고 sys.float_info을 통해서 값을 알 수 있다.
In [3]:
import sys
sys.float_info
Out[3]:
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
파이썬 부동소수점형으로 표현할 수 있는 가장 큰 수(max), 가장 작은 수(min), 2의 최대 거듭제곱(max_exp - 1), 10의 최대 거듭제곱(max_10_exp), 신뢰할 수 있는 최대 숫자길이(dig), 2진법으로 나타냈을 때 최대 숫자 표현 길이(mant_dig), 1과 1보다 큰 바로 윗 수와의 차(epsilon) 등을 나타낸다.
정수형과 마찬가지로 리터럴 상수형 형식 1.234
와 같이 소숫점을
이용한 숫자로 만들 수도 있고 float(x)
와 같이 부동소수점형 함수를
이용해서 만들 수 있다. x
는 리터럴 부동소수점형 및 문자열이 될 수
있다.
In [5]:
float(1.234)
Out[5]:
1.234
In [6]:
float('-1.23e4')
Out[6]:
-12300.0
거듭제곱을 나타내는 문자 e
또는 E
를 사용할 때는 반드시 숫자가
앞에 나와야 한다.
In [7]:
float('E3')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-dfee201f09ad> in <module>()
----> 1 float('E3')
ValueError: could not convert string to float: 'E3'
직접하기
- \(10^{308}\)을
float
를 이용해서 표시하시오. - \(2^{1024}\), \(1.99^{1024}\)를 float를 이용해서 나타내보시오.
inf
,-inf
가 무엇인지 이야기해 보시오.
복소수형¶
복소수형은 리터럴 복소수형 또는 complex(re, im)
함수를 통해 만들 수
있다. 여기서 re
는 실수부분, im
은 허수부분의 부동소수점형을
넣으면 된다. 예를 들면 1 + 2j
복소수를 만들고 싶으면 다음과 같이
한다.
In [8]:
complex(1, 2)
Out[8]:
(1+2j)
여기서 j
는 허수부분을 나타내는 표시이다. 수학 서적에서는 i
로
표시하기도 한다. 또는 간단히 1 + 2j
와 같이 써도 된다. 그런데 2
와 j
는 반드시 붙여 써야 한다.
In [9]:
(1 + 2j) + complex(2, 3)
Out[9]:
(3+5j)
복소수 객체의 imag
, real
속성을 이용해서 실수부분과 허수부분에
접근할 수 있다.
직접하기
- \(z_1 = -1 + 3i\), \(z_2 = 2 - 5i\)에 대해서 사칙연산을 수행해 보시오.
- 복소수
-3 + 5j
의 실수 및 허수부분을 각각 출력하는 코드를 작성하시오.
문자열¶
문자열은 리터럴 상수형에서 살펴본 바와 같이 작은
따옴표, 큰 따옴표로 둘러싸면 문자열이 된다. 또는 str(x)
함수를
이용해서 문자열을 만들 수 있다. str(x)
는 x
객체의
__str()__
함수가 구현되어 있으면 x.__str()__
값이 반환되고
그렇지 않으면 repr(x)
값이
반환된다.
In [1]:
문자열 = str(123.12)
type(문자열)
Out[1]:
str
문자열 접근¶
문자열은 열거형의 일종이기 때문에 문자열에 있는 하나 하나의 문자들을 인덱스를 통해 접근할 수 있다. 파이썬에서 인덱스란 열거형 안에 있는 항목들의 순서를 나타내는 0부터 시작하는 양의 정수를 말한다.
In [68]:
문자열 = "문자열은 열거형이라서 인덱스를 통해서 성분들을 접근할 수 있다."
print("인덱스 0인 문자:", 문자열[0])
인덱스 0인 문자: 문
열거형은 슬라이싱도 가능하다. 즉, 원하는 부분만 추려낼 수 있다.
In [69]:
문자열 = "문자열은 열거형이라서 인덱스를 통해서 성분들을 접근할 수 있다."
print("0부터 10까지 성분들:", 문자열[0:11])
0부터 10까지 성분들: 문자열은 열거형이라서
열거형의 성분들의 갯수를 알 수 있는 len()
함수를 이용할 수 있다.
In [70]:
문자열 = "문자열 성분의 갯수를 알수 있다."
len(문자열)
Out[70]:
18
문자열의 마지막 문자를 알아보기 위해서 다음과 같이 문자열의 크기로 접근하면 에러가 난다.
In [71]:
문자열 = "문자열 성분의 갯수를 알수 있다!"
문자열크기 = len(문자열)
문자열[문자열크기]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-71-db68cc434fbd> in <module>()
1 문자열 = "문자열 성분의 갯수를 알수 있다!"
2 문자열크기 = len(문자열)
----> 3 문자열[문자열크기]
IndexError: string index out of range
왜냐하면 문자열의 인덱스는 0부터 시작하기 때문에 문자열의 마지막
인덱스는 len(문자열)-1
이 된다.
In [72]:
문자열 = "문자열 성분의 갯수를 알수 있다!"
문자열크기 = len(문자열)
문자열[문자열크기 - 1]
Out[72]:
'!'
+
연산자를 이용해서 2개의 문자열을 붙일 수 있다.
In [73]:
"앞 문자열" + "뒷 문자열"
Out[73]:
'앞 문자열뒷 문자열'
그런데 숫자와 문자열을 붙일려고 +
연산자를 사용하면 다음과 같은
에러가 난다.
In [74]:
"문자열" + 100
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-74-a8d3652033c4> in <module>()
----> 1 "문자열" + 100
TypeError: must be str, not int
100
은 숫자형이라서 문자열과 +
덧셈이 정의되지 않아서 에러를
내는 것이다. 이럴때는 숫자형을 문자형으로 변형하는 str()
메소드를
사용하면된다.
In [75]:
"문자열" + str(100)
Out[75]:
'문자열100'
비교 연산¶
비교 연산자 <, >, ==
를 이용하여 두 문자열을 비교할 수 있다. 두
문자열은 사전식 배열의 순서를 가지고 앞, 뒤를 비교한다. 문자열은 사전식
배열에서 뒤에 있을 수록 커진다.
In [76]:
"나는" < "너는"
Out[76]:
True
In [77]:
단어 = "한글"
if 단어 == "한글":
print(단어+"을 사랑합시다.")
한글을 사랑합시다.
모든 영문 대문자는 소문자보다 앞에 있다.
In [78]:
'Z' < 'a'
Out[78]:
True
in
과 not in
연산¶
문자열 안에 부분 문자열이 있는지를 확인할 수 있는 연산자 in
또는
not in
을 사용할 수 있다.
In [79]:
"사" in "사과"
Out[79]:
True
In [80]:
"소" in "사과"
Out[80]:
False
In [81]:
"붕어" in "붕어빵에 붕어가 있다?"
Out[81]:
True
In [82]:
"호두알" not in "호두과자"
Out[82]:
True
불변(immutable)¶
문자열은 불변이라서 한 번 만들어진 문자열 객체의 내용을 변경할 수 없다. 아래와 같이 문자열의 일부를 변경하려고 하면 에러를 발생시킨다.
In [84]:
문자열 = "문자열의 내용은 변경할 수 없다."
문자열[0] = '글'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-84-b66cd0a0738b> in <module>()
1 문자열 = "문자열의 내용은 변경할 수 없다."
2
----> 3 문자열[0] = '글'
TypeError: 'str' object does not support item assignment
그렇지만 새로운 객체를 기존의 변수에 대입하는 것은 아무 문제가 되질 않는다.
In [85]:
문자열 = "문자열의 내용은 변경할 수 없다."
문자열 = "새로운 문자열 객체를 대입한다."
print(문자열)
새로운 문자열 객체를 대입한다.
format¶
형식 문자열(format string)에 대해서
format()
메소드를 사용할 수 있다. 형식 문자열이란 중괄호 { }
를
포함하는 문자열을 말한다. 형식 문자열은 중괄호 기호를 제외한 모든
문자열을 리터럴 문자열로 간주한다. 형식 문자열 안에 중괄호를 표시하려면
중괄호를 두 번 {{
또는 }}
를 사용하면 된다.
In [86]:
문 = "format 메소드에서는 중괄호 {}를 제외한 모든 문자열은 리터럴 문자열로 간주한다!. 중괄호를 표시하고 싶으면 {{ 와 같이 두 번 }} 쓴다."
문.format("(이곳이 중괄호가 있던 곳이다)")
Out[86]:
'format 메소드에서는 중괄호 (이곳이 중괄호가 있던 곳이다)를 제외한 모든 문자열은 리터럴 문자열로 간주한다!. 중괄호를 표시하고 싶으면 { 와 같이 두 번 } 쓴다.'
변수 문
에 대입되는 문자열 안에 중괄호가 포함되어 있기 때문에 형식
문자열이 된다. 형식 문자열 안의 중괄호에는 format(인자)
메소드에
인자를 넣어서 중괄호를 대체할 수 있다. 여기서는
"(이곳이 중괄호가 있던 곳이다)"
문자열 인자를 넣었다. 중괄호 안에
공백 문자가 있으면 format()
메소드 사용시 다음과 같은 에러가 나므로
중괄호 안에는 형식에 맞도록 사용해야 한다.
In [87]:
"중괄호 { } 안에 공백 문자가 있으면 에러가 난다".format("에러") # 중괄호 사이에 공백문자(스페이스)가 있어 에러
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-87-6cc1067c8bc1> in <module>()
----> 1 "중괄호 { } 안에 공백 문자가 있으면 에러가 난다".format("에러") # 중괄호 사이에 공백문자(스페이스)가 있어 에러
KeyError: ' '
예제¶
예제를 통해서 익혀보자. 중괄호 안에 인자의 순서에 해당하는 인덱스를 넣어서 원하는 위치에 인자값을 표시할 수 있다.
In [88]:
"{0}번째, {1}번째, {2}번째".format("첫", "두", 3)
Out[88]:
'첫번째, 두번째, 3번째'
인자의 인덱스를 바꾸어 출력되는 값을 변경할 수 있다.
In [89]:
"순서를 바꿀 수 있다. {1}번째, {2}번째, {0}번째".format("첫", "두", 3)
Out[89]:
'순서를 바꿀 수 있다. 두번째, 3번째, 첫번째'
중괄호 안을 비워두면 인자가 순서대로 대입된다. 중괄호 안에 인덱스가 부분적으로 들어가면 에러가 난다. 인자의 인덱스는 모두 들어가든지 아니면 모두 비워 두어야 한다. 단 키워드 인자의 이름은 어느 곳에 위치해도 상관없다.
In [90]:
"{}번째, {}번째, {}번째".format("첫", "두", 3)
Out[90]:
'첫번째, 두번째, 3번째'
함수 단원에서 배웠던 *
연산자를 통해서 리스트 또는 튜플을 인자에서
풀어서 사용할 수 있다.
In [91]:
풀리는인자 = ("첫", "두", "3")
"{}번째, {}번째, {}번째".format(*풀리는인자)
Out[91]:
'첫번째, 두번째, 3번째'
인자의 인덱스를 중복해서 사용할 수 있고 사용하지 않아되 된다.
In [92]:
"{0}번째, {2}번째, {0}번째".format("첫", "두", 3)
Out[92]:
'첫번째, 3번째, 첫번째'
format()
메소드 인자로 키워드 인자가 들어갈 수 있다. 키워드 인자의
이름 중괄호 안에 대입하여 원하는 결과를 만들어 낸다.
In [93]:
"우리가 사용하는 {언어}은 {만든이}과 여러 학자들이 만들었다.".format(언어="한글", 만든이="세종대왕")
Out[93]:
'우리가 사용하는 한글은 세종대왕과 여러 학자들이 만들었다.'
객체의 속성을 표시할 수 있다. 복소수는 실수부분과 허수부분의 속성을 갖고 있다. 이 속성을 키워드와 인덱스를 이용하여 접근하여 표시할 수 있다.
In [94]:
복소수 = 2 - 5j
print("복소수의 실수부분은 {수.real}이고 허수부분은 {수.imag}이다.".format(수=복소수)) # 키워드 이용
print("복소수의 실수부분은 {0.real}이고 허수부분은 {0.imag}이다.".format(복소수)) # 인덱스 이용
복소수의 실수부분은 2.0이고 허수부분은 -5.0이다.
복소수의 실수부분은 2.0이고 허수부분은 -5.0이다.
중괄호 안에 콜론 :
뒤에 삽입될 문자열에 대한 세부 형식을 지정할 수
있다. 즉 {인자이름:형식}
과 같이 사용할 수있다. 형식
은 다음과
같다.
[[채울문자]정렬기호][부호][#][0][길이][그룹옵션][.소숫점길이][타입]
길이
란 출력될 문자열의 크기이다. 채울문자
는 문자열이
삽입되고 지정된 길이의 남는 공간을 채울 문자이다. 정렬기호
란
삽입될 문자열이 배치될 위치를 나타내는 문자이다.
정렬기호 | 의미 |
---|---|
< |
삽입될 문자열을 왼쪽에 위치 |
> |
삽입될 문자열을 오른쪽에 위치 |
^ |
삽입될 문자열을 가운데 위치 |
In [95]:
문 = "삽입 문자열"
print("{:#^20}".format(문))
#######삽입 문자열#######
채울문자
를 지정했으면 반드시 정렬기호
가 함께 입력되어야
한다.
In [96]:
문 = "삽입 문자열"
print("{:*20}".format(문))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-96-1227b77267ec> in <module>()
1 문 = "삽입 문자열"
2
----> 3 print("{:*20}".format(문))
ValueError: Invalid format specifier
채울 문자 *
이 있는데 뒤에 정렬 기호가 없기 때문에 오류가 발생한다.
부호
는 삽입될 인자가 숫자일 때 사용하는 것으로 +
, -
,
스페이스(공백)가 입력가능하다.
부호 옵션 | 의미 |
---|---|
+ |
양수, 음수 모두 부호 표시 |
- |
음수일 때만 부호 표시 |
스페이스 |
양수일 때는 부호가 스페이스(공백)이고 음수일 때는 - 기호 표시 |
In [97]:
print("{:#^+10}".format(1.234))
print("{:#^ 10}".format(1.234))
##+1.234##
## 1.234##
#
문자는 삽입 인자가 숫자형일 때 사용되는 것으로 타입
에 따라서
이진법은 0b
, 8진법은 0o
, 16진법은 0x
가 숫자 앞에 표시된다.
In [98]:
print("정수: {0:#d}, 2진수: {0:#b}, 8진수: {0:#o}, 16진수: {0:#x}".format(23))
정수: 23, 2진수: 0b10111, 8진수: 0o27, 16진수: 0x17
더 자세한 형식 문자열은 https://docs.python.org/3/library/string.html#formatstrings 을 참조하자.
replace¶
replace(찾을, 바뀔)
찾을
문자열을 바뀔
문자열로 모두 바꾸어
새로운 문자열을 반환한다.
In [99]:
문자열 = "아찔아찔 현기증이 난다."
새문자열 = 문자열.replace("아", "어")
print("새문자열:", 새문자열)
새문자열: 어찔어찔 현기증이 난다.
startswith, endswith¶
startswith(시작문자열)
시작문자열
로 시작하면 True
를
반환하고 그렇지 않으면 False
를 반환한다. 마찬가지로
endswith(끝나는문자열)
끝나는문자열
로 끝나면 True
그렇지
않으면 False
를 반환한다.
In [100]:
문자열 = "반짝 반짝 작은 별"
print(문자열.startswith("반짝"))
print(문자열.endswith("별"))
print(문자열.startswith("번쩍"))
print(문자열.endswith("벌"))
print(문자열.startswith(("번쩍", "반짝"))) # 문자열 튜플이 올 수 있다.
True
True
False
False
True
find¶
문자열.find(찾을문자열)
문자열 안에 찾을문자열
이 처음으로
발견되는 인덱스를 반환한다. 찾는 문자열이 없으면 -1
을 반환한다.
In [102]:
문자열 = "반짝 반짝 작은 별"
문자열.find("짝")
Out[102]:
1
참고: 문자열 안에 찾을 문자열이 있는 지 없는 지를 알고 싶으면 in
을
사용한다.
In [103]:
문자열 = "반짝 반짝 작은 별"
"짝" in 문자열
Out[103]:
True
split¶
문자열 메소드 중에서 많이 사용되는 메소드 중의 하나가 split
이다.
여러 단어로 이루어진 문자열을 여백을 기준으로 단어들을 분리해서 리스트를
만들어 반환한다. 리스트를 만들어 반환할 때 여백은 포함시키지 않는다.
여백(whitespace)이란 탭(tab), 새 줄(new line), 공백(space) 문자들을
의미한다.
In [104]:
문자열 = "너의 마음은 나의 마음\n 나의 마음은 너의 마음"
문자열.split()
Out[104]:
['너의', '마음은', '나의', '마음', '나의', '마음은', '너의', '마음']
문자열.split(구분문자열)
을 이용하면 구분문자열
을 기준으로
문자열을 분리한다.
In [105]:
문자열 = "너의 마음은 나의 마음 나의 마음은 너의 마음"
문자열.split("의")
Out[105]:
['너', ' 마음은 나', ' 마음 나', ' 마음은 너', ' 마음']
구분 문자열이 연속이 될 때는 빈 문자로 분리된다.
In [106]:
"1,,2,3".split(',')
Out[106]:
['1', '', '2', '3']
낱 글자로 분리하려면 list()
를 이용한다.
In [107]:
문자열 = "너의 마음은 나의 마음"
list(문자열)
Out[107]:
['너', '의', ' ', '마', '음', '은', ' ', '나', '의', ' ', '마', '음']
직접하기
input()
함수를 이용해서 여러 개의 숫자를 한꺼번에 입력받아 모두 더한 값을 출력하는 프로그램을 작성하시오.
join¶
문자열.join(반복가능객체)
은 반복가능객체
의 각 성분 사이를
문자열
로 연결한다.
In [108]:
전화번호 = "010 1234 5678"
번호리스트 = 전화번호.split()
print("번호리스트:", 번호리스트)
번호 = "-".join(번호리스트)
print("연결된 번호:", 번호)
번호리스트: ['010', '1234', '5678']
연결된 번호: 010-1234-5678
반복가능 객체의 성분은 문자열이어야 한다.
In [109]:
반복가능 = [("ㄱ", "ㄴ"), ("ㄷ", "ㄹ")]
"-".join(반복가능)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-109-d0a56bbe4d5e> in <module>()
1 반복가능 = [("ㄱ", "ㄴ"), ("ㄷ", "ㄹ")]
----> 2 "-".join(반복가능)
TypeError: sequence item 0: expected str instance, tuple found
직접하기
- 문자열
'010*1234****5678'
을'010-1234-5678'
로 바꾸는 프로그램을 작성하시오.
문자열에 대해서 더 세밀한 작업을 하려면 정규 표현식(regular expression) 모듈 re을 살펴보면 된다.
연습문제¶
사용자로부터
input()
함수를 이용하여 숫자 5개를 쉼표로 구분해서 입력을 받아split()
을 이용하여 리스트로 만들어 각각의 수를 출력하시오.사용자로부터 문자열을 입력받아 그 문자열 안에 “는”이라는 문자가 포함된 단어와 단어의 갯수를 출력하는 프로그램을 작성하시오.
문자열
"너의 마음은 나의 마음 나의 마음은 너의 마음"
에서"너"
는"나"
로"나"
는"너"
로 바꾸는 프로그램을 작성하시오.사용자로부터 휴대폰 전화번호를 입력받고 유효한 번호인지를 확인하는 함수
전화번호확인(문자열)
를 작성하시오. 유효하면 입력한 번호를 xxx-xxxx-xxxx 형식으로 출력하시오. 입력 받는 문자 중에-
는 유효한 것으로 받아들이도록 한다. 아래 그림과 같은 결과가 나오도록 하시오.새로운 암호를 만들 때 숫자, 문자, 특수문자가 반드시 한 문자 이상씩 포함되어야 하고 문자의 갯수는 적어도 8자 이상이어야 한다. 사용자가 문자열을 입력했을 때 암호 조건에 맞는지 확인하는 프로그램을 작성하시오. 공백문자는 포함하면 안된다. 특수문자는 다음을 사용한다.
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
포멧(format) 함수¶
문자열을 생성하려고 할 때, 종종 다른 정보들을 포함하여 생성하고 싶을 때가 있다. 이럴 때 format() 함수를 이용해서 문자열을 편리하게 다룰 수 있다.
age = 20
name = '홍길동'
print('{0}의 나이는 {1}살 입니다.'.format(name, age))
print('{0}은 파이썬 프로그래밍을 좋아합니다.'.format(name))
괄호 { }
안의 숫자는 format()
에 있는 인수의 인덱스를 나타낸다.
인덱스는 0부터 시작한다. { }
안의 숫자가 없으면 인자의 순서대로
들어가게 된다. 중괄호 {}
를 포함하는 문자열을 형식 문자열(formatted
string)이라고 한다. 형식 문자열은 데이터 형 부분에서 자세히 다룬다.
age = 20
name = '홍길동'
print('{}의 나이는 {}살 입니다.'.format(name, age))
print('{}은 파이썬 프로그래밍을 좋아합니다.'.format(name))
괄호 {}
안에 공백이 있으면 안된다. 표시되는 형식을 더 세밀하게
조정할 수 있다.
In [13]:
# 소수점 3자리까지 표시
print('{0:.3f}'.format(1.0/3))
# 밑줄 문자 '_' 로 11칸을 채우고, 그 중간에 'hello' 문자열을 놓는다.
# (^) 은 문자열을 중앙에 위치시키고 (>)은 오른쪽, (<)은 왼쪽에 위치시킨다.
print('{0:_^11}'.format('hello'))
# 변수를 이용해서 표시할 수 있다.
print('{name}는 {book} 책을 만들고 있다.'.format(name='윤대기', book='"파이썬 한 입"'))
0.333
___hello___
윤대기는 "파이썬 한 입" 책을 만들고 있다.
탈출 문자열(escape sequence)¶
'What's your name?'
과 같이 작은 따옴표 '
로 만들어진 문자열
안에 작은 따옴표가 있으면 문자열이 어디서 끝나는지를 명확하게 알 수 없게
되므로 에러를 낸다.
In [14]:
'What's your name'
File "<ipython-input-14-d10fcea8627e>", line 1
'What's your name'
^
SyntaxError: invalid syntax
이 때는 "What's your name?"
과 같이 큰 따옴표를 사용해도 되지만
탈출 문자 역슬래시 \
를 이용해서 작은 따옴표를 사용하면서도 문자열
안에 작은 따옴표 '
를 넣을 수 있다. 즉, \'
와 같이 작은 따옴표
앞에 역슬래시 \
를 붙임으로 작은 따옴표를 문자열을 만드는 문자가
아니라고 인식하게 한다. 마찬가지 방법으로 탈출문자와 큰 따옴표를
사용함으로 큰 따옴표를 문자열에 포함시킬 수 있다.
In [15]:
'What\'s your name'
Out[15]:
"What's your name"
역슬래시 자체를 문자열에 포함시키려면 역슬래시를 두 번 \\
사용하면된다. \n
문자열(new line)을 이용하면 이 문자열이 위치한
곳에서 엔터를 치는 효과를 얻을 수 있다. 즉 \n
뒷부분부터 새로운 줄에
표시되게 한다.
In [16]:
print("첫번째 줄입니다.\n여기부터는 두번째 줄입니다.")
첫번째 줄입니다.
여기부터는 두번째 줄입니다.
\t
문자열을 이용하면 키보드에서 탭(Tab) 키를 누른 효과를 낼 수 있다.
In [17]:
print("하나\t둘\t셋")
하나 둘 셋
문자열에 대한 자세한 사용법은 앞으로 나올 클래스 부분에서 다루게 될 것이다.
변수¶
변수는 어떤 값을 담는 바구니라고 생각할 수 있다. 파이썬에서 변수는
객체를 가리키는 이름으로 사용된다. 변수 이름을 만드는 규칙은 첫문자는
반드시 알파벳 또는 밑줄(_
)을 사용해야하고, 두번째 문자부터는
알파벳, 숫자 또는 밑줄이 나올 수 있다. 변수 이름으로 공백문자는 포함할
수 없으며, 첫 문자로 숫자가 나오면 안된다. 또한 대문자, 소문자를 다르게
인식을 하기 때문에 School
과 school
은 다른 변수 이름이 된다.
알파벳 대신에 유니코드도 가능하다. 즉 한글 변수도 사용할 수 있다.
In [18]:
한글 = 1234
_x1 = "첫문자 밑줄 가능"
School = "학교"
school = "대문자 School과 다른 변수"
my_name = "문자 사이에 밑줄 가능"
print(한글 * 10 + 5, _x1, School, school, my_name, sep='\n')
12345
첫문자 밑줄 가능
학교
대문자 School과 다른 변수
문자 사이에 밑줄 가능
다음은 모두 잘못된 변수 이름이다.
In [19]:
35name = '첫문자로 숫자가 올 수 없다'
File "<ipython-input-19-9d7f89eb01fd>", line 1
35name = '첫문자로 숫자가 올 수 없다'
^
SyntaxError: invalid syntax
여기서 첫 문자로 숫자 3
을 변수이름으로 사용할 수 없다. 첫 문자는
반드시 알파벳 또는 밑줄이 와야 한다.
In [20]:
m$ = 100
File "<ipython-input-20-8234573aaed3>", line 1
m$ = 100
^
SyntaxError: invalid syntax
특수 문자 $
를 변수에 사용할 수 없다.
In [21]:
class = '키워드'
File "<ipython-input-21-c0af7fbbd350>", line 1
class = '키워드'
^
SyntaxError: invalid syntax
파이썬 키워드 즉, 파이썬이 미리 예약해둔 문자열은 변수로 사용할 수 없다. 다음은 파이썬 키워드들이다.
False class finally is return
None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise
식(expression)¶
식이란 함수 호출, 변수, 연산자와 상수들의 조합이다. 파이썬 인터프리터는 식을 평가해서 결과값을 얻고 표시한다.
다음은 상수와 상수의 연산으로 이루어진 식이다.
2 + 3
다음은 변수 x
와 상수의 연산으로 이루어진 식이다.
x + 2
sin
함수와 변수 x
, 상수의 연산으로 이루어진 식이다.
import math
math.sin(2) + x ** 2
들여쓰기¶
다른 언어(C, C++, Java
등)와 다르게 파이썬은 들여쓰기를 특별하게
인식한다. 들여쓰기를 통해서 같은 블록안에 있다는 것을 표시한다. 다음과
같이 들여쓰기를 하면 에러가 난다.
In [22]:
print('same block?')
print('no!') # 에러
File "<ipython-input-22-b3cf98a014a3>", line 2
print('no!') # 에러
^
IndentationError: unexpected indent
들여쓰기가 필요한 경우는 if
, while
또는 함수를 정의할 때와 같이
새로운 블록이 필요할 때이다. 나중에 나오겠지만 if
문을 예를 들면
x = 5
if x > 2:
print('x = ', x) # -- (1)
print('x 는 2보다 크다.') # --(2)
else:
print('x = ', x) # --(3)
print('x 는 2보다 작거나 같다.') # --(4)
(1), (2)
는 같은 크기만큼 들여쓰기를 했으므로 같은 블록 안에 있는
걸로 인식한다. (3), (4)
도 마찬가지로 같은 블록으로 인식한다.
연산자¶
연산자(operator)란 계산을 하기 위해서 사용되는 특별한 문자열이다. 예를
들어 2 + 3
에서 +
는 덧셈 연산자라고 부른다. 2
와
3
은 피연산자(operand)라고 한다.
연산자 | 설명 |
---|---|
+ (덧셈 연산자) |
x + y 는 x 와 y 를 더한다.
3 + 5 는 8 을 반환하고 'a' + 'b' 는
'ab' 를 반환한다. |
- (뺄셈 연산자) |
x- y 는 x 에서 y 를 뺀다. 첫 번째
피연산자가 주어지지 않으면, 0으로 간주된다.
-5.2 는 음수를 표현한다. 50 - 24 는 26
을 반환한다. |
* (곱셈 연산자) |
두 숫자의 곱 혹은 지정된 숫자만큼 반복된 문자열을
반환한다. 2 * 3 은 6 을 반환하고
'la' * 3 은 lalala 를 반환한다. |
** (거듭제곱
연산자) |
x ** y 는 x 의 y제곱을 반환한다. 3 ** 4
는 81 을 반환한다 (이 값은 3 * 3 * 3 * 3
과 같다). |
/ (나눗셈 연산자) |
x / y 는 x 를 y 로 나눈
부동소수점형 숫자를 반환한다. |
// (몫 연산자) |
x // y 는 x / y 해서 나온 값보다 작거나
같은 정수 중 최대 정수를 반환한다. 연산자와 수식
13 // 3 은 4 를 반환한다. -13 // 3 은
-13 / 3 = -4.333333 보다 작거나 같은 정수 중
최대정수인 -5 를 반환한다. |
% (나머지 연산자) |
x 를 y 로 나눈 나머지를 반환한다.
13 % 3 은 1 을 반환한다. -25.5 % 2.25
는 1.5 를 반환한다. 나머지의 부호는 두 번째
피연산자의 부호를 따른다. 항상
x == (x//y)*y + (x%y) 의 관계식을 만족한다. |
<< (왼쪽 시프트
연산자) |
x << n 은 정수 x 의 이진수 표현에서 n
비트 수 만큼 왼쪽으로 이동을 시키고 뒤의 공간은
0 으로 채운다. n 은 음이 아닌
정수이다.(모든 숫자는 메모리상에서 0 또는
1 의 비트로 구성된 이진수로 표현된다).
2 << 2 는 8 을 반환한다. 2 는 이진수로
10 으로 표현되고, 이것을 왼쪽으로 2 비트
시프트 연산하면 이진수 1000 이 되어, 이것을
정수로 표현하면 8 이 된다. x << n 은
x * 2 ** n 하는 것과 같다. |
>> (오른쪽 시프트
연산자) |
x >> n 은 정수 x 의 이진수 표현에서
n 비트 수 만큼 오른쪽으로 이동을 시키고 앞의
공간은 음수이면 1 , 양수이면 0 비트로
채운다. 11 >> 1 은 5 를 반환한다. 11
은 이진수로 1011 로 표현되고, 이것을
오른쪽으로 1비트 시프트 연산하면 이진수 101 이
되고, 이것을 정수로 표현하면 5 가 된다.
x >> n 은 x // 2 ** n 과 같다. |
& (이진수 AND
연산자) |
이진수 AND 연산이란 숫자를 이진수로 표현했을 때,
같은 자리의 숫자가 동시에 1 일 때만
1 이고 그렇지 않으면 0 이 되는 것을
의미한다. 따라서 5 & 3 은 1 을 반환한다.
왜냐면 5 와 3 은 이진수로 각각 101 ,
011 이므로 끝자리만 같은 1 이고 나머지는
다른 숫자이므로 이진수 001 , 즉 십진수
1 이 된다. |
| (이진수 OR 연산자) | 이진수 OR 연산이란 숫자를 이진수로 표현했을 때,
같은 자리의 숫자가 적어도 하나가 1 이면
1 이고 둘 다 0 이면 0 이 되는 것을
의미한다. 5 | 3 은 7 을 반환한다.
왜냐면 5 와 3 은 이진수로 각각 101 ,
011 이므로 같은 자리에 1 이 적어도
하나씩 있으므로 이진수 111 이 되고 십진수로는
7 이 된다. |
^ (이진수 XOR
연산자) |
이진수 XOR 연산값을 반환한다. x ^ y 는 x ,
y 를 이진수로 표현했을 때 같은 자리의 수가 둘
다 0 또는 둘 다 1 이면 결과값은
0 이고 그렇지 않으면 1 이 된다. 따라서
5 ^ 3 은 6 을 반환한다. |
~ (이진수 반전
연산자) |
숫자 x 의 이진수 반전 연산값 -(x+1) 을
반환한다. ~5 는 -6 을 반환한다. 자세한
사항은 아래 2의 보수를 읽어
보기 바란다. |
< (작음) |
x < y 는 x가 y보다 작은지 여부를 반환한다.
모든 비교 연산자는 True (참) 또는 False
(거짓)을 반환한다. 각 반환값의 첫글자는 대문자라는
점에 유의하자. 5 < 3 는 False 를 반환한다.
3 < 5 는 True 를 반환한다. 다음과 같이
여러 숫자에 대해 한꺼번에 비교 연산을 수행할 수
있다. 3 < 5 < 7 은 True 를 반환한다. |
> (큼) |
x 가 y 보다 큰지 여부를 반환한다.
5 > 3 은 True 를 반환한다. 만약 두
피연산자가 모두 숫자라면, 같은 숫자형으로 변환된
후 크기를 비교한다. 피연산자가 숫자형이 아닐 경우,
항상 False 를 반환한다. |
<= (작거나 같음) |
x 가 y 보다 작거나 같은지 여부를 반환한다.
x = 3; y = 6; x <= y 는 True 를 반환한다. |
>= (크거나 같음) |
x 가 y 보다 크거나 같은지 여부를 반환한다.
x = 4; y = 3; x >= 3 는 True 를 반환한다. |
== (같음) |
두 객체가 같은지 여부를 반환한다.
x = 2; y = 2; x == y 는 True 를 반환한다.
x = 'str'; y = 'stR'; x == y 는 False 를
반환한다. x = 'str'; y = 'str'; x == y 는
True 를 반환한다. |
!= (같지 않음) |
두 객체가 같지 않은지 여부를 반환한다.
x = 2; y = 3; x != y 는 True 를 반환한다. |
not (논리 부정
연산자) |
x 가 True 라면, False 를 반환한다.
x 가 False 라면, True 를 반환한다.
x = True; not x 는 False 를 반환한다. |
and (논리곱
연산자) |
x and y 를 계산할 경우, x 가 False
이면 False 를 반환하며 True 이면
y 와의 and 연산값을 반환한다.
x = False; y = True; x and y 를 계산할 경우,
x 가 False 이므로 y 값에 관계없이
x and y 의 값은 False 임이 자명하므로,
x 의 값이 False 임이 확인되는 즉시
곧바로 결과값 False 가 반환되며 이때 y 의
값은 계산되지 않는다. 이것을 단축
계산(short-circuit evalulation)이라고 부른다. 더
일반적으로 x and y 연산을 할 때 x 가
False 에 해당되는 객체면 x 객체를
반환하고 그렇지 않으면 y 객체를 반환한다. |
or (논리합
연산자) |
x 가 True 이면 True 가 반환되며,
False 이면 y 와의 or 연산값을
반환한다. x = True; y = False; x or y 는
True 가 반환된다. 여기서도 위와 같이 단축
계산이 적용된다. |
참고:
직접하기
7
을3
으로 나눈 몫과 나머지를 구하시오.
수식 연산자 단축¶
변수에 숫자를 연산하여 다시 같은 변수에 넣는 것은 많이 사용된다.
a = 2
a = a * 3
이러한 연산을 단축하여 계산할 수 있도록 다음과 같이 사용할 수 있다.
a = 2
a *= 3
즉, 변수 연산자= 수식
와 같이 사용할 수 있다. 이것은
변수 = 변수 연산자 수식
의 연산을 수행하게 된다.
a = 2
b = 3
a /= b # a = a/b = 2/3 = 0.666666...
단축 연산을 할 때는 오른쪽 수식이 먼저 계산되고 그 계산된 값과 단축 연산을 한다.
In [23]:
x = 6
x /= 3 * 2
print('x = ', x)
x = 1.0
위에서 x = x / 3 * 2
와 같이 계산하는 것이 아니라, 오른쪽 수식을
먼저 계산하고 다음에 단축 연산 =/
을 한다. 즉
x = x / (3 * 2)
와 같이 계산한다.
연산자 우선순위¶
여러 연산자가 함께 있을 때 어떤 연산이 먼저 수행될 것인지를 순위를 정해 놓았다. 아래 표는 우선순위가 가장 높은 것부터 낮은 것 순서로 되있다. 순서가 명확하지 않을 때는 괄호를 사용하여 순서를 명확하게 하도록 한다.
연산자 | 설명 |
---|---|
(수식…), [수식…], {키: 값…}, {수식…} | 괄호 또는 튜플(tuple), 리스트(list), 사전(dictionary), 집합(set) 표시 |
x[인덱스], x[인덱스:인덱스], x(인수…), x.속성(attribute) | 원소 접근, 슬라이스, 함수 호출, 속성 참조 |
await x |
비동기(async) 함수식에서 사용 |
** |
거듭제곱 |
+x, -x, ~x |
양수, 음수, 논리 NOT 연산 |
*, @, /, //, % |
곱셈, 행렬 곱셈, 나눗셈, 정수 나눗셈, 나머지 연산 |
+, - |
덧셈, 뺄셈 |
<<, >> |
시프트 연산 |
& |
이진수 AND |
^ |
이진수 XOR |
| | 이진수 OR |
in, not in, is, is
not, <, <=, >, >=, !=
, == |
포함 관계, 항등, 비교 연산 |
not x |
논리 NOT |
and |
논리 AND |
or |
논리 OR |
if – else |
조건 수식 |
lambda |
람다 수식 |
- 괄호가 최우선 순위를 갖기 때문에
2 * (3-1)
은4
이고(1+1) ** (5-2)
은8
이다. - 다음으로 거듭제곱이 우선 순위를 갖기 때문에
2 ** 1+1
은4
가 아니고3
이다. 또한3 * 1 ** 3
은27
이 아니고3
이다. - 곱셈/나눗셈 같은 우선 순위를 가지며, 덧셈/뺄셈보다 우선 순위를
갖는다. 따라서
2 * 3-1
은4
가 아니라5
이고,5-2 * 2
은6
이 아니라1
이다. - 음수, 양수의 부호보다 거듭제곱 연산이 우선이기 때문에
-2 ** 2
는4
가 아니라-4
이다.
같은 연산 순위일 경우¶
같은 연산 순서를 가질 경우에는 일반적으로 왼쪽에서 오른쪽으로 순서대로
계산된다. 위의 표에서 같은 행에 있는 연산들은 연산 순위가 같다. 예를
들어 2 - 3 + 4
는 2 - 3 = -1
이 먼저 계산되고 -1 + 4 = 3
과 같이 계산된다. 다만 할당 연산자 =
은 오른쪽에서 왼쪽으로 계산이
된다. 예를 들면 a = b = 3
은 a = (b = 3)
과 같이 b
에
3
이 할당되고 a = b
가 계산된다.
문자열 연산¶
다음과 같이 문자열과 숫자는 수식 연산이 불가능하다.
>>> message = "msg" # message는 문자열
>>> message - 1 # 에러
>>> "Hello" / 123 # 에러
>>> message * "Hello" # 에러
>>> "15" + 2 # 에러
그렇지만 문자열과 문자열 사이에 덧셈 연산자 +
를 사용할 수 있다.
여기서 덧셈은 당연히 수식 더하기가 아니라 두 문자열을 결합하는 연산을
수행하게 된다. 예를 들면
In [24]:
fruit = "바나나"
baked_good = " 호두과자"
print(fruit + baked_good)
바나나 호두과자
문자열 * 양의 정수
형태로 곱셈 연산자를 사용할 수도 있다. 이것은
문자열
을 양의 정수
갯수만큼 반복해서 새로운 문자열을 반환한다.
In [25]:
'호두' * 3
Out[25]:
'호두호두호두'
사용자 입력¶
input()
함수를 이용하여 키보드로부터 입력을 받을 수 있다.
input()
함수는 받아들인 값을 모두 문자열로 반환하기 때문에 숫자로
변환하기 위해서는 int(), float()
와 같은 함수들을 이용하여 변환해야
한다.
name = input("이름을 입력하시오: ")
age = int(input("나이를 입력하시오: "))
print("반갑습니다.", name, "님.", name,"님의 나이는", age, "세 입니다.", sep='')
위 프로그램을 파이참에서 실행하면 다음과 같다.
- 편집창 위에서 마우스 오른쪽 클릭을 하여
Run 파일이름
을 클릭한다. - 파이참 아래 부분 실행창에
이름을 입력하시:
라는 문구가 나온다. 이 부분을 클릭한 후 이름을 입력하고 엔터를 치면 나이를 입력하시오:
라는 문구가 이어서 나온다. 다시 나이를 입력하면반갑습니다. ...
이라는 결과를 볼 수 있을 것이다.
직접 하기
- 직각 삼각형의 한 변의 길이를 입력받아 빗변의 길이를
출력하자.(
x
의 제곱근은x ** 0.5
을 이용하면 된다.)
연습¶
1 2
를 입력하고 엔터를 치고 결과에 대해서 이야기 하시오.- 프롬프트에서
apple
이라고 입력하고 엔터를 쳐보고 결과에 대해서 이야기 하시오. - 파이썬 프롬프트(Prompt)에서
2 + 3 * 4
를 입력하고 엔터를 쳐보고, 같은 식을 스크립트에 입력하고 실행시켜보고 다른 점을 이야기하시오. - 괄호를 이용하여
6 * 1 - 2
가-6
이 나오도록 하시오. - 파이썬 프롬프트에서
alice + 4
를 입력하고 엔터를 치면NameError: name 'alice' is not defined
라는 에러가 나온다.alice
변수를 만들어alice + 4
가10
이 되도록 하시오. - 사용자한테 이름과 나이를 입력하게 하여 그 사람의 나이가 99세가 되는 년도를 출력하는 프로그램을 작성하시오.
- 사용자로부터 3개의 숫자를 입력받아 합과 평균을 출력하는 코드를 작성하시오.
- 사용자로부터 원의 반지름을 입력받아 원의 면적을 계산하는 코드를 작성하시오.
- 지금 시각이 오후 2시이다. 51시간 후에 알람이 울리도록 맞췄다. 알람은 몇 시에 울리는가?
- 위의 문제를 사용자로부터 지금 시각과 몇 시간 후에 알람이 울리도록 할 것인가를 입력받아 알람이 울리는 시각을 계산하는 프로그램을 작성하시오.