Sister Nosilv story

3. 프로그래밍과 데이터 in Python

by 노실언니

*1.프로그래밍 시작하기는 컴퓨터개론Course의 1토픽과 정확하게 일치하여 생략

프로그래밍기초Course

  📺플밍기초 in Python📺 - 🎖수료증

  • 프로그래밍 시작하기-Getting started with python - 📺   📝
  • 프로그래밍 핵심개념-Core concept of python programming - 📺   📝
  • ▶ 프로그래밍과 데이터-Python programming and data - 📺   📝
  • Python 응용하기-Making use of python - 📺   📝

*Link : 📺인강  📝정리노트

10년 안에 프로그래밍을 모르면 문맹이 되는 시대가 올 것입니다. 인공지능, 로봇, 사물인터넷, 가상현실, 스마트카 등 다가오는 미래 산업에 프로그래밍을 빼고 말할 수 있는 것은 없습니다. 그렇다면, 어떤 언어로 시작하는 게 좋을까요? 코드잇에서는 파이썬을 가장 추천합니다. 파이썬은 실리콘벨리를 비롯 세계 유수 기업에서 가장 많이 쓰는 언어이며, 미국 대학 상위 39개 컴퓨터 학과에서 선호하는 언어 1위이기도 합니다. 데이터 사이언스, 웹 개발 등 어디 하나 빠지지 않고 쓰이지요. 파이썬과 함께 프로그래밍의 세계에 첫 걸음을 내딛어 보세요.

Python을 배우면서 프로그래밍 자체도 배워보자

 


 

Topic 3. 프로그래밍과 데이터 in Python

앞서 배운 정수형, 소수형, 문자열, 불린형 외에도 굉장히 많은 자료형이 있습니다. 그 중 가장 유용하게 사용할 수 있는 두 가지를 알려드리려고 합니다.

- 먼저 '리스트'라는 자료형이 있습니다.

리스트는 여러 값들을 하나로 묶어 주는 자료형입니다.

여러 값을 한꺼번에 다룰 수 있다는 장점이 있고, 여러 값을 원하는 순서대로 보관할 수 있다는 장점도 있습니다.

- 그 다음은 '사전'입니다. 사전도 리스트처럼 여러 값을 보관하는 자료형인데요.

순서대로 보관하는 것이 아니라, 마치 진짜 사전에서 단어를 찾듯이 값을 '검색'할 수 있다는 것이 특징입니다.

추가적으로 리스트, 사전, 문자열 등 파이썬 자료형의 비밀 몇 개를 알려드릴 건데요. 많은 분들이 잘 모르는 고급 정보니까 잘 배워 두시길 바랍니다!

 

⑴ 자료형: 리스트

새로운 자료형, <List>의 추가

① 리스트

- 리스트(List) : 여러 값을 저장할 수 있는 자료형 (≒≠집합)

- 요소 : 리스트를 구성하는 값 (≒≠집합의 원소:중복가능/불가라는 점에서 차이가 있음)

- 인덱스(Index) : 요소의 위치번호

앞에서부터 : 0 → (전체갯수-1)

뒤에서부터 : -(전체갯수) ← -1 번

 

- 리스트 콘솔에 출력하기

# 리스트 콘솔출력
numbers = [1, 2, 3, 4, 5, 6]        # index: -6 ~ 5
names = ["A", "B", "C", "D", "E"]   # index: -5 ~ 4

print(numbers)      # [1, 2, 3, 4, 5, 6]
print(names)        # ['A', 'B', 'C', 'D', 'E']

 

- 인덱싱(Indexing) :[가리키다] index를 통해, 리스트의 요소를 받아오는 것

- 슬라이싱(slicing) :[자르다] index를 통해, 리스트 중 일부 요소만 잘라오는 것

numbers = [1, 2, 3, 4, 5, 6]        # index: -6 ~ 5

# 인덱싱 (Indexing) : "가리키다" 인덱스를 통해 요소를 받아오는 것
print(numbers[0])   # 1 : 맨 앞
num1 = numbers[5]   # 6 : 앞에서 5+1번째
num2 = numbers[-6]  # 1 : 뒤에서 6번째
print(f"{num1}+{num2}={num1+num2}")     # 6+1=7

