본문 바로가기

Python

PYTHON : 기초 문법(튜플 , 딕셔너리, 집합, 연산자, 조건문 ,반복문) - 코딩 스터디 그룹 용

반응형

배열: 여러 개의 데이터들을 모은 집합. 추가와 삭제가 가능하다. [ ]로 사용한다.

튜플: 리스트와 동일하게 여러 객체를 모아서 담는다. 숫자, 문자, 객체, 배열, 튜플 안의 튜플 전부 가능하다. 하지만 튜플 내의 값은 수정이 불가하다. 추가도, 삭제도 안 된다. 한번 만들어지면 끝까지 가지고 가야 된다. ( )로 사용하고, ( )가 없어도 동일하게 사용 가능하다.

튜플 요소 값 삭제 안된다.

a = (1, ["이준호", "이지윤"], 3, 4, ["dddd", "wwww", "sdfs"])

# 튜플 삭제 시 에러
del a[2]

>>>
del a[2]
TypeError: 'tuple' object doesn't support item deletion

 

그럼 튜플은 왜 쓸까 ? 

프로그램이 실행 되는 동안 그 값이 변경되면 안 되는 경우에는 튜플을 사용하면 된다. 또한 튜플은 리스트에 비해 더 적은 메모리를 필요로 하고, 속도가 빠르다는 장점이 있다

https://bigdaheta.tistory.com/8

 

[파이썬 독학] 4. 튜플(tuple)과 리스트(list)비교

1. 튜플(tuple)과 리스트(list) 튜플은 리스트와 유사하지만 몇 가지 차이점을 가지고 있다. 리스트는 [ ]로 작성, 튜플을 ( )를 이용하여 작성한다. 리스트는 값을 수정할 수 있지만, 튜플을 값을 변

bigdaheta.tistory.com

튜플 원본이 변경 되지 않는 선에서는 문법 적용이 가능하다 

더하기 

곱하기 

딕셔너리: 연관 배열(associative array)은 자료구조의 하나로, 키 하나와 값 하나가 연관되어 있으며 키를 통해 연관되는 값을 얻을 수 있다. 연상 배열, 결합형 배열, (map), 사전(dictionary)으로 부르기도 한다.

연관 배열은 일반적으로 다음의 명령을 지원한다.

  • 키와 값이 주어졌을 때, 연관 배열에 그 두 값을 저장하는 명령
  • 키가 주어졌을 때, 연관되는 값을 얻는 명령
  • 키와 새로운 값이 주어졌을 때, 원래 키에 연관된 값을 새로운 값으로 교체하는 명령
  • 키가 주어졌을 때, 그 키에 연관된 값을 제거하는 명령
  • https://ko.wikipedia.org/wiki/%EC%97%B0%EA%B4%80_%EB%B0%B0%EC%97%B4
 

연관 배열 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 연관 배열(associative array)은 자료구조의 하나로, 키 하나와 값 하나가 연관되어 있으며 키를 통해 연관되는 값을 얻을 수 있다. 연상 배열, 결합형 배열, 맵(map),

ko.wikipedia.org

리스트에 들어 있는 변수에 key 값이 별도로 있다 ! 

아래 방식으로 딕셔너리를 추가할 수 있다. 

dic = {"name": "joonho", "age": 12}
dic["shcool"] = "ku"

print(dic)

>>>
{'name': 'joonho', 'age': 12, 'shcool': 'ku'}

딕셔너리 삭제

dic = {"name": "joonho", "age": 12}
dic["shcool"] = "ku"

del dic["name"]

print(dic)

>>>
{'age': 12, 'shcool': 'ku'}

key 값은 절대로 겹칠 수 없다 ! 

[key 값만 또 리스트로 추출]

dic = {"name": "joonho", "age": 12}

print(dic.keys())

>>>
dict_keys(['name', 'age'])
a = {"name": "joonho", "age": 31, "school": "ku"}

print(a.keys())
print(a.values())
print(a.items())

>>>
dict_keys(['name', 'age', 'school'])
dict_values(['joonho', 31, 'ku'])
dict_items([('name', 'joonho'), ('age', 31), ('school', 'ku')])

for 문으로 이렇게 많이 쓴

for k, v in a.items():
    print("key =" + str(k))
    print("value = " + str(v))

get()

b = {1: "yellow", 2: "blue", 3: "red", 4: "green", 5: "black"}

# print(b[7])

>>>
print(b[7])
          ~^^^
KeyError: 7

print(b.get(7))
print(b.get(4,"없음"))

>>>
None

두개의 차이 점을 확인해 봅니다.

집합 ! 

# 집합을 정의하는 방법
s1 = set([1,2,3])
s2 = {1,2,3}

set은 집합으로 한 집합 안에는 중복 되는게 없어야한다 

