'전체 글'에 해당되는 글 32건

 이번 장에서는 6장 Dictionaries에 대해서 알아보도록 하자. list, tuple에 이어서 새로운 type이 나왔다. 앞의 두 개는 친숙할지 몰라도 이 녀석은 생소한 type일 것이다. 하지만 그렇게 어려운 녀석은 아니기 때문에 천천히 하나씩 이해하면서 알아보도록 하자~

 

  • A Simple Dictionary

 제목이 저번 장과 똑같이 시작하는 것 같다...그 말은 즉슨 저번 장과 비슷하게 별로 어렵지 않다는 얘기이다^^ 이번 장은 이때까지 했던 장과는 다르게 새로운 type을 공부하기 때문에 더 재밌을 것 같다는 생각도 든다. dictionary란 사전이라고도 하는데 key와 value 두 가지 값을 가지며 각각에 대응되는 값을 가진다. 예를 들어 key가 '1'이고 value가 '우승'이면 1번을 호출하게 되면 '우승'이 출력된다. 아래 예제를 보고 dctionary type 사용법을 익혀보자.

 

alien_0 = {'color':'green', 'points':5}		# dic type alien_0 생성
print(alien_0['color'])				# 변수[key] = key에 해당하는 value 출력
print(alien_0['points'])

결과
green
5

 

 예제를 보면 항상 key와 value를 따음표(:)를 통해 연결되게 선언하며 중괄호{}를 사용하고 있다. 앞선 장에서 list는 대괄호[], tuple은 소괄호(), dic은 중괄호{}라는 것을 알 수 있다. 이 점을 꼭 기억하고 햇갈리지 않게 주의하자!!!(빨간색으로 표시해뒀다ㅎㅎ)

 특이하게 dic type은 index라는 값이 따로 없고 호출할 때 꼭 key를 호출하여 사용한다. 그리고  key의 value 값은 숫자나, 문자열, 리스트, 혹은 다른 dic type까지도 사용할 수 있다. 다른 type을 value로 가지는 예제에 대해서는 뒤에 나오므로 이 정도만 알고 넘어가도록 하자.

 

  • Adding

 다음은 dic의 adding에 대해서 알아보도록 하자. 앞의 배웠던 type과 크게 다르지 않지만 dic은 key-value 한 쌍을 이뤄야 하기 때문에 adding에서도 key-value 한 쌍을 이뤄서 입력해야 한다. 책에 나온 예제의 결과를 보고 나는 오타인 줄 알았지만 파이썬 3.7 이전에는 dic type에 새로운 값을 추가해도 규칙이 없이 값이 추가됬지만 3.7 이상부터는 입력된 순서대로 값이 저장된다고 젹혀있다. 이 점을 유의하고 실행 결과가 달라도 이해해주기를 바란다.(나는 3.7 이상이다.) 아래 예제를 살펴보고 추가하는 방법에 대해 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
print(alien_0)
u alien_0['x_position'] = 0			# key = x_position, value = 0 추가
alien_0['y_position'] = 25 			# key = y_position, value = 25 추가
print(alien_0)

결과
{1: 'green', 'points': 5, 'x_position': 0, 'y_position': 25}

 

  • Modify

 Adding 다음은 Modify 즉 수정이다. 다들 예상했듯이 key-value는 한 쌍으로 존재한다고 계속 언급하고 있다. 그러므로 value를 수정하기 위해서는??? 당연히 key를 호출해야 한다. key를 호출하여 value를 수정할 수 있으며 이러한 방법은 직적 하는 방법도 있고 method를 사용하는 방법도 있다. 아래 예제를 살펴보고 수정하는 방법에 대해 알아보자.

 

alien_0 = {'color':'green'}
alien_0['color'] = 'yellow'			# alien_0의 key:'color'의 value = 'yellow' 변경
aliel_0.update(color = 'red')			# alien_0의 key:'color'의 value = 'red' 변경
print(aliel_0)

결과
red

 

  • Removing

 다음은 Removing이다. 삭제도 그렇게 어렵지 않고 내가 삭제하고 싶은 key를 찾아서 삭제하는 방법이다. 삭제할 때는 del을 사용하며 해당 key를 삭제하면 그에 맞는 key-value가 함께 삭제된다. 아래 예제를 살펴보고 삭제하는 방법에 대해 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
del alien_0['points'] 				# key = 'points' 삭제
print(alien_0)

결과
{'color':'green'}

 

 그 다음을 살펴보면 dic type에 관련된  method가 소개되고 있다. 책에서는 get() method 한 개만 소개되고 있지만 이 외에도 clear(), items(), keys(), values() 등이 더 존재한다. 아래 예제를 살펴보고 각각의 method를 사용하는 방법에 대해 알아보자.

 

alien_0 = {'color':'green', 'speed':'slow'}
1. print(alien_0.get('points'))				# get(a, k) : key에서 'a'를 찾고 없으면 k 반환(기본값 : None)
2. print(alien_0.values())				# values() : 모든 value 반환
3. print(alien_0.keys())				# keys() : 모든 key 반환
4. print(alien_0.items())				# items() : 모든 value, key 반환
alien_0.clear()						# dic type variable 초기화
5. print(alien_0)					

결과
1. None
2. dict_values(['green', 'slow'])
3. dict_keys(['color', 'speed'])
4. dict_items([('color', 'green'), ('speed', 'slow')])
5. {}

 

 

  • Looping Through a Dictionary

 이번 장은 dic type을 조금 더 활용할 수 있는 loop문을 이용한 사용법이다. loop문을 통해 dic의 모든 요소를 반환하거나 사용할 수 있게 된다. 위에 나와 있는 items(), values(), keys() method들을 사용해서 loop문에서 활용할 수 있으며 상황에 따라 골라쓰면 될 것 같다. 그러면 간단하게 아래 예제를 보고 dic의 모든 요소를 출력하는 방법에 대해 알아보자.

 

favorite_languages = {'jen': 'python',
                      'sarah': 'c',
                      'edward': 'ruby',
                      'phil': 'python'}
for name, language in favorite_languages.items():		# items()를 이용해 모든 요소 출력
    print(f"{name.title()}'s favorite language is {language.title()}.")

출력
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.

 

 key와 value 요소를 각각 모두 출력하는 방법도 위와 같기 때문에 생략하기로 하겠다.

 

  • Nesting

 다음은 앞서 얘기했던 dic type과 다른 type과의 결합하는 방법에 대해 알아보자. 앞선 장에서 우리는 list를 배운 적이 있다. 하지만 요소로써 string, int, float들만 활용을 해보았으나 요소에 dic type을 넣을 수도 있는 사실이 책에 예시로 나와 있다.(반대로도 가능하다. 단 value만!!!) 아래 예제를 보고 list 안에 dic을 넣는 방법을 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
alien_1 = {'color': 'yellow', 'points': 10} 
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]		# dic type 요소를 갖는 list 생성
for alien in aliens:    
	print(alien.keys())			# 요소가 dic type이면 그에 맞는 method도 사용 가능

결과
dict_keys(['color', 'points'])
dict_keys(['color', 'points'])
dict_keys(['color', 'points'])

 

 다음은 반대로 dic type 안에 list를 갖는 경우이다. 이 경우에는 key는 한 개의 값만 가질 수 있으며 한 개의 key에 여러 개의 value를 list type으로 지정할 수 있다. 아래 예제를 살펴보고 value를 list로 가지는 방법에 대해 알아보자.

 

pizza = {'crust':'thick',
         'toppings':['mushrooms', 'extra cheese']}
print(pizza['toppings'])			# key = 'toppings'의 모든 value 출력
print(len(pizza['toppings']))			# key = 'toppings'의 value 개수 출력
print('mushrooms' in pizza['toppings'])		# key = 'toppings'의 value 탐색