# 슬라이싱 (slicing) : "자르다" 인덱스를 통해 일부 요소만 잘라오는 것
num4 = numbers[0:2]     # Index 0~1까지 잘라옴           [1, 2]
num5 = numbers[:4]      # Index 맨 앞~3(4번째)까지 잘라옴  [1, 2, 3, 4]
num6 = numbers[2:]      # Index 2~맨 뒤까지 잘라옴        [[3, 4, 5, 6]

# 인덱스번호를 초과하면? → IndexError: list index out of range
num3 = numbers[6]

 

- 리스트 재정의

# 리스트 재정의
numbers[0] = 10             # print(numbers[0]) → 10
numbers[1] += numbers[2]    # numbers[1] = 2 + 3 = 5

 

- List 관련 Style Guide : "공백없이 붙여쓰기"

Immediately inside parentheses(), brackets[], or braces{}.

Immediately before the open parenthesis that starts the argument list of a function call.

Immediately before the open parenthesis that starts an indexing or slicing.

-

Between a trailing comma and a following close parenthesis : omit whitespace

 

② 리스트 함수 (함수⊃Method)

#길이 #추가 #삭제 #정렬 #search #Nested List

a. 길이

- a. [총 길이] return 리스트 길이 : len(list_name)

# len(list_name) : return list 길이(Length) = 요소갯수
numbers = []
print(len(numbers))     # 0 : 요소 0개

numbers = [1, 2, 3, 4, 5]
print(len(numbers))

b. 추가

- b-1. [+] 요소하나 자동추가 : list_name.append(요소) ← "덧붙이다, 첨부하다" 맨 뒤에서 추가됨

- b-2. [++] 요소여럿 자동추가 : list_name.extend([요소들]) ← "늘리다" 맨 뒤에서 추가됨

- b-3. [+] 요소하나 위치지정 삽입 : list_name.insert(index, 요소) ← 기존 요소들은 뒤로 밀려남

셋 다 객체.Method(parameter) 형태의 리스트 메소드

※ 객체란 파이썬에서 사용되는 모든 자료형을 말한다.

# 요소(+) : 1개자동.append(요소값) / 여러개자동.extend([리스트]) / 1개위치지정.insert(index,요소값)
numbers = []
numbers.append(1)       # [1]
numbers.append(2)       # [1, 2] : 뒤에서 차곡차곡
numbers.extend([3, 5])	# [1, 2, 3, 5]	: 여러 요소 추가
numbers.insert(3, 4)	# [1, 2, 3, 4, 5] : index 3에 4 추가
numbers.insert(-2, 10)  # [1, 2, 3, 10, 4, 5] : index -2(뒤에서 두번째)에 10 추가

* 마이너스 인덱스(-index)도 .insert()에 사용할 수 있다.

메소드 3개 비교 : 여러 요소를 넣을 때!

# 여러 요소 + 할 때, insert, append, extend의 차이
numbers = [1, 10]
numbers.insert(1, [1, 2])	 # [1, [1, 2], 10] - [1, 2]가 한 요소, 하나의 index로 할당받음
numbers.append([1, 2])		 # [1, [1, 2], 10, [1, 2]] - [1, 2]가 한 요소, 하나의 index로 할당받음
numbers.extend([1, 2])		 # [1, [1, 2], 10, [1, 2], 1, 2]  - 1, 2 두 요소, 두 index로 할당받음

 

c. 삭제

- c-1. [-] 위치지정 요소삭제 : del list_name[index] *delete

- c-2. [-] 값지정 요소삭제 : list_name.remove(요소값) *여러 개인 경우, 첫번째 요소만 삭제

# 위치지정 요소 삭제 : del list_name[index]
numbers = [1, 2, 3, [4, 5]]
del numbers[1]			# 1번 index = 2번째 요소 삭제
print(numbers)          # [1, 3, [4, 5]]

numbers = [1, 2, 3, [4, 5]]
del numbers[3]          # 3번 index = 4번째 요소 삭제
print(numbers)          # [1, 2, 3]

# 값지정 요소 삭제 : list_name.remove(요소값)
numbers = [1, 2, 3, 2, 1]
numbers.remove(2)
print(numbers)         # [1, 3, 2, 1]

d. 정렬

- d-1. [정렬 리스트 리턴] : sorted(list_name) * 내림차순:sorted(list_name, reverse=True)

- d-2. [해당 리스트 자체를 정렬] : list_name.sort() * 내림차순:list_name.sort(reverse=True)

# sorted(list_name) : sorted 된 리스트를 return
numbers = [10, 1, 8, 2, 3, 2]
ascending = sorted(numbers)
descending = sorted(numbers, reverse=True)

print(numbers)          # [10, 1, 8, 2, 3, 2]   ★기존 list 불변
print(ascending)        # [1, 2, 2, 3, 8, 10]
print(descending)       # [10, 8, 3, 2, 2, 1]


# list_name.sort() : 해당 리스트를 정렬 / return None
numbers = [10, 1, 8, 2, 3, 2]
print(numbers.sort())   # sort실행 후, None 출력
print(numbers)          # [1, 2, 2, 3, 8, 10]   ★기존 list 변화
numbers.sort(reverse=True)
print(numbers)          # [10, 8, 3, 2, 2, 1]

sorted()와 .sort()의 차이점 : return값 & 기존 리스트 변화유무

default정렬:오름차순 - reverse=True:내림차순

- d-3. [거꾸로] : list_name.reverse()

len(), del, sort() VS .append(), .extend(), .insert(), .sorted()

함수의 성능 : 함수명 > 객체명.메소드명

e. 검색

- e-1. [값이 있니?] : 값 in list_name → return True or False

- e-2. [값이 어떤 index에 있니?] : list_name.index(값) → return index * 중복시, 최고 앞 쪽 index 하나만 출력

 

+ Nested list

list_name = [1, 2, 3, [4, 5], 6]
print(list_name[3]) 		# [4, 5]
print(list_name[3][1])		# [5]

 

③ 실습문제

- 1. 리스트 인덱싱 연습

문제
내 코드
모범답안

[remark]

나 : 변수(list_length)선언 + while index != list_length:

답 : 변수(list_length)선언 + while index < len(list):

 

- 2. 온도 단위 바꾸기

# 내 답안
# 화씨 온도에서 섭씨 온도로 바꿔 주는 함수
def fahrenheit_to_celsius(fahrenheit):
    return round(((fahrenheit-32) * 5) / 9, 1)


temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: " + str(temperature_list))  # 화씨 온도 출력

index = 0
while index != len(temperature_list):
    temperature_list[index] = fahrenheit_to_celsius(temperature_list[index])
    index += 1

print("섭씨 온도 리스트: " + str(temperature_list))  # 섭씨 온도 출력
# 모범답안
# 화씨 온도에서 섭씨 온도로 바꿔 주는 함수
def fahrenheit_to_celsius(fahrenheit):
    return (fahrenheit - 32) * 5 / 9


temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: " + str(temperature_list))  # 화씨 온도 출력

# 리스트의 값들을 화씨에서 섭씨로 변환하는 코드
i = 0
while i < len(temperature_list):
    temperature_list[i] = round(fahrenheit_to_celsius(temperature_list[i]), 1)
    i += 1
print("섭씨 온도 리스트: {}".format(temperature_list))  # 섭씨 온도 출력

 

- 3. 환전 서비스

# 내 답안
# 원화(₩)에서 달러($)로 변환하는 함수
def krw_to_usd(krw):
    return round(krw * 0.001, 1)


# 달러($)에서 엔화(¥)로 변환하는 함수
def usd_to_jpy(usd):
    return round(usd * (1000/8), 1)