set()으로 감싸면 중복 된게 없어진다. 

l = [1, 2, 3, 2, 1, 5]
newlist = list(set(l))
print(type(newlist))
print(newlist)

>>>
[1, 2, 3, 5]


a1 = set("hello")

print(a1)

>>>
{'o', 'l', 'e', 'h'}

교집합 , 합집합 , 차집합 , 집합 값 추가 , 집합 값 여러개 추가 

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
# 교집합
print(s1 & s2)
# 합집합
print(s1.union(s2))
print(s1 | s2)
# 차집합
print(s1 - s2)
print(s1.difference(s2))
# 집합 값 추가
s1.add("d")
print(s1)
# 집합 값 여러개 추가
s1.update([30, 40, 50, 60])
print(s1)

bool 형 ! 

"python" : 참

"" : 거짓

[1,2,3] : 참

[] : 거짓

() : 거짓

{} : 거짓

 1 : 참 

0 : 거짓

None : 거짓

a = "안녕"
b = ""

if a:
    print(a)

if b:
    print(b)
c = [1, 2, 3, 4, 5]
while c:
    c.pop()
    print(c)



>>>
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]

https://pythontutor.com/visualize.html#mode=display

 

Python Tutor code visualizer: Visualize code in Python, JavaScript, C, C++, and Java

Please wait ... your code is running (up to 10 seconds) Write code in Python 3.6 C (gcc 9.3, C17 + GNU) C++ (g++ 9.3, C++20 + GNU) Java 8 JavaScript ES6 ------ Python 2.7 [unsupported] Visualize Execution hide exited frames [default] show all frames (Pytho

pythontutor.com

a = [1, 2, 3]
b = a
a[1] = 4

print(b)
print(a is b)

>>>
[1, 4, 3]
True

b는 a의 주소를 가지고 있기 때문에 b도 바뀐다 

a와 b는 같은 곳을 바라보고 있다고 생각하면 좋다 . 

a = [1, 2, 3]
b = a[:]  # 슬라이싱 하면 새로운 변수가 생긴다.

a[1] = 4
print(a)
print(b)
print(id(a))
print(id(b))

>>>
2592406473472
2592407449664

 주소가 달라진다. 

또 다른 방법

from copy import copy
a = [1, 2, 3]
b = a.copy()

a[1] = 4
print(str(a) + " id :"+str(id(a)))
print(str(b) + " id :"+str(id(b)))


>>>
[1, 4, 3] id :2389533160640
[1, 2, 3] id :2389532899200

파이썬의 특장점 ! 

a = 3
b = 5

temp = b

b = a

a = temp

print(a)
print(b)


일반적인 언어들의 변수 값 변경 코딩
a = 3
b = 5

a, b = b, a

print(a, b)

>>>
5 3

비교 연산자 (Comparison Operators):

a = 10, b = 20 이라 가정한다.

OperatorDescriptionExample

== 값이 동일하다 (a == b) → false
!= 값이 동일하지 않다 (a != b) → true
> 왼쪽 값이 오른쪽 값보다 크다 (a > b) → false
< 왼쪽 값이 오른쪽 값보다 작다 (a < b) → true
>= 왼쪽 값이 오른쪽 값보다 크거나 동일하다 (a >= b) → false
<= 왼쪽 값이 오른쪽 값보다 작거나 동일하다 (a <= b) → true

https://wikidocs.net/1159

 

4.2. 비교 연산자

### 비교 연산자 (Comparison Operators): a = 10, b = 20 이라 가정한다. | Operator | Description | Example | |…

wikidocs.net

if 문

money = 2000

if money >= 3000:
    print("taxi")
else:
    print("walk")
money = 2000
card = 1

if money >= 3000 or card == 1:
    print("taxi")
else:
    print("walk")
if 1 not in [1, 2, 3]:
    print("taxi")
else:
    print("walk")


if 2 in [1, 2, 3]:
    print("taxi")
else:
    print("walk")


>>>>
walk
taxi
# 조건부 표현식 
score =70 
message = "sucess" if score >= 60 else "aa"

while 조건문 

treeHit = 0

while treeHit < 10:
    treeHit = treeHit + 1
    print("나무를 %d 번 찍었습니다." % treeHit)
    if treeHit == 10:
        print("나무 넘어 갑니다.")


>>>>
나무를 1 번 찍었습니다.
나무를 2 번 찍었습니다.
나무를 3 번 찍었습니다.
나무를 4 번 찍었습니다.
나무를 5 번 찍었습니다.
나무를 6 번 찍었습니다.
나무를 7 번 찍었습니다.
나무를 8 번 찍었습니다.
나무를 9 번 찍었습니다.
나무를 10 번 찍었습니다.
나무 넘어 갑니다.

python 에서 ++ 표현을 못 쓴다. 

coffee = 40
money = 300

while money:
    print("입금 되었습니다. 커피 추출 중")
    money -= 10
    coffee -= 1
    print("남은 커피는 %d 개입니다." % coffee)
    if not coffee:
        print("커피가 다 떨어졌습니다. 판매 중지 ! ")
        break
    if not money:
        print("돈이 다 떨어졌습니다. 판매 중지 ! ")
        break


>>>
입금 되었습니다. 커피 추출 중
남은 커피는 39 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 38 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 37 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 36 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 35 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 34 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 33 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 32 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 31 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 30 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 29 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 28 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 27 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 26 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 25 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 24 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 23 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 22 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 21 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 20 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 19 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 18 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 17 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 16 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 15 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 14 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 13 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 12 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 11 개입니다.
입금 되었습니다. 커피 추출 중
남은 커피는 10 개입니다.
돈이 다 떨어졌습니다. 판매 중지 !

vscode 를 통해서 디버깅을 하면서 변수 값의 변화를 잘 체크 해보시라 ! 

a = 0
while a < 10:
    a = a+1
    if a % 2 == 0:
        continue
    print(a)

>>>>
1
3
5
7
9
# 홀수 추출 알고리즘

for 문 에 튜플 사용 하기 

a = [(1, 2), (3, 4), (5, 6)]

for (i, j) in a:
    
    print(i+j)

>>>
3
7
11

range 자주 사용하는 함수 

for i in range(1, 11):
    print(i)
print(end)


>>>
1
2
3
4
5
6
7
8
9
10
end
end = "end"
sum = 0
for i in range(1, 11):
    sum += i
print(sum)

print(end)


>>>
55
end

구구단 이중 for 문 사용 법 

for i in range(2, 10):
    for j in range(1, 10):
        print(i*j, end=", ")
    print('')

>>>
2, 4, 6, 8, 10, 12, 14, 16, 18, 
3, 6, 9, 12, 15, 18, 21, 24, 27,
4, 8, 12, 16, 20, 24, 28, 32, 36,
5, 10, 15, 20, 25, 30, 35, 40, 45,
6, 12, 18, 24, 30, 36, 42, 48, 54,
7, 14, 21, 28, 35, 42, 49, 56, 63,
8, 16, 24, 32, 40, 48, 56, 64, 72,
9, 18, 27, 36, 45, 54, 63, 72, 81,

리스트 내포 

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
result = [num*3 for num in a if num % 2 == 0]

print(result)

>>>
[6, 12, 18, 24, 30]

함수  입력 ->함수 ->출력 <기본> 

하지만 또 꼭 입력과 출력이 있어야 하는건 아니다 

 

def sum(a, b):
    result = a+b
    return result


print(sum(1, 2))


>>>
3

* arg  : 인자에 대해여  여러개를 넣을 수 있다 

def sum_many(*args):
    sum = 0
    for i in args:
        sum += i
    return sum


print(sum_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))


