변수
자료형의 값을 저장하는 공간, 변수
- 변수란?
- 파이썬에서 사용하는 변수는 객체를 가리키는 것이라고 할 수 있음
>>> num = 10
# '10' 데이터를 메모리 공간에 저장하고,
# 10이 저장된 "메모리 공간의 주소"를 'num'이라고 하는 메모리 공간에 저장
[ 변수: num ] → [ 값: 10 ]
⇖ 주소: 0x1000 ⇖ “주소: 0x1000”의 값
변수의 명명 규칙
1. 문자(A-z)와 숫자(0-9), _(underscore)를 사용할 수 있음
- Ex. data = 0, _al = 2, name = 'king'
2. 변수명은 대소문자가 구분됨
- Num과 num은 다른 변수임
3. 변수명은 의미 있는 단어로 사용하는 것이 좋음
- Ex.의미 있는 단어. age, student_name, student number
4. 변수명이 숫자로 시작하면 할 수 없음
- Ex. 1num
5. 변수명에는 공백이 포함될 수 없음
- Ex. student name
6. 예약어를 변수명으로 사용할 수 없음
- Ex. for, if, True 등
- 리스트의 복사
- b 변수에 a 변수를 대입하면 a가 가리키는 주소 값을 b도 같은 주소 값을 가진다.
>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
4303029896
>>> id(b)
4303029896
>>> a is b
True
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]
- 변수를 만드는 여러 가지 방법
>>> (a, b) = ‘python’, ‘life’
# 괄호 생략 가능
>>> a, b = ('python', 'life')
>>> a, b = 'python', 'life'
>>> [a, b] = [‘python’, ‘life’]
>>> a = b = ‘python’
# 데이터 부의 연산은 오른쪽에서 왼쪽으로 진행
>>> a = 3
>>> b = 5
>>> a, b = b, a <- a와 b의 값을 바꿈.
>>> a
5
>>> b
3
- input( ) 함수
- 파이썬에서는 콘솔 창에서 입력을 받기 위해 표준 입력 함수인 input() 함수 사용
-
- print( ) 함수를 이용한 데이터의 출력
- print( ) 함수 안에 있는 콤마(,)를 이용해 여러 값을 연결öH 화면에 출력 가능
- EXAMPLE.
- 'Hello' , 'Python' : 사이에 한 간 띄고 화면에 출력됨
- ⇒ ”Hello Python"print( ) 함수
- ※ 문자형 간에 + 기호를 이용해 문자열을 연결할 수 있음
서식 |
값의 예 |
설명 |
%d, %x, %o |
10, 100, 1234 |
정수( 10진수, 16진수, 8진수) |
%f |
0.5, 1.0, 3.14 |
실수(소수점이 붙은 수) |
%c |
“b”, “한” |
한 글자 |
%s |
"안녕”, “hello”, “a” |
두 글자 이상인 문자열 |
프로그래밍의 기초, 자료형
- 숫자형
- 문자형
- BOOL
자료형
- 프로그램에서 나타낼 수 있는 데이터의 종류
- 할당 받는 메모리 공간의 크기는 변수의 자료형(Data Type)에 의해 결정됨
- 변수에 저장될 자료의 형에 따라 구분
- 숫자형 : 정수(int), 실수(float)
- 문자형 : 문자열(str)
- 논리형 : 불린(boolean)
- 컬렉션형 : 리스트(list), 튜플(tuple), 집합(set), 딕셔너리(dictionary)
- None
- 동적 타이핑
- 변수의 메모리 공간을 생성하는 시점이 프로그램이 실행되는 시점에 생성되는 것을 의미
- Ex. 컴파일 언어의 경우, int num=10n.h 같이 실행 이전에 변수의 타입을 정의
- Ex. 파이썬의 경우, num=8과 같이 선언함
숫자형(number)
항목 |
파이썬 사용 예 |
정수 |
123, -345, 0 |
실수 |
123.45, -1234.5, 3.4e10 |
8진수 |
0o34, 0o25 |
16진수 |
0x2A, 0xFF |
- 정수형(integer)
- 정수를 뜻하는 자료형
- 8진수(octal)
- 숫자 0 + 알파벳 소문자 o 또는 대문자 O
- 16진수(hexadecimal)
- 숫자 0 + 알파벳 소문자 x
>>> a = 123 # 양의 정수 대입
>>> a = -178 # 음의 정수 대입
>>> a = 0 # 숫자 0 대입
>>> a = 0o177
>>> print(a)
127 # ← 1 *8^2 + 7 * 8^1 + 7 *8^0 = 127
>>> a = 0x8ff
>>> b = 0xABC
>>> print(b)
2758 # ← 10 *16^2 + 11 *16^1 + 12 *16^0 = 2748
>>> a = 1.2
>>> a = -3.45
>>> a = 4.24E10 <- 4.24 * 10^10
>>> b = 4.24e-10 <- 4.24 * 10^-10
문자열(string) 자료형
- 문자열(string)
- 문자, 단어 등으로 구성된 문자들의 집합, 시퀀스 라고도 함.
"Life is too short, You need Python"
"a"
"123"
- 문자열 생성
- 큰따옴표(“)
"Hello World"
- 작은따옴표(‘)
'Python is fun'
- 큰따옴표 3개(“””) # 개행 또는 Tab 모두 포함한 문자열 ~ ex. SQL 가독성 있게 작성 시, 사용
"""Life is too short, You need python"""
- 작은따옴표 3개(‘’’)
'''Life is too short, You need python'''
- 문자열 안에 작은따옴표나 큰따옴표를 포함
- 작은따옴표(‘)
>>> food ="Python's favorite food is per"
- 큰따옴표(“)
>>> say = '"Python is very easy." he says.'
- 역슬래시 사용하기
- 역슬래시(\) 뒤의 작은따옴표(‘)나 큰따옴표(“)는 문자열을 둘러싸는 기호의 의미가 아니라 문자 (‘), (“) 그 자체를 의미
>>> food = 'Pyhton\\'s favorite food is perl'
>>> say = "\\"Python is very easy.\\” he says."
- 개행이 있는 문자열을 변수에 대입
- 이스케이프 코드 ‘\n’ 삽입
- 작은 따옴표 3개(‘’’)
- 큰 따옴표 3개(“””)
- 문자열 연산하기
- 문자열 더해서 연결하기
>>> head = "Python"
>>> tail = " is fun"
>>> head + tail
'Python is fun'
- 문자열 곱하기
>>> a = "python"
>>> a * 2
'pythonpython'
- 문자열 길이 구하기
>>> a = "Life is too short"
>> len(a)
17
- 문자열 인덱싱과 슬라이싱
- 문자열 인덱싱(indexing)
- 0 index : 0~ (N-1)
- a[index]
- 문자열 안의 특정 값을 추출
- 마이너스(-) : 문자열 마지막 index 뒤부터 시작
- 문자열 슬라이싱(slicing)
- 각 요소 문자를 특정 위치에서부터 잘라 냄
- a[시작 index : 끝 index]
- 시작 번호부터 끝 번호까지의 문자를 뽑아 냄
- 끝 번호에 해당하는 것은 포함하지 않음 → 탈출 위치
문자열 포매팅
- 문자열 포매팅(formatting)
- 특정 문자열 형식으로 문자열 형식 정의 → 문자열의 특정 위치에 값을 삽입
- 숫자 바로 대입
- 문자열 바로 대입
- 숫자 값을 나타내는 변수로 대입
- 2개 이상의 값 넣기
# 1.EXAMPLE.%d.
>>> "I eat %d apples." % 3
'I eat 3 apples.'
# 2.EXAMPLE.%s.
>>> "I eat %s apples." % "five"
'I eat five apples.'
# 3.EXAMPLE.숫자값의 변수로 대입.
>>> number = 3
>>> "I eat %d apples." %number
'I eat 3 apples.'
# 4.EXAMPLE.2개 이상의 값 대입.
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'
- 문자열 포맷 코드
코드 |
설명 |
%s |
문자열(string) |
%c |
문자 1개(character) |
%d |
정수(integer) |
%f |
부동소수(floating-point) |
%o |
8진수 |
%x |
16진수 |
%% |
Literal %(문자 % 자체) |
# 숫자를 문자열 코드 포맷팅 가능
>>> "I have %s apples" % 3
'I have 3 apples'
>>> "rate is %s" % 3.234
'rate is 3.234'
- 포맷 코드와 숫자 함께 사용하기
- 정렬과 공백
- %s를 숫자와 함께 사용하면, 공백과 정렬 표현 가능
>>> "%10s" % "hi"
' hi' # 전체 길이 10에서, (앞에 공백 8개가 위치하므로) hi가 오른쪽 정렬됨.
>>> "%-10sjane" % "hi"
'hi jane' # 'jane' 앞에 길이 10에서, ('hi' 뒤와 'jane' 앞에 공백 8개 위치하므로) hi가 왼쪽 정렬됨.
- 소수점 표현하기
- %f를 숫자와 함께 사용하면, 소수점 뒤에 나올 숫자의 개수 조절 및 정렬 가능
>>> "%0.4f" % 3.141592
'3.1415'
>>> "%10.4f" % 3.141592
' 3.14159' # 전체 길이 10에서 "소수점과 뒤 4자리"를 제외한 5자리에서 오른쪽 정렬되어 앞에 공백 4개
- format 함수를 사용한 포매팅
>>> "I eat {0} apples".format(3)
'I eat 3 apples'
>>> "I eat {0} apples".format("five")
'I eat five apples'
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
>>> "I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
>>> "{0:<10}".format("hi")
'hi '
>>> "{0:>10}".format("hi")
' hi'
>>> "{0:^10}".format("hi")
' hi '
>>> "{0:=^10}".format("hi")
'====hi===='
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'
>>> "{0:10.4f}".format(y)
' 3.4213'
>>> "{{ and }}".format()
'{ and }'
f 문자열 포매팅
- 파이썬 3.6 버전부터 f 문자열 포매팅 기능 제공
- 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능 사용 가능
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'
>>> age = 30
>>> f'나는 내년이면 {age + 1}살이 된다.'
'나는 내년이면 31살이 된다.'
>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
>>> f'{"hi":<10}' # 왼쪽 정렬
'hi '
>>> f'{"hi":>10}' # 오른쪽 정렬
' hi'
>>> f'{"hi":^10}' # 가운데 정렬
' hi '
>>> f'{{ and }}'
'{ and }'
>>> f'{"hi":=^10}' # 가운데 정렬하고 '='로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}' # 왼쪽 정렬하고 '!'로 공백 채우기
'hi!!!!!!!!'
>>> y = 3.42134234
>>> f'{y:0.4f}' # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}' # 소수점 4자리까지 표현하고 총 자릿수를 '10'으로 맞춤.
' 3.4213'
문자열 관련 함수들
- 문자열 자료형이 가진 내장 함수
>>> a = "hobby"
>>> a.count('b')
2
>>> a = ","
>>> a.join('abcd')
'a,b,c,d'
- 위치 알려 주기.(1).: find
- 찾는 문자열이 처음 나온 위치 반환
- 없으면 -1 반환
>>> a = "Python is the best choice"
>>> a.find('b') # 문자열에서 b가 처음 나온 위치
14
>>> a.find('k')
-1
- 위치 알려 주기.(2).: index
- find와 마찬가지로, 찾는 문자열이 처음 나온 위치 반환
>>> a = "Python is the best choice"
>>> a.index('b')
14
>>> a.index('k') # k 가 없으므로 오류 발생
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> a = "hi"
>>> a.upper()
'HI'
>>> a = "HI"
>>> a.lower()
'hi'
>>> a = " hi "
>>> a.lstrip()
'hi '
>>> a = " hi "
>>> a.rstrip()
' hi'
>>> a = " hi "
>>> a.strip()
'hi'
- 문자열 나누기: split
- 공백 또는 특정 문자열을 구분자로 해서 문자열 분리
- 분리된 문자열은 리스트로 반환
>>> a = "Life is too short"
>>> a.split() # 공백을 기준으로 문자열 나눔.
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':') # : 을 기준으로 문자열 나눔.
['a', 'b', 'c', 'd']
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
불 자료형
- 참(True)과 거짓(False)을 나타내는 자료형
>>> a = True
>>> b = False
# type( ) 함수를 사용하여 자료형 확인
>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>
>>> 1 == 1
True
>>> 2 > 1
True
>>> 2 < 1
False
자료형의 참과 거짓
값 |
참 또는 거짓 |
"python" |
참 |
"" |
거짓 |
[1, 2, 3] |
참 |
[] |
거짓 |
(1, 2, 3) |
참 |
() |
거짓 |
{'a': 1} |
참 |
{} |
거짓 |
1 |
참 |
0 |
거짓 |
None |
거짓 |
>>> if []: # 만약 [ ]가 참이면
... print("참") # '참' 문자열 출력
... else: # 만약 [ ]가 거짓이면
... printt("거짓") # '거짓' 문자열 출력
...
거짓
불 연산
연산자
산술 연산자
연산기호 |
설명 |
사용 예(x=10, y=20, z=3) |
+ |
더하기 |
x + y → 30 |
- |
빼기 |
x - y → -10 |
* |
곱하기 |
x * y → 200 |
/ |
나누기 |
y / x → 2.0 |
% |
나머지 |
y % x → 0 |
** |
제곱 |
x ** z → 1000 |
// |
몫 |
x // z → 3 |
관계 연산자
연산기호 |
설명 |
사용 예(x=10, y=20) |
== |
같이 같다 |
x == y → False |
!= |
같이 같지 않다 |
x != y → True |
> |
왼쪽 값이 오른쪽 값보다 크다 |
x > y → False |
< |
왼쪽 값이 오른쪽 값보다 작다 |
x < y → True |
>= |
왼쪽 값이 오른쪽 값보다 크거나 동일하다 |
x >= y → False |
<= |
왼쪽 값이 오른쪽 값보다 작거나 동일하다 |
x <= y → True |
논리 연산자
연산기호 |
설명 |
사용 예(x = True, y = False) |
and |
논리 AND 연산, 둘 다 참일 때만 참 |
x and y = False |
or |
논리 OR 연산, 둘 중 하나만 참 이어도 참 |
x or y = True |
not |
논리 NOT 연산, 논리 상태를 반전 |
not (x and y) = True |
a |
b |
a and b |
a or b |
true |
true |
true |
true |
true |
false |
false |
true |
false |
true |
false |
true |
false |
false |
false |
false |
대입 연산자
연산기호 |
설명 |
사용 예(x=10, y=20) |
= |
왼쪽 변수에 오른쪽 값을 할당 |
z = x + y → z = x + y |
+= |
왼쪽 변수에 오른쪽 값을 더하고 결과를 왼쪽변수에 할당 |
z += x → z = z + x |
-= |
왼쪽 변수에서 오른쪽 값을 빼고 결과를 왼쪽변수에 할당 |
z -= x → z = z - x |
*= |
왼쪽 변수에 오른쪽 값을 곱하고 결과를 왼쪽변수에 할당 |
z *= x → z = z * x |
/= |
왼쪽 변수에서 오른쪽 값을 나누고 결과를 왼쪽변수에 할당 |
z /= x → z = z / x |
%= |
왼쪽 변수에서 오른쪽 값을 나눈 나머지의 결과를 왼쪽변수에 할당 |
z %= x → z = z % x |
**= |
왼쪽 변수에 오른쪽 값만큼 제곱을 하고 결과를 왼쪽변수에 할당 |
z **= x → z = z ** x |
//= |
왼쪽 변수에서 오른쪽 값을 나눈 몫의 결과를 왼쪽변수에 할당 |
z //= x → z = z // x |
멤버 연산자
- x = 10. y = 20, list = [10, 20, 30, 40, 50]
연산기호 |
설명 |
사용 예 |
in |
list 내에 포함되어 있으면 참 |
(x in list) = True |
not in |
list 내에 포함되어 있지 않으면 참 |
(y not in list) = False |
식별 연산자
- 두 개체의 “메모리 위치”를 비교
- x = 10, y = 10
연산기호 |
설명 |
사용 예 |
is |
개체메모리 위치나 값이 같다면 참 |
(x is y) = True |
is not |
개체메모리 위치나 값이 같지 않다면 참 |
(x is not y) = False |
실습
- 과목별 점수의 총합과 평균 및 총점과 평균 출력
- 국어, 영어, 수학 점수의 총합과 평균을 구하고 각 과목의 점수와 총점, 평균을 출력
더보기
Solution
kor_score1 = int(input('국어 점수 입력: '))
eng_score1 = 100
math_score1 = 60
sum = kor_score1+eng_score1+math_score1
avg = sum/3
print('총점: ',sum)
print('평균: ',avg)
- 성별이 남성이고 18세 이상의 성인 여부를 판단하는 조건식
- 성별이 남성이고 18세 이상의 성인 여부를 판단하는 조건식
더보기
Solution
gender = 'male'
age = 15
check = gender=='male' and age>=18
print('check: ',check)