# 원화(₩)으로 각각 얼마인가요?
prices = [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
print("한국 화폐: " + str(prices))

# amounts를 원화(₩)에서 달러($)로 변환하기
i = 0
while i != len(prices):
    prices[i] = krw_to_usd(prices[i])
    i += 1

# 달러($)로 각각 얼마인가요?
print("미국 화폐: " + str(prices))

# amounts를 달러($)에서 엔화(¥)으로 변환하기
i = 0
while i != len(prices):
    prices[i] = usd_to_jpy(prices[i])
    i += 1

# 엔화(¥)으로 각각 얼마인가요?
print("일본 화폐: " + str(prices))
# 모범답안
# 원화(₩)에서 달러($)로 변환하는 함수
def krw_to_usd(krw):
    return krw / 1000  # 1,000원 당 1달러


# 달러($)에서 엔화(¥)로 변환하는 함수
def usd_to_jpy(usd):
    return usd / 8 * 1000


# 원화(₩)로 각각 얼마인가요?
prices = [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
print("한국 화폐: " + str(prices))

# prices를 원화(₩)에서 달러($)로 변환하기
i = 0
while i < len(prices):
    prices[i] = krw_to_usd(prices[i])
    i += 1

# 달러($)로 각각 얼마인가요?
print("미국 화폐: " + str(prices))

# prices를 달러($)에서 엔화(¥)로 변환하기
i = 0
while i < len(prices):
    prices[i] = usd_to_jpy(prices[i])
    i += 1

# 엔화(¥)로 각각 얼마인가요?
print("일본 화폐: " + str(prices))

 

- 4. 리스트 함수 활용하기

문제

왼쪽:내 풀이 VS 오른쪽:모범답안

'j'를 굳이 만들지 않고, 'i'올리는 것을 신중히(else에만)하면 좋았을텐데..!

 

⑵ 제어문: for 반복문

① for문

배웠던 제어문(while & if)에, 반복문이 하나 더 추가되었다. <for문>

 

- 원리

for문의 원리

 

- 반복문 : While VS For

while VS for 두 반복문의 차이 : 조건문 VS 리스트(튜플,문자열)

 

② for 변수 in range()

- 함수구조 & Point : 맨 뒤 숫자값은 X / 등차수열 / 소수값 불가

range 함수, 구조

 

- 사용의의 : "메모리 효율성

[문제] for 변수 in list 中 list가 엄청 큰 경우, 메모리 할당량도 늘어난다.

[해결] range함수를 사용하면, 모든 요소값들을 메모리에 미리 생성하지 않아도 된다.

[원리] range함수는 범위 내 숫자들을 만들어주는 객체를 생성한다. 특정 상황에 필요한 숫자만 그때그때 얻는다.

 

for을 사용하여, 1~10까지 출력하기.

for문에 사용할 리스트는 [1, 2, 3, ··· 9, 10] or while i <= 10: 로 만들었는데 → 1~100, 1~10000 출력 이런거면?

손수치기? VS while loop ?

<초간단 초깔끔>

③ 실습문제

- 1. range 연습

실습과제
나의 답

numbers.index(값) : (가장 먼저 등장하는) 해당 요소값의 index를 return하는 메소드

요소가 중복되지 않기에 사용하였음 → range()를 사용하지 않아서 수정

 

모범 답안

 

- 2. 거듭제곱

실습과제
내 답안
모범답안

 

- 3. for문으로 구구단

실습과제
내 답안
모범답안 - 동일
추가정보 - 문자열 포맷팅 中 % 관련 operator

 

- 4. 피타고라스 삼조

실습문제
내 답안
모범답안

 

- 5. 리스트 뒤집기

나의 답 : .reverse()가 쉽지만, for문을 사용하라니 → 새 list를 만들어서 차곡차곡 쌓은 후, numbers에 새 list를 대입 함

모범답안
모범답안의 부연설명 - tuple

완성 - 효율적!

 

⑶ 자료형: dictionary

새로운 자료형, <List>의 추가

① 딕셔너리(사전)

- 딕셔너리(Dictionary) : 여러 값을 저장할 수 있는 자료형 중 하나 - String/List/Tuple/Dictionary

- 요소 : 키(key)-값(value)한 쌍(pair)

- 키(key) : 요소를 특정할 수 있는 유일 값 ≒ list의 index

Index VS Key : 순서대로(앞:0~ & 뒤:-1~)/자동지정/정수 VS 순서/직접작성/자유로운type

# 여러 값을 담은 자료형
# string, list, tuple : 여러 값 / 순서개념 : index → 값
# dict : 여러 쌍 key-value pair / 순서개념 X : key → 값


my_dictionary = {
    5: 25,
    2: 4,
    3: 9
}

# type 확인 → <class 'dict'>
print(type(my_dictionary))      # <class 'dict'>

# key 를 통한 값 호출 ≒ 인덱싱 : list[index] = value
print(my_dictionary[3])         # 9  ≒ 인덱싱 : list[index] = value

# 요소추가 or 변경
my_dictionary["김"] = "학생"     # 추가
my_dictionary[5] = "첫번째"      # 변경
print(my_dictionary)            # {5: '첫번째', 2: 4, 3: 9, '김': '학생'}

 

새로운 자료형, <List>의 추가

- 리스트(List) : 여러 값을 저장할 수 있는 자료형 (≒≠집합)

- 요소 : 리스트를 구성하는 값 (≒≠집합의 원소:중복가능/불가라는 점에서 차이가 있음)

- 인덱스(Index) : 요소의 위치번호

앞에서부터 : 0 → (전체갯수-1)

뒤에서부터 : -(전체갯수) ← -1 번

 

- 인덱싱(Indexing) :[가리키다] index를 통해, 리스트의 요소를 받아오는 것

- 슬라이싱(slicing) :[자르다] index를 통해, 리스트 중 일부 요소만 잘라오는 것

numbers = [1, 2, 3, 4, 5, 6]        # index: -6 ~ 5

    # 인덱싱 (Indexing) : "가리키다" 인덱스를 통해 요소를 받아오는 것
    print(numbers[0])   # 1 : 맨 앞
    num1 = numbers[5]   # 6 : 앞에서 5+1번째
    num2 = numbers[-6]  # 1 : 뒤에서 6번째

    # 슬라이싱 (slicing) : "자르다" 인덱스를 통해 일부 요소만 잘라오는 것
    num4 = numbers[0:2]     # Index 0~1까지 잘라옴           [1, 2]
    num5 = numbers[:4]      # Index 맨 앞~3(4번째)까지 잘라옴  [1, 2, 3, 4]
    num6 = numbers[2:]      # Index 2~맨 뒤까지 잘라옴        [[3, 4, 5, 6]
    

 

- 리스트 변경(재정의) : numbers[Index] = 값

 

- List 관련 Style Guide : "공백없이 붙여쓰기"

Immediately inside parentheses(), brackets[], or braces{}.

Immediately before the open parenthesis that starts the argument list of a function call.

Immediately before the open parenthesis that starts an indexing or slicing.

- Between a trailing comma and a following close parenthesis : omit whitespace

 

- 리스트 함수 : #길이 #추가 #삭제 #정렬 #search #Nested List

- a. [총 길이] return 리스트 길이 : len(list_name)

- b-1. [+] 요소하나 자동추가 : list_name.append(요소) ← "덧붙이다, 첨부하다" 맨 뒤에서 추가됨

- b-2. [++] 요소여럿 자동추가 : list_name.extend([요소들]) ← "늘리다" 맨 뒤에서 추가됨

- b-3. [+] 요소하나 위치지정 삽입 : list_name.insert(index, 요소) ← 기존 요소들은 뒤로 밀려남

셋 다 객체.Method(parameter) 형태의 리스트 메소드

※ 객체란 파이썬에서 사용되는 모든 자료형을 말한다.

- c-1. [-] 위치지정 요소삭제 : del list_name[index] *delete

- c-2. [-] 값지정 요소삭제 : list_name.remove(요소값) *여러 개인 경우, 첫번째 요소만 삭제

- d-1. [정렬 리스트 리턴] : sorted(list_name) * 내림차순:sorted(list_name, reverse=True)

- d-2. [해당 리스트 자체를 정렬] : list_name.sort() * 내림차순:list_name.sort(reverse=True)

sorted()와 .sort()의 차이점 : return값 & 기존 리스트 변화유무

default정렬:오름차순 - reverse=True:내림차순

- d-3. [거꾸로] : list_name.reverse()

- e-1. [값이 있니?] : 값 in list_name → return True or False

- e-2. [값이 어떤 index에 있니?] : list_name.index(값) → return index * 중복시, 최고 앞 쪽 index 하나만 출력

+ Nested list

list_name = [1, 2, 3, [4, 5], 6]

print(list_name[3]) # [4, 5]

② 딕셔너리 활용 (함수⊃Method)

#길이 #추가 #삭제 #목록 #search

a. 길이

- a. [총 쌍의 갯수] return 길이 : len(dict_name)

b. 추가/변경

- b. [추가/변경] : dict_name[key] = value

 

c. 삭제

- c-1. [-] key지정 삭제 : del dict_name[key] *delete

- c-2. [-] 전부삭제 : dict_name.clear()

 

d. 키/값 목록이 필요할 때 ★

- d-1. [key 목록] : dict_name.keys() → 키 목록 dict_keys()객체생성

- d-2. [value 목록] : dict_name.values() → 값 목록 dict_values()객체생성

- d-3. [key, value 목록] : dict_name.items() → (키, 값) 목록 dict_items()객체생성

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}
# 키들의 목록이 필요할 때 → dict_name.keys() : 키 목록 dict_keys()객체생성
# 값들의 목록이 필요할 때 → dict_name.values() : 값 목록 dict_values()객체생성
# 키, 값들의 목록이 필요할 때 → dict_name.items() : (키, 값) 목록 dict_items()객체생성

print(my_family.keys())
# dict_keys(['엄마', '아빠', '아들', '딸'])

print(my_family.values())
# dict_values(['김자옥', '이석진', '이동민', '이지영'])

print(my_family.items())
# dict_items([('엄마', '김자옥'), ('아빠', '이석진'), ('아들', '이동민'), ('딸', '이지영')])

* list는 아니지만, list처럼 사용할 수 있는 해당 객체들의 사용처 : 존재확인 & for의 변수

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

# 활용1. <for 의 변수>
for key in my_family.keys():
    value = my_family[key]
    print(key, value)

for key, value in my_family.items():
    print(key, value)

# 엄마 김자옥
# 아빠 이석진
# 아들 이동민
# 딸 이지영

 

e. search ★

- e-1. [key를 통한 value 호출] : dict_name[key] → 없는 key 입력시 Err

- e-2. [key를 통한 value 반환] : dict_name.get(key) → value반환 & 없는 key 입력시 None 반환

큰 차이 : get()으로는 값 변경불가 & 없는 key 입력

 

- e-3. [key 존재확인] : key in dict_name → True/False

- e-4. [key 존재확인(2)] : key in dict_name.keys() → True/False

- e-5. [value 존재확인] : value in dict_name.values() → True/False

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}
# 활용2. <존재여부가 궁금>
print('딸' in my_family)                 # True
print('이지영' in my_family)              # False

print('딸' in my_family.keys())          # True
print('이지영' in my_family.values())     # True

print(('딸', '이지영') in my_family.items())      # True
print('딸', '이지영' in my_family.items())        # 딸 False
# tuple type는 ()생략가능하지만, 꼭! 해야할 때도 있다.

 

③ 실습문제

- 1. 영어단어장

실습문제
내 답안 - 모범답안

 

- 2. 사전 뒤집기

내 답안 - 모범답안 : 일치 * = 대입 연산자 (assignment operator) 띄어쓰자 

 

- 3. 투표 집계하기

내 답안
모범답안
내가 한 질문, 아직 답변 안 올라옴.

 

⑷ 데이터의 비밀

① 자료형 : 가변형/불변형

[ =(assignment operater)하는 경우, 주소복사 : 두 변수 모두 같은 Data를 Point 함, 새로 만든 변수=Alias:가명 ]

- 변수 is Alias → True : 가리키는 주소가 같으면, return True

- 가변형(mutable) : dict, list

        → 값 변경시, 해당 주소에 있는 값 변경OK

        → 다른 주소에 값을 새로 파서 다른 변수에 할당하고 싶다면? = list(list_name)

- 불변형(immutable) : int, float, bool, string, tuple

        → 값 변경시, 다른 주소에 값을 새로 팜 + 새 주소값을 point함

 

