input, print, string format 함수, for, range(), enumerate(), zip(), list comprehention

연산자

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
  • print
  • 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문과 함께 사용하면 자료형의 indexvalue 를 쉽게 알 수 있다.
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))

태그:

카테고리:

업데이트: