연산자
1. 산술연산자
+, -, *, /, //, %, **
print(10 / 3)
print(10 // 3)
print(10 % 3) #홀수 짝수 구분할때 많이 사용됨.
print(3 ** 4)
부동 소수점 문제
- 10진수를 2진수를 변환해서 소수점 연산을 할때 발생 되는 문제입니다.
- 정확도(16자리 ~ 17자리까지 정확)
0.1 + 0.2
> 0.30000000000000004
행렬방법 1: 반올림
round(0.1 + 0.2, 1) #반올림 함수
> 0.3
행렬방법 2: 고정 소수점으로 연산
from decimal import Decimal
#Decimal('0.1') + Decimal('0.2') # Decimal('0.3')
float(Decimal('0.1') + Decimal('0.2'))
> 0.3
2. 비교연산자 (<, >)
==, !=, >, <, <=, >=
Quiz) 산술연과 비교연산을 사용해서 data값이 홀수있때 True 출력, 짝수있대 False를 출력
data = 3
p = data % 2
print(p == 1)
> true
3. 할당연산자
=, +=, -=, *=, /=, //=, %=, **=
4. 비트연산자
&, |, ^, ~, <<, >>
5. 논리연산자 (and, or)
# not : True를 False로 바꾸고 False를 True로 바꿉니다.
not(False or True)
not(False or False)
> False / True
6. 멤버연산자 ( in )
data = [1, 2, 3, 4]
print(1 in data) => True
print(5 in data) => False
print(1 not in data) => False
# dictionary
data = {1:"one", 2:"two", 3:"three"}
print(3 in data) => True
print("one" in data) => False
print("2" in data) => False
print("two" in data.values()) => True
7. 식별연산자 (메모리 주소값을 비교하는)
is, is not
기본적으로 주소값을 비교한다
# 숫자, 문자, Boolean 데이터 타입
data1 = 1
data2 = data1
print(data1 is data2)
=> True
id(data1), id(data2) #id는 주소값 알려줌
=> (1584378080, 1584378080)
data1 = 1
data2 = 1
print(data1 is data2)
=> True
id(data1), id(data2)
#메모리를 아끼기 위해 이미 1이 있으면 그 1을 사용하게 된다. 그러나 그1이라는 데이터의 타입에(컬랙션타입) 따라 다시 사용안하고 새로 만들수도있다.
(1584378080, 1584378080)
# 컬랙션 데이터 타입 식별하기 <-중요!!
data1 = [1,2,3]
data2 = data1
print(data1 is data2)
=> True
id(data1), id(data2) # 같은주소
=> (2839897687304, 2839897687304)
data3 = [1,2,3]
id(data1), id(data3) #다른 주소
> (2839897687304, 2839897701000)
data4 = data1.copy()
id(data1), id(data4) # 다른 주소
> (2839897687304, 2839896732936)
input, print, string format 함수
- input
- string format
1. input
- 코드를 실행할때 데이터를 입력받을수 있도록 해주는 함수
- 데이터를 받을때 무조건 문자열 데이터 타입 으로 데이터를 받습니다.
value = input("insert string: ")
print(type(value), value)
> insert string: ㅁㄴㅇ
<class 'str'> ㅁㄴㅇ
#숫자 입력받기 : int로 형변환
value = int(input("insert num: "))
print(type(value), value)
> insert 숫자: 123
<class 'int'> 123
#문자 여러개 받기 : .split(" ") 사용하기
value = input("insert list: ")
value = value.split(" ")
print(type(value), value)
> insert list: a s 3
<class 'list'> ['a', 's', '3']
2. print
sep=”-“
print("가나다", "라마사", sep="-")
end=”\t”
- 결과값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서이다.
print("abc", end="\t")
print("def")
=> abc def
3. string format
- 2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과 같은 인덱스 항목들이 format 함수의 입력값들로 순서에 맞게 바뀐다. 즉, {0}은 format 함수의 첫 번째 입력값으로 바뀌고 {1}은 format 함수의 두 번째 입력값으로 바뀐다.
a, b = 1234, "campus"
print("number: {}, string: {}".format(a,b))
> number: 1234, string: campus
print("number: {0}, string: {1}".format(a,b))
> number: 1234, string: campus
print("number: {0}, string: {0}".format(a,b))
> number: 1234, string: 1234
print("unm: {0}, number: {num}, string: {string}".format(10, num = a,string = b))
>
오른쪽 정렬
:<10
표현식을 사용하면 “hi”문자가 오른쪽 정렬되고 총 10자리로 맞출수 있다.
"{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!!!!!!!!'
조건문
value = int(input("insert string: "))
if value % 15 == 0:
print("fizzbuzz")
elif value % 3 == 0:
print("fizz")
elif value % 5 == 0:
print("buzz")
else:
print(value)
삼항연산
# 삼항연산 문법 :
A if (조건) else B //<조건이 True면 A 리턴, False면 B리턴>
value = int(input("insert string: "))
"even" if value%2 ==0 else "odd"
반복문
1. while
- break 구문
#break 구문, 반복문이 종료된다.
a = 3
while a:
print(a)
if a == 2:
break
a -= 1
print("done", a)
---
> 3
2
done 2
- continue 구문
#continue, 바로 조건을 확인 한다.
a = [1,2,3,4, 'q']
idx = 0
while True:
data = a[idx]
idx += 1
if data == 'q':
break
elif data %2 == 0:
continue #아래의 print까지 가지않고 다시 while문을 돈다, 2가 오면 다시 위로!
print(data)
---
> 1
3
2. for
ls = [1,2,3,4, [5,6]]
for i in ls:
print(i, end=" ")
dic = {"A":1, "B":2}
for i in dic:
print(i)
#.items() 꼭 기억하자!
dic = {"A":1, "B":2}
for i in dic.items():
print(i)
('A', 1)
('B', 2)
range()
#range
- range(마지막 숫자)
- range(시작숫자, 마지막숫자)
- range(시작숫자, 마지막숫자, strid)
list(range(0,20,2))
> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
enumerate()
- for문과 함께 사용하면 자료형의 index 와 value 를 쉽게 알 수 있다.
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
---
0 body
1 foo
2 bar
enumerate(subjects)
---
> ((0, 'math'), (1, 'english'), (2, 'science'))
#과목이름과 순서를 출력 - for문만 사용
subjects = ["math", "english","science"]
number = 1
for value in subjects:
print(number, value)
number += 1
---
1 math
2 english
3 science
#enumerate를 for문과 함께 사용
subjects = ["math", "english","science"]
for i, value in enumerate(subjects)
print(i, value)
---
0 math
1 english
2 science
zip()
- n개의 리스트를 같은 index끼리 묶어 주는 함수
subjects = ["math", "english","science"]
score = [80, 90, 100]
list(zip(subjects, score))
dict(zip(subjects, score))
---
> [('math', 80), ('english', 90), ('science', 100)]
> {('math', 80), ('english', 90), ('science', 100)}
subjects = ["math", "english", "science"]
points = [80, 90, 100]
grades = ["B", "A", "A"]
list(zip(subjects, points, grades))
---
> [('math', 80, 'B'), ('english', 90, 'A'), ('science', 100, 'A')]
list(zip("abc", "def"))
---
> [('a', 'd'), ('b', 'e'), ('c', 'f')]
3. list comprehention
- 반복문의 결과를 바로 리스트로 만들어 주는 문법이다.
- 리스트 데이터를 만들어 낼때 for문 보다 속도가 빠르다.
ls = [<value> for <value> in <list>]
ls = [<value> for <value> in <list> if <condition>]
list_comprehention = [num for num in range(1,4)]
---
> [1 ,2, 3]
조건문과 함께 사용하기
# <value> for <value> in <list> if <조건> 조건이 맞아야 앞쪽<value>로 간다.
list_comprehention =
[
num for num in range(1, 11) if num % 2 ==0
]
---
> [2, 4, 6, 8, 10]
삼항연산과 함께 사용하기
#삼항연산: A if (조건 맞으면 A) else B
list_comprehention =
[
str(num) + ":even" if num % 2 == 0 else str(num) + ":odd" # <--삼항연산
for num in range(1, 11)
]
Quiz
# kim 씨 성을 가진 사람은 데이터에서 제거하고, lee씨 성을 가진사람은 성을 삭제하는 코드를 작성
names = ["kim fast", "Kim test", "park python", "lee data campus", "jung science", "lee school"]
result = [
" ".join(name.split(" ")[1:]) if name.split(" ")[0] == "lee" else name
for name in names
if name.split(" ")[0].upper() != "KIM"
]
---
> ['park python', 'data campus', 'jung science', 'school']
성만 출력하기
name = "kim test"
name.split(" ")[0]
---
>'kim'
랜덤함수
import random
random.randint(1, 10)
Quiz
for
문과 .format
을 이용한 별찍기 문제
*
**
***
****
*****
-------------------------------------------
for i in range(1,6):
print('{}'.format('*'*i))
*
**
***
****
*****
-------------------------------------------
for i in range(1,6):
print("{0:>5}".format("*"*i)) #5자리 만들고 (>)오른쪽 정렬
*
***
*****
-------------------------------------------
value = int(input("insert int: "))
for i in range(0,value,2):
print("{0:^5}".format("*"*(i+1)))
*****
***
*
-------------------------------------------
value = int(input("insert int: "))
for i in range(0,value,2):
print("{0:^5}".format("*"*(6-(i+1))))
*
***
*****
***
*
-------------------------------------------
value = int(input("insert int: "))
for i in range(1,value+1,2):
print("{0:^5}".format("*"*i))
for j in range(value-2,0,-2):
print("{0:^5}".format("*"*j))
댓글남기기