출력
['mushrooms', 'extra cheese']
2
True

 

 마지막으로 dic 안에 dic을 쓰는 방법이 있다. 이러한 경우로 key는 한 개의 값밖에 가지지 못하기 때문에 value에 dic type을 지정해서 쓰는 방법이다. 아래 예제가 햇갈릴 수 있지만 천천히 살펴보면 매우 간단하기 때문에 주석을 참고하여 사용 방법을 익혀보도록 하자.

 

users = {'aeinstein': {'first': 'albert',
                       'last': 'einstein',
                       'location': 'princeton'},
         'mcurie': {'first': 'marie',
                    'last': 'curie',
                    'location': 'paris'}
         }
for username, user_info in users.items():         	 	 # items()를 활용해 key와 value 나눔
    print(f"\nUsername: {username}")             	 	 
    full_name = f"{user_info['first']} {user_info['last']}"	# value가 dic type이므로 key 호출
    location = user_info['location']
    print(f"\tFull name: {full_name.title()}")
    print(f"\tLocation: {location.title()}")

결과
Username: aeinstein
	Full name: Albert Einstein
	Location: Princeton

Username: mcurie
	Full name: Marie Curie
	Location: Paris

 

 자 이렇게 dictionary type에 대해 간단하게 공부해봤다. 처음보는 type이어서 생소할 수 있지만 쓰다보면 꽤나 유용한 type이기 때문에 잘 공부해서 써먹어보자! 다음 장에서는 input() 함수와 또 다른 loop문인 while에 대해서 소개되고 있다. 그러면 다음 장에서 입력, 출력 모두 써먹을 수 있게 어서 배워보자~^^

'Python > No Starch Press_Python' 카테고리의 다른 글

Chapter8. Functions  (0) 2020.04.28
Chapter7. USER INPUT AND WHILE LOOPS  (0) 2020.04.20
Chapter5. IF STATEMENTS  (0) 2020.04.10
chapter4. working with lists  (0) 2020.04.10
Chapter3. Introducing Lists  (0) 2020.03.23
블로그 이미지

Mr.HB

프로그래밍 이야기

,

 이번 장에서는 5장 If Statements에 대해서 알아보도록 하자!! 우리가 흔히 알고 있는 if문은....그렇다! 조건문이었다. 만약에 ㅇㅇ한다면.... A를 실행하고 아니면 실행하지 않는 그런 조건문이다. 파이썬에서도 용도가 다르지 않다. 우리가 알고 있는 If문과 동일하기 때문에 사용하는 것에 대해서는 크게 어렵지 않다고 생각한다.

 

  • A Simple Example

 중단원 제목을 보라! A Simple example?? 간단한 예제만 보고도 이해할 수 있다는 뜻이다. 그러면 바로 아래 예제를 살펴보고 If문의 사용법을 알아보자.(저번 장에서 말했듯이 들여쓰기를 조심하자!!)

 

cars = ['audi', 'bmw', 'subaru', 'toyota']

for car in cars:			# for문으로 cars의 요소들 하나씩 반환
    if car == 'bmw':			# 요소가 bmw이면 실행
        print(car.upper())
    else:				# bmw가 아니면 실행
        print(car.title())

 

 저번 장에서 사용했던 for문과 사용방법이 비슷하다. if로 시작하여 뒤에 조건에 대해 적고 따음표(:)로 시작 후 들여쓰기만큼 범위가 지정되어있다. 항상 들여쓰기 사용에 유의하며 계속 알아보기로 하자.

 다음은 If문에서 사용하는 부호들에 대해 정리해보도록 하자. 가장 자주 쓰는 '같다'와 '같지 않다'는 =가 아닌 두 개를 사용하여 ==과 !=로 사용하고 있다. 그 외에도 비교 부호들이 많기 때문에 아래의 표를 참고해서 사용하도록 하자. (이 외에도 더 있을 수 있지만 나머지는 구글링을 해보자!^^)

 