같은 주소를 point하는 x & y (y=Alias)
'int'형은 immutable(불변형)이라, 값 변경시 주소를 새로 판다.

같은 주소를 point하는 x & y (y=Alias)
'list & dict'형은 mutable(가변형)이라, 값 변경시 해당 주소의 값을 변경한다.

왕년겜창틀딱이는 엘리어스 듣자마자 안티엘리어싱 생각나버림

 

② 자료형 : String ≒≠ Tuple

- 문자열(String) : 여러 값[문자]을 저장할 수 있는 자료형

- 인덱스(Index) : 요소의 위치번호

앞에서부터 : 0 → (전체갯수-1)

뒤에서부터 : -(전체갯수) ← -1 번

- 인덱싱(Indexing) :[가리키다] index를 통해, 문자열의 요소를 받아오는 것

- 슬라이싱(slicing) :[자르다] index를 통해, 문자열 중 일부 요소만 잘라오는 것

- For 반복문의 변수 :for 변수 in String

- 가변/불변 : 문자열 immutable VS 리스트 mutable VS 튜플 immutable

- 1자료형 n값 : 문자열 문자만 VS 리스트 다괜찮 VS 튜플 다괜찮

 

#길이 #search #추가/변경/삭제 불가능

a. 길이

- a. [총 길이] return 리스트 길이 : len(string)

