파이썬 변수와 출력함수
변수란?
파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금껏 보아 온 자료형의 데이터(값)와 같은 것을 의미하는 말이다.
a = [1, 2, 3]
만약 위 코드처럼 a = [1, 2, 3]이라고 하면 [1, 2, 3] 값을 가지는 리스트 데이터(객체)가 자동으로 메모리에 생성되고 변수 a는 [1, 2, 3] 리스트가 저장된 메모리의 주소를 가리키게 된다.
변수는 어떻게 만들까?
변수를 만들 때에는 = 기호를 사용하여야 한다.
ex)
a = 1
b = "seungil"
c = [1,2,3]
이처럼 다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형의 타입을 직접 지정해야 한다. 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형의 타입을 지정하기 때문에 더 편리하다.
출력함수
파이썬으로 모니터에 결과값을 출력하기 위해 print()함수를 사용해야 한다.
print함수로 출력할 문장(문자열)은 ‘ ’ 또는 “ ” 로 감싸야 한다.
문자열 속에 ' 기호가 있는 경우에는 “ ”로
“ 기호가 있는 경우에는 ‘ ’를 사용하면 편리하게 출력할 수 있다.
콤마(,)로 문자열을 나열할 경우 공백(기본값)이 자동으로 추가 된다.
더하기(+) 기호로 문자열을 공백없이 연결할 수 있다.
입력값
print('Hello', end=' ')
print('Python')
출력값
Hello Python
end 인자를 사용하면 print함수 마지막 효과를 변경할 수 있다.
입력값
print('My mother\'s house')
print('\', \", \\, \a, \t, \n')
출력값
My mother's house
이스케이프 문자(Escape character)는 \문자를 사용하여 출력한다.
(\n 공백, \t 탭키, \\ \, \‘, \“ )
연산자와 출력함수
산술 연산자
산술연산자에는 사칙연산자 +, -, *, / 와 제곱을 나타내는 **, 나머지를 산출하는 % , 그리고 나누기에 소숫점 이하를 버리는 // 연산자등이 있다.
a 의 값은 10, b는 20 으로 둔다면
|
Operator
|
Example
|
|
+ 덧하기
|
a + b = 30
|
|
- 빼기
|
a – b = -10
|
|
* 곱하기
|
a * b = 200
|
|
/ 나누기
|
b / a = 2
|
|
** 제곱
|
a = 3; b = 4; print(a ** b) 81
|
|
// 정수 몫
|
9//2 = 4 and 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0
|
|
% 나머지
|
b % a = 0
|
비교 연산자
a 의 값은 10, b는 20 으로 둔다면
|
Operator
|
Example
|
|
==
|
(a == b) is not true.
|
|
!=
|
(a != b) is true.
|
|
<>
|
(a <> b) is true. This is similar to != operator.
|
|
>
|
(a > b) is not true.
|
|
<
|
(a < b) is true.
|
|
>=
|
(a >= b) is not true.
|
|
<=
|
(a <= b) is true.
|
논리 연산자
|
Operator
|
Example
|
|
and Logical AND
|
(a and b) is true.
|
|
or Logical OR
|
(a or b) is true.
|
|
not Logical NOT
|
Not(a and b) is false.
|
입력함수
input 함수는 사용자로부터 입력을 받는 함수 이다.
해당 함수가 호출되면 명령 프롬프트로부터 사용자의 입력을 받을 수 있다.
input() 함수의 반환으로 사용자가 입력한 것을 "문자열" 타입으로 반환하게 된다.
우리는 이 함수의 반환 특정 변수에 받아서 사용자의 입력을 처리하면 된다.
input() 함수 정리.
- 사용자의 입력을 받는다.
- 문자열로 취급한다.
- 사용자의 입력을 반환.
- 입력은 엔터가 입력될 때 엔터 전까지를 모두 받는다.
ex)
입력
print("이름 입력하세요.")
x = input()
print("반가워요. " + x)
출력
'이름'반가워요
문자열
문자열
문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자열이다.
ex)
"Choi seungil"
"s"
"123"
위 문자열 예문을 보면 모두 큰따옴표로 둘러싸여 있다. "123은 숫자인데 왜 문자열이지?"라는 의문이 드는 사람도 있을 것이다. 하지만 따옴표로 둘러싸여 있으면 모두 문자열로 인식하게 된다
.
그렇다면 문자열 안에 따옴표를 넣고 싶을 때는 어떻게 해야 할까?
문자열을 만들어 주는 주인공은 작은따옴표와 큰따옴표이다. 그런데 문자열 안에도 작은따옴표와 큰따옴표가 들어 있어야 할 경우가 있다.
"my name is seungil." he says.
를 출력하고 싶다면
a = '"my name is seungil." he says.'
로 묶어주면 된다. 이렇게 문자열 안에도 따옴표를 넣을수 있다.
문자열 인덱싱,슬라이싱
문자열에 인덱싱, 슬라이싱은 주어진 문자열에서 자신이 원하는 부분만 출력 할 수 있도록 하는것이다.
문자열 인덱싱은 무엇을 가르킨다는 의미로 지정된 문자열에서 원하는 부분을 가르켜 출력하는 것입니다.
ex)
sunrin = ‘Hello world’
위 소스 코드에서 변수 sunrin에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같습니다.
| H | e | l | l | o | w | o | r | l | d | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
string = ‘Hello world’
len(string)
이 코드에 작성되면 0~11까지 모두 11글자 이므로
11
이 출력되게 됩니다.
문자열 슬라이싱은 문자열에서 단순히 한 문자만을 뽑아내는 것이 원하는 단어 부분을 지정해 뽑아내는 것입니다.
ex)
a = 'Hello world'
b = a[0] + a[1] + a[2] + a[3] + a[4]
print(b)
를 입력하면 a에 0부터 4번째 숫자인
'Hello' 가 출력되게 됩니다
문자열 연산
파이썬에서 문자열과 문자열을 연결할 때는 문자열을 더하면 된다.
ex)
a = "abc"
b = "def"
print(a+b)
출력 : abcdef
문자열 * n을 하면 해당 문자열을 n만큼 반복해서 이어진 문자열이 새로 생성이 된다.
ex)
a = "abc"
b = a*2
print(b)
출력 : abcabc
리스트
리스트란?
- 순서가 있는 수정가능한 객체의 집합이다.
- 수정, 삭제, 추가가 가능하다.
- list 는 [] 대괄호로 작성되어지며, 내부 원소는 ,로 구분된다.
리스트 만들기
리스트를 사용하면 1, 3, 5, 7, 9 숫자 모음을 다음과 같이 간단하게 표현할 수 있다.
ex)
number = [1,3,5,7,9]
문자 또한 생성이 가능하다
ex )
name = ['seungil]
리스트 인덱싱
리스트는 파이썬의 시퀀스 자료형 이기 때문에 인덱스(쉽게말해 자리 번호표)를 가지고 있다.
ex)
리스트 슬라이싱
리스트 슬라이싱은 리스트의 요소들이 있다면 그중 원하는 부분만 잘라내서 가져오는 것이다.
ex)
number = [1,2,3,4,5,6,7,8,9]
print(number[1:3]) #1이상~ 3미만 출력
printf(number[3:]) #3이상 출력
printf(number[:3]) #3미만 출력
리스트 삭제
리스트에 특정 값을 지정해 삭제해주는 것이다
ex)
number = [1,2,3,4,5,6,7,8,9]
print(number)
del(number[2]) #리스트 두번쨰 요소값이 삭제
print(number) 출력시 2번째 요소인 3을 제외하고 출력된다.
리스트 요소 추가
딕셔너리,튜플,집합
튜플
튜플의 특성
- 순서가 있다.
- 중복이 가능하다.
- 수정과 삭제가 되지 않는다.
튜플 선언
ex)
a = (1,)
a = 1, 2, 3
b = 5,
집합
집합의 특성
- 순서가 없다.
- 중복이 불가능하다.
- 수정과 삭제가 가능하다.
집합 선언
ex)
a = set([1, 2, 3, 4])
b = {'foo', 'bar', baz'}
딕셔너리
- 순서가 없다.
- 키중복이 불가능하다.
- 수정과 삭제가 가능하다.
ex)
a = {'name': 'kim', 'phone': '01011112222', 'birth': '211111'}
b = {0: 'Hello Python'}
c = {'arr': [1, 2, 3]}
d = {
'name': 'nickname',
'grade': 'a'
}
e = dict([
('name', 'nickname'),
('grade', 'a')
])
f = dict(
name='nickname',
grade='a'
)
이 세가지를 요약하면 아래와 같다.
| 변경전 | 변경후 | 함수 | 예시 |
| 튜플 | 리스트 | list( ) | >>> t=(1,2,3) >>> list(t) [1, 2, 3] |
| 딕셔너리 | >>> d={'a':1,'b':2} >>> list(d) ['a', 'b'] |
||
| 집합 | >>> s={1,2,3} >>> list(s) [1, 2, 3] |
||
| 리스트 | 튜플 | tuple( ) | >>> L=[1,2,3] >>> tuple(L) (1, 2, 3) |
| 딕셔너리 | >>> d={'a':1,'b':2} >>> tuple(d) ('a', 'b') |
||
| 집합 | >>> s={1,2,3} >>> tuple(s) (1, 2, 3) |
||
| 리스트 | 집합 | set( ) | >>> L=[1,2,3] >>> set(L) {1, 2, 3} |
| 튜플 | >>> t=(1,2,3) >>> set(t) {1, 2, 3} |
||
| 딕셔너리 | >>> d={'a':1,'b':2} >>> set(d) {'b', 'a'} |
||
| 리스트 | 딕셔너리 | dict( ) | >>> L=[['a',1],['b',2]] >>> dict(L) {'a': 1, 'b': 2} |
| 튜플 | >>> t=(('a',1),('b',2)) >>> dict(t) {'a': 1, 'b': 2} |
||
| 집합 | >>> s={('a',1),('b',2)} >>> dict(s) {'a': 1, 'b': 2} |
반복문
while 문
while 반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어간다.
형식 )
초기식
while 조건식:
반복할 코드
변화식
예시 )
i = 0 # 초기식
while i < 100: # while 조건식
print('Hello, world!') # 반복할 코드
i += 1 # 변화식
다음은 while 문의 실행과정이다. 먼저 초기식부터 시작하여 조건식을 판별해, 조건이 만족할 때 까지 Hello, world! 를 출력하게 되는 것이다. 이때 조건식이 참(True)이면 반복할 코드와 변화식을 함께 수행한다. 그리고 다시 조건식을 판별하여 참(True)이면 코드를 계속 반복하고, 거짓(False)이면 반복문을 끝낸 뒤 다음 코드를 실행한다.
while문의 동작과정

for문
for 문은 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.
형식 )
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
예시 )
add = 0
for i in range(1, 11): ...
add = add + i
print(add)
55 출력
다음은 for문의 실행과정이다. range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 따라서 위 예에서 i 변수에 숫자가 1부터 10까지 하나씩 차례로 대입되면서 add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.
for문의 동작과정

조건문
조건문은 특정 조건일 때 코드를 실행하는 문법이다. 프로그램을 만들다 보면 여러 가지 상황을 처리해야 하는 경우가 생긴다. 이때 조건문은 다양한 상황에 대처할 때 사용한다.
형식
if 조건문은 if에 조건식을 지정하고 :을 붙이며 다음 줄에 실행할 코드가 옵니다. 이때 실행할 코드는 반드시 들여쓰기를 해야 한다.
if 조건식:
코드
ex))
>>> x = 10
>>> if x == 10:
... print('10입니다.')
...
10입니다.
또 if 다음 줄에서 들여쓰기를 하지 않으면 들여쓰기 에러가 발생한다다. 이 항상 이 부분을 주의해야한다.
if 문 동작과정

if 문 주의점
if 조건문을 사용할 때 주의할 점이 있는데 파이썬에서는 =을 할당으로 사용하고 있으므로 값을 비교할 때는 =을 두 개 붙여서 ==로 사용해야 한다. 자주 틀리는 부분이니 if 안에서 ==을 사용했는지 반드시 확인해야한다. 다음과 같이 if에 =을 사용하면 문법 에러가 발생한다.
>>> if x = 10:
File "<stdin>", line 1
if x = 10:
^
SyntaxError: invalid syntax
문법 에러가 발생하면 콘솔에서는 잘못된 코드 아래에 ^가 표시되고, IDLE에서는 빨간색으로 표시되므로 자신이 실수한 부분을 쉽게 찾을 수 있다
함수
입력값에 따라 결과가 다를수는 있지만 로직 자체는 같은 경우에 하나의 포장지 안에 넣어서 계속 재사용할 수 있게 만어 놓은것을 함수라 한다.
그렇기 때문에 하나의 로직을 비효율적으로 복붙하여 계속 쓰지 않고, 함수로 묶어서 관리하게 되면 좀더 편리하게 사용할 수 있다. 그렇기 때문에 함수를 사용하는 것 이다.
형식
def 함수이름(입력변수이름):
출력변수를 만드는 명령
return 출력변수이름
이처럼 파이썬에는 def 키워드와 return 키워드를 사용하여 다음과 같이 함수를 만들 수 있다. 파이썬에는 def 키워드와 return 키워드를 사용하여 다음과 같이 함수를 만들 수 있다
지역 변수
함수에 넣은 입력 변수나 함수 안에서 만들어진 변수는 함수 바깥에서는 사용할 수 없다. 혹시 이름이 같은 변수가 있다고 하더라도 별개의 변수가 된다.
따라서 함수 안에서 만들어지고 사용되는 함수를 지역 변수라고 한다.
def f(x):
y = 10 * x
print("y = ", y)
return y
이처럼 지역변수y를 사용 할 수있다.
전역 변수
지역 변수와 반대로 함수 바깥에서 만들어진 변수는 함수 안에서 사용할 수 있다. 이러한 변수를 전역 변수라고 한다.
z = 3
def f2(x):
y = z * x
print("y =", y)
print("z =", z)
return y
이처럼 함수밖에 있는 z를 함수 안에서 사용하는것이다.
함수의 호출 원리