>>>
78

**karg : 딕셔너리 형식 여러개 인자 받을 수 있다 . 

def dic_many(**kargs):
    for i in kargs.keys():
        if (i == "name"):
            print("당신의 이름은 : " + kargs[i])


print(dic_many(name="joonho", age="12"))


>>>
당신의 이름은 : joonho

결과 값은 1개로 나온다 튜플 형태 ! 

def sum_and_mul(a, b):
    return a+b, a*b, a-b


print(sum_and_mul(1, 2))

>>>
(3, 2, -1)

초기값 설정 가능 ! 

def sum_and_mul(a, b, c=True):
    if c:
        return a+b, a*b, a-b


print(sum_and_mul(1, 2))


>>>
(3, 2, -1)

함수 안에 선언된 변수의 효력 범위

a = 1


def vartest(a):
    a = a+1
    return a


vartest(a)
print(vartest(a))
print(a)

>>>
2
1

이건 왜 그럴까요 ? 

알아 맞춰 보세요 !! 

a = 1


def vartest(a):
    a = a+1
    return a


a = vartest(a)
print(vartest(a))
print(a)



>>>
3
2

global 변수 : 전역 변수 !! 

a = 1


def vartest():
    global a
    a = a+1
    return a


print(vartest())
print(a)

>>>
2
2

람다함수 !! 

add = lambda a,b: a + b

print(add(1,2))

실행시키니까 

def add(a, b): return a + b


print(add(1, 2))

계속 이렇게 바뀌네

단독으로 써서 그런거 같다 

myList = [lambda a, b: a + b, lambda a, b:a*b]

myList[0]
print(myList[0](1, 2))


>>>
3

input()

a = input("숫자를 입력하세요 : ")
print(a)

>>>
숫자를 입력하세요 : 12
12
반응형