b. 검색

- b-1. [값이 있니?] : 값 in string → return True or False

- b-2. [값이 어떤 index에 있니?] : string.index(값) → return index * 중복시, 최고 앞 쪽 index 하나만 출력

- b-3. [값이 어떤 index에 있니?] : string.find(값) → return index * 없을시, -1 VS .index는 Err

- b-4. [값 몇 개 있니?] : string.count(값) → return 해당 문자 중복 갯수

 

③ 실습문제

- 1. 자릿수 합 구하기

내 답안 : 1~1000까지 등차증가하니까 for i in range(1, 1001) !!!!!
모범 답안

 

- 2. 주민등록번호 가리기

실습과제
내 답안 - 모범답안

number[:len(security_number)-4] → number[:-4]

 

# 형변환 List → Str : str = "".join(list)

list_a = ['a', 'b', 'c', 'd', 'e']
print(type(list_a))         # <class 'list'>
print(list_a)               # ['a', 'b', 'c', 'd', 'e']
print(len(list_a))          # 5

# 1. for 와 += 를 사용하여 list 요소를 하나씩 하나씩 붙이기 노가다
str_a = ""                      # list_a는 list type 이지만,
for i in range(len(list_a)):    # list_a의 요소들은 str type!
    str_a += list_a[i]          # 따라서, str+str 연산이 가능함.
print(type(str_a))          # <class 'str'>
print(str_a)                # abcde
print(len(str_a))           # 5

# 2. str(list) → 실패
str_a = str(list_a)
print(type(str_a))          # <class 'str'>
print(str_a)                # ['a', 'b', 'c', 'd', 'e']
print(len(str_a))           # 25

# 3. str = "".join(list) : 가장 간편 ★
str_a = "".join(list_a)
print(type(str_a))          # <class 'str'>
print(str_a)                # abcde
print(len(str_a))           # 5

 

- 3. 팰린드롬

실습과제
나의 답안
모범답안 : right 변수를 따로 생성한 것 빼고 일치
개선건의와 답변
위를 반영한 새 코드
나도 Index [앞, 뒤+1]까지만 알았지, Index[앞, 뒤+1, 방향]은 첨 알게 됨

 

[Keyword]

#list/dict/tuple/string형 #for반복문

- 한 객체에 여러 요소값을 저장할 수 있는 자료형 : Str List Tuple Dict Set

- 리턴 type/address/length, search : type(□) id(□) len(□), A in □

- 순차적(sequential) → [Index]존재 Indexing & Slicing : Str List Tuple

- 비순차적(out of order) : Dict[Key] Set

- 가변형(mutable) : List Dict → 변형/복제 바로 가능 A is alias - True

∴ 요소 수정 : List/Dict[Index/Key] = Value

- 불변형(immutable) : Str Tuple Int Float Bool → 변형/복제시, 다른 주소 필요 ∴ dict의 key로 사용가능

- Str List Tuple Dict Set간 형 변환 자유롭게 : Dict → Dict.keys, values, items → 변환

list.append(val), list.extend(val, val...), list.insert(index, val), list.count(val), list.sort(), list.reverse(), list.index(val), del list[index], list.remove(val), list.pop()

dict.get[key], del dict[key], dict.keys(), dict.values(), dict.items(), dict.clear()

-

- for 루프변수 in str List Tuple Dict Set / range[앞, 뒤+1, 텀]

[Remark]

# Str List Tuple Dict Set간 공/차 비교 및 정리가 필요

 


컴퓨터개론Course

 컴퓨터개론 - 📺   📝 - 🎖수료증

*Link : 📺인강  📝정리노트

 

반응형

블로그의 정보

노력하는 실버티어

노실언니

활동하기