기호 의미
== 같다(대소문자 구분)
!= 같지 않다
A < B A가 B보다 작다
A <= B A가 B 이하이다
A > B A가 B보다 크다
A >= B A가 B 이상이다
A is B A와 B는 같은 변수이다(==과 다름)
A in B B 안에 A가 있다

 

  • If Statements

 다음 내용도 크게 다르지는 않다. 들여쓰기에 대한 범위에 대한 이야기와 if-else에 관해서 소개해주고 있다. 이 두 내용은 위에서 알아보았기 때문에 넘어가고 if-elif-else 다중 조건문에 대해서 알아보도록 하자. 이 내용도 크게 어렵지는 않다. 한 개만 있는 if문에 A가 아니면 B, B도 아니면 else 이런 식으로 조건문에 꼬리를 무는 것처럼 계속 검사하는 것이다. 아래 예제를 살펴보고 사용법을 알아보도록 하자.

 

age = 12
if age < 4:								# age < 4 검사
    print('Your admission cost is $0.')
elif age < 18:								# age < 18 검사
    print('Your admission cost is $25.')
else:									# 위의 두 조건이 아니면 해당
    print('Your admission cost is $40.')
    
결과
Your admission cost is $25.

 

 그리고 if와 elif의 차이점은 if는 조건 하나하나 전부 검사하는 반면에 elif는 만약 A, B, C 중 A에서 조건이 맞으면 B와 C의 조건은 검사하지 않고 넘어가게 된다. 그렇기 때문에 검사해야 되는 조건과 하나만 검사해야 하는 조건을 잘 구분하여 조건문을 작성하여야 한다.

 그 뒤로는 효율적인 If문 사용법에 대해 설명이 나오는데 크게 내가 설명할 부분은 없어 보이기 때문에 모두 정독하고 코드도 실행해보면서 넘어가기로 하자^^

 

  • Styling Yot if statements

 이곳에서는 조언?이 하나 나오는데 나도 이 방법을 추천한다. 보통 우리가 조건문을 쓸 때 공백 즉 space를 쓰지 않고 따닥따닥 붙이는 경우가 많다. 위의 내 예제 코드들을 보면 알겠지만 나는 중간중간에 space를 꼭 넣어서 띄엄띄엄 보기 좋게 만드는 편이다. 코드에 지장도 없을뿐더러 보기도 좋기 때문에 꼭 추천하는 내용이다. 아래 코드를 살펴보고 어떤 방법이 더 좋은지는 본인의 스타일대로 해보도록 하자.

 

if a<3:

if a < 3:

 

 5장은 먼가 엄청 빨리 끝난 것 같은 느낌이 든다. 중복적인 이야기도 많았을 뿐더러 조건문의 기초이기 때문에 이해가 쉬워서 더 빨리 끝나지 않았나 싶다. 다음 장에서는 새로운 Type인 Dictionaries에 대해서 나오는 것 같다. 사전이라고 해석되는데 파이썬에 있는 특수한 녀석이다. 그러면 다음 장을 기대하면서 오늘은 여기서 마치도록 하겠다.

'Python > No Starch Press_Python' 카테고리의 다른 글

Chapter7. USER INPUT AND WHILE LOOPS  (0) 2020.04.20
Chapter6. DICTIONARIES  (0) 2020.04.17
chapter4. working with lists  (0) 2020.04.10
Chapter3. Introducing Lists  (0) 2020.03.23
Chapter2. Variables and simple data types  (2) 2020.03.12
블로그 이미지

Mr.HB

프로그래밍 이야기

,

 오늘은 챕터 4를 들어가보기로 하자. 이번주는 일이 바빠서 일찍 업로드하지 못한 점 양해 바랍니다....^^;; 저번 챕터에서 예상했듯이 먼저 4챕터를 살펴보면 3챕터의 확장인 것 같은 느낌이 든다. list의 활용 방법이나 반복문을 활용한 list 출력 및 몇 가지 method에 대해서 알려주고 있는 것 같다. 그러면 하나씩 알아보도록 하자~

 

  • Looping through an Entire List

 우리가 앞장에서는 list를 출력하는 방법을 미리 배워보았다. 하지만 []안에 있는 형태로 출력되고 요소만 뽑는 것에 대해서 일일히 index를 호출하거나 하나씩 출력하는 방식밖에는 하지 못했다. 하지만 이 챕터에서는 반복문! 즉 우리가 흔히 알고 있는 for, while 등을 이용하여 모든 요소를 출력하는 방법을 배울 것이다. 그러면 반복문 중에서도 for문으로 list 전체 요소를 출력하는 방법을 알아보자. 아래의 예제를 살펴보고 사용 방법을 생각해보자.

 

magicians = ['alice', 'david', 'carolina']		# list 생성
for magicians in magicians:				# for (변수) in (변수의 값):
    print(magicians)					# 들여쓰기로 for문 범위 지정
    
출력
alice
david
carolina

 

 우리가 알고 있는 for문과는 매우 다른 구조를 띄고 있다. 하나씩 살펴보자면 for variable(임의 지정)를 지정한 뒤에 in을 삽입하여 variable에 들어갈 value를 지정하는 것이다. value는 숫자가 될 수도 있고 list가 될 수도 있고 흔히 쓰는 형태로는 range()가 많이 쓰인다.(저번 장에서 내가 알려준 method^^) 그리고 c언어에서는 중괄호{}를 사용하여 시작과 끝을 맺었지만 여기서는 시작은 따음표(:)로 알려주지만 끝은 따로 표시가 되어 있지 않다.

 왜???? 여기는 매우 중요한 부분이기에 빨간색 강조를 하겠다. 파이썬이 따로 괄호가 없는 이유는 파이썬은 들여쓰기를 통해 함수의 범위나 조건의 범위가 정해진다. 즉 들여쓰기가 통일되게 되어있으면 그 범위가 곧 for문의 범위라는 것이다. 아래 예제를 살펴보고 들여쓰기의 차이점을 익히도록 하자!!

 

for num in range(3):
	print(num)		
print('END')			# for문에 해당하지 않음

출력
0
1
2
END

for num in range(3):
	print(num)		
	print('END')			# for문에 해당

출력
0
END
1
END
2
END

 

  • Making Numerical lists

 이번 장에서는 매우 유용한 method가 소개되는데 range()라는 method이다. 저번 장부터 조금씩 언급한 녀석이지만 더 자세하게 사용법을 익혀보도록 하자. 앞에 설명했듯이 range()는 괄호 안에 숫자부터 숫자까지의 값들을 반환하는 method이다. 연속된 값을 반환시킬 수도 있으며 일정한 규칙에 맞게 값을 반환시킬 수도 있다. 아래의 예제를 보고 사용법을 익혀보자.

 

for value in range(1, 5):		# range(n, m) : n부터 m-1까지 반환
	print(value)

결과
1
2
3
4

even_numbers = list(range(2, 11, 2))	# range(n, m, a) : n부터 m-1까지 a의 간격마다 반환
print(even_numbers)

결과
[2, 4, 6, 8, 10]

 

  • Working with Part of a List

 다음은 파이썬에만 있는 기능 중 하나인 slicing에 대해서 배워보자. 말 그대로 list의 일부를 자르는 기능을 가지고 있는데 사용하는 방법이 매우 다양하다. 먼저 아래 예제를 살펴보고 기능에 대해 알아보자.

 

players = ['na', 'da', 'ka', 'ta', 'ma']
print(players[0:3])		# players[n:m] : 인덱스 n부터 m-1까지 반환