파일 입출력
파이썬에서는 표준 입출력 함수인 input()과 print() 함수를 사용하여 프로그램과 사용자 사이의 입출력 작업을 수행할 수 있다. 그리고 프로그램과 파일 사이의 입출력 즉, 파일에 저장된 내용을 읽고 쓰는 동작은 파일 객체를 사용하여 수행할 수 있다.
파일 열고 닫기
파일의 내용을 읽고 쓰기 위해서는 우선 파일을 열어야만 한다.
파이썬에서는 내장 함수인 open() 함수를 사용하여 파일을 열 수 있다.
파일 입출력 작업이 모두 끝나면 파일 객체의 close() 함수를 사용하여 해당 파일 객체를 닫아줘야 합니다.
ex))
fp = open('test.txt', 'w')
...
fp.close()
위의 예제는 "test.txt"라는 파일을 쓰기 전용으로 열고, 이에 해당하는 파일 객체를 변수 fp에 저장하고 있습니다.
이렇게 저장된 파일 객체를 가지고 원하는 작업을 모두 수행한 다음에는 close() 함수를 통해 파일 객체를 닫아주고 있습니다.
클래스
클래스는 자료형을 위한 일종의 템플릿이라고 생각하면 된다. 클래스 안에는 다양한 유형의 정보가 담겨 있고, 우리가 자료형과 어떻게 상호작용할 것인지 적혀 있다.
클래스는 그냥 이렇게 class 키워드를 사용해서 정의하면 된다.
class TestClass:
pass
클래스 변수
클래스를 정의할 때 그 안에서 변수를 정의하면 모든 인스턴스에서 동일한 데이터를 사용할 수 있다. 이를 클래스 변수라고 부르는데, 이렇게 정의된 클래스 변수는 object.variable 구문을 사용하여 액세스 할 수 있다.
ex ))
예를 들어 Musician이라는 클래스 안에 title이라는 변수를 정의했다고 해보자.
그러면 각각 다른 인스턴스를 호출하더라도 각 인스턴스 안에 있는 title이라는 변수는 언제나 똑같다.
모듈
모듈이란 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있도록 만든 파이썬 파일이라고도 할 수 있다. 우리는 파이썬으로 프로그래밍을 할 때 매우 많은 모듈을 사용한다. 다른 사람들이 이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어 사용할 수도 있다. 여기에서는 모듈을 어떻게 만들고 사용할 수 있는지 알아본다.
모듈 생성하기
base = 2 # 변수
def square(n): # 함수
return base ** n
이렇게 모듈을 만들었을 때 모듈 이름은 square2입니다. 즉, 스크립트 파일에서 확장자 .py를 제외하면 모듈 이름이 된다.
모듈 사용하기
import square2 # import로 square2 모듈을 가져옴
print(square2.base) # 모듈.변수 형식으로 모듈의 변수 사용
print(square2.square(10)) # 모듈.함수() 형식으로 모듈의 함수 사용
이제 square2 모듈을 사용해보겠습니다. 다음 내용을 프로젝트 폴더(C:\project) 안에 main.py 파일로 저장한 뒤 실행해보자. 이때 square2.py 파일과 main.py 파일은 반드시 같은 폴더에 있어야 한다.
실행 결과
2
1024
실행을 해보면 square2 모듈에 만들었던 변수 base의 값이 출력되고, square 함수도 호출된다. 이처럼 모듈을 사용할 때는 import로 모듈을 가져온 뒤 모듈.변수, 모듈.함수() 형식으로 사용한다.
예외 처리
예외(exception)란 코드를 실행하는 중에 발생한 에러를 뜻합니다. 다음과 같이 10을 어떤 값으로 나누는 함수 ten_div가 있을 때 인수에 따라 정상으로 동작하기도 하고 에러가 나가기도 한다.
>>> def ten_div(x):
... return 10 / x
...
이 함수에 2 를 넣으면 5가 나오게 된다 . 하지만 0을 넣으면 실행하는 중에 에러가 발생하게 되는데 이런 상황을 예외라고 하는데 여기서는 어떤 숫자를 0으로 나누어서 ZeroDivisionError 예외가 발생한다
>>> ten_div(0)
Traceback (most recent call last):
File "<pyshell#121>", line 1, in <module>
ten_div(0)
File "<pyshell#119>", line 2, in ten_div
return 10 / x
ZeroDivisionError: division by zero
ZeroDivisionError뿐만 아니라 지금까지 만난 AttributeError, NameError, TypeError 등 다양한 에러들도 모두 예외이다.
try except
예외 처리를 하려면 다음과 같이 try에 실행할 코드를 넣고 except에 예외가 발생했을 때 처리하는 코드를 넣습니다.
try:
실행할 코드
except:
예외가 발생했을 때 처리하는 코드
이제 숫자를 0으로 나누었을 때 발생하는 예외를 처리해보겠습니다.
try_except.py
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 / x
print(y)
except: # 예외가 발생했을 때 실행됨
print('예외가 발생했습니다.')
소스 코드를 실행한 뒤 0을 입력하고 엔터 키를 누르세요.
실행 결과
나눌 숫자를 입력하세요: 0 (입력)
예외가 발생했습니다.
숫자를 0으로 나누면 ZeroDivisionError 예외가 발생합니다. 여기서는 except에서 예외 처리를 하도록 만들었으므로 '예외가 발생했습니다.'가 출력된다.
특히 예외가 발생하면 해당 줄에서 코드 실행을 중단하고 바로 except로 가서 코드를 실행합니다. 즉, try의 y = 10 / x를 비롯하여 그 아래줄에 있는 print(y)도 실행되지 않는다.