결과
['na', da', 'ka']

print(players[:2])		# 앞 숫자 생략은 처음부터 m-1까지 반환

결과
['na', 'da']

print(players[:])		# list의 전체 값 반환

결과
['na', 'da', 'ka', 'ta', 'ma']

 

 다음은 list를 복사하는 방법에 대해 알아보자. 이 부분도 중요하게 공부해야 하는데 그 이유에 대해서는 지금부터 이야기해보도록 하겠다. 먼저 예제를 보고 두 코드의 차이점이 무엇인지 알아보도록 하자.

 

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]		# 다른 list friend_foods 생성
same_foods = my_foods			# 같은 list same_foods 생성

 

 위 두개의 차이점을 알겠는가?? 하나는 앞에서 배운 slicing을 통해 초기화했고 하나는 list 자체를 초기화로 사용했다. 위 두 코드가 어떻게 다른지 아래 예제를 보고 알아보자.

 

my_foods.append('cannoli')
friend_foods.append('ice cream')

결과
my_foods =  ['pizza', 'falafel', 'carrot cake', 'cannoli']
friend_foods =  ['pizza', 'falafel', 'carrot cake', 'ice cream']

my_foods.append('cannoli')
same_foods.append('ice cream')

결과
my_foods = ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
same_foods = ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

 

 list에 append()를 사용하여 추가했을 때 위에서는 따로따로 추가가 되었지만 아래에서는 같이 추가가 되었다. 왜냐하면 위의 두 list는 각각 다른 list이지만 아래의 두 list는 이름만 다를 뿐 같은 list이기 때문이다. 쉽게 말하자면 위의 두 친구는 서로 옆집에 산 반면에 아래 두 친구는 한집살이를 하고 있는 것이다!!! 이러한 결과를 알기 좋은 실험이 있는데 바로 '=='과 'is'를 사용해보는 것이다. 아래 예제에 사용법을 적어놓도록 하겠으니 심심하면 해보도록 하자~

 

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]		# 다른 list friend_foods 생성
same_foods = my_foods			# 같은 list same_foods 생성

print(my_foods == friend_foods)		# '=='은 두 비교 항목이 일치만 하면 True 반환
결과 : True

print(my_foods is friend_foods)		# 'is'는 두 비교 항목이 본질?이 같으면 True 반환
결과 : False 

 

  • Tuple

 드디어 수많은 type 중 하나인 Tuple에 대해서 소개하고 있다. Tuple의 사용법은 list와 비슷해보이지만 분명히 다른 점이 있다. 먼저 list는 대괄호[]를 쓰는 반면에 tuple은 소괄호()를 사용하고 있다. 그리고 제일 중요한 점은 tuple은 처음 초기화 값을 넣고 그 다음에 변경이 불가능하다는 점이다. 값이 불변한다는 큰 단점이자 장점을 가지고 있다. 그 외에는 list와 동일하게 사용 할 수 있으니 아래 예제에서 tuple의 사용법을 알아보자.

 

dimensions = (200, 50)		# Tuple dimensions 생성
print(dimensions[0])
print(dimensions[1])

출력
200
50

dimensions[0] = 100		# 값을 변경하지 못하기 때문에 TypeError
dimensions = (100, 100)		# 새로운 초기화 가능

 

 tuple을 끝으로 list에 대한 장이 끝이 났다. 그 뒤에는 Styling Your Code가 있는데 한 번 읽어보자^^(절대 귀찮은 건 아님) 이렇게 두 장에 걸쳐서 list에 대한 간략한 이해가 끝났고 다음 장에서는 if문에 대해서 나오는 같으니까 한 번 또 제대로 배워서 나중에 활용할 수 있게 연습해보자~ 이번주는 많이 바빠서 금요일부터 작업에 들어갔으니 양해 바랍니다...ㅠㅠ

'Python > No Starch Press_Python' 카테고리의 다른 글

Chapter7. USER INPUT AND WHILE LOOPS  (0) 2020.04.20
Chapter6. DICTIONARIES  (0) 2020.04.17
Chapter5. IF STATEMENTS  (0) 2020.04.10
Chapter3. Introducing Lists  (0) 2020.03.23
Chapter2. Variables and simple data types  (2) 2020.03.12
블로그 이미지

Mr.HB

프로그래밍 이야기

,