파이썬 1강 파이썬에 대해서, 2강 자료형 (교육 66일차)

SW·2023년 2월 23일
1

📌 파이썬 1강 - 파이썬에 대하여 📌








필요시 All releases를 통한 기존 버전 설치

DOCS : python 설명서 참조


리눅스 설치는 CentOS 7이 아닌 Rocky Linux 8로 진행할 예정...


























설정한 외부 터미널 실행 : Ctrl + F5

배경 화면 설정 단축키 : Ctrl + kt





day01.txt

학습 목표 :
1. 파이썬을 이해하고 설치하고 사용할 수 있다.
2. 컴파일언어와 인터프리터언어를 구분할 수 있다.

o 개인 폴더 생성
여러사람들이 공동으로 사용하는 PC이므로 D: 드라이브에 아래 형식으로 작업 폴더를 생성한다.
D:\ 드라이브에 자신의 파이썬 작업 폴더를 생성한다. (공백없이 작성)
예1) D:\2월파이썬

만약 D:\ 가 없다면 C:\ 드라이브에 자신의 파이썬 작업 폴더를 생성한다.
예2) C:\2월파이썬

o 크롬에서 한글이 깨질 경우
자료실에 올라온 문서가 크롬에서 깨질 경우 이는 utf-8로 인코딩 되어 저장되어 있는 것이므로 크롬에서 utf-8 로 저장된 문서를 볼 경우 아래 프로그램을 설치한다.
설치 후 문서 변환은 마우스 오른쪽 버튼으로 문서의 인코딩을 선택할 수 있다.
https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlmhefphglae

https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=2385#c_2385

프로그래밍 랭귀지 순위
https://www.tiobe.com/tiobe-index/
https://spectrum.ieee.org/top-programming-languages/
https://ko.wikipedia.org/wiki/전기전자기술자협회

o 파이썬 버전
파이썬은 2.x 과 3.x 버전이 있지만 2.x 버전은 2020년 1월 1일부터 공식적으로 종료되었고 이 수업은 3.x 버전으로 진행한다.

컴파일 언어
-전체 소스코드를 기계가 있는 기계어로 몽땅 바꿔서 실행파일로 뽑아내는 언어
-C, C++, C#, Java ...

인터프리터 언어
-전체 소스코드를 한 줄 한줄 해석해서 실행하는 언어
-python, shell script, perl, ruby ..

C/C++ 컴파일러 설치하기
https://cafe.naver.com/linuxmasternet/73

C언어 확장자 : .c
C++언어 확장자 : .cpp
Java언어 확장자 : .java
C# 언어 확장자 : .cs
Python언어 확장자 : .py

-- hello.c --
#include <stdio.h>

int main()
{
    printf("Hello World\n");
    return 0;
}
-- hello.c --

#include <stdio.h>

int main()
{
    int i = 1;

    while(i <= 5)
    {
        printf("%d\n", i);
        i = i + 1;	
    }
return 0;
}

o 파이썬 설치하기
공식 사이트 : http://www.python.org

시작 -> 실행 -> appwiz.cpl
검색 -> 프로그램 추가제거

제어판 -> 프로그램 기능
python 프로그램, Visual studio code 삭제

o 비주얼스튜디오 코드
https://cafe.naver.com/linuxmasternet/856

vscode tutorial
https://cafe.naver.com/linuxmasternet/1245

설치 후 글자와 폰트 크기를 설정하는 방법
https://cafe.naver.com/linuxmasternet/908

한국어, python 연동 -> 소스코드 작성 -> Ctrl + F5 -> 실행된 결과가 화면에 출력된다.

https://cafe.naver.com/linuxmasternet/122

o 파이썬 설정

Json 포맷 (설정파일의 저장은 Json 포맷 형식으로 저장된다.)
https://ko.wikipedia.org/wiki/JSON

외부 터미널 실행
https://cafe.naver.com/linuxmasternet/919

.vscode 폴더

-- launch.json --
{
    // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
    // 기존 특성에 대한 설명을 보려면 가리킵니다.
    // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "externalTerminal"
        }
    ]
}
-- launch.json --

코딩 폰트 설정
https://cafe.naver.com/linuxmasternet/902

VSCode 설정
https://cafe.naver.com/linuxmasternet/908

o 대화형 쉘 사용하기

쉘 : 사용자와 컴퓨터간의 명령어를 해석하는 명령어 해석기

인터렉트브 쉘에서 Hello World! 출력하기
검색 -> cmd -> python을 실행해서 인터렉티브 쉘로 들어간다.

print() : 화면에 문자열을 출력하는 함수
사용 형식 : print("문자열"), print('문자열'), print(변수)

C:\Users\user>py
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World!")
Hello World!

오늘은 파이썬을 처음 배웁니다. 를 화면에 출력하기 위해서는 아래처럼 사용한다.
print("오늘은 파이썬을 처음 배웁니다.")
print('오늘은 파이썬을 처음 배웁니다.')

-- hello.py --
"""
파일명 : hello.py
프로그램 설명 : 파이썬 프로그램 시작하기
"""

print("Hello python!")
-- hello.py --


-- hello.py --
"""
파일명 : hello.py
프로그램 설명 : 파이썬 프로그램 시작하기
"""

print("1. Hello python!")
print("2. Hello python!")
print("3. Hello python!")
print("4. Hello python!")
print("5. Hello python!")
-- hello.py --

o 파이썬 프로그램의 코드 실행 순서
위에서 아래로 내려오면서 실행한다.
왼쪽에서 오른쪽으로 실행한다.

버그 : 벌레 (프로그램 오류)
디버그 : 벌레잡이

디버깅을 하는 이유
1. 논리적인 오류를 잡기 위해서
2. 프로그램을 분석하기 위해서 <--

Break Point(BP)
BP 설정은 분석하고자 하는 실행되는 코드 위치에 설정한다.

프로그램을 디버깅 하는 방법
1. 소스코드를 작성하고 저장한다.
2. 프로그램을 분석하기 위해 BP(Break Point)를 설정한다.
3. 디버그 모드(F5)로 프로그램을 실행한다.
4. 프로그램을 실행하기 위해 단축키(F10, F11)로 실행한다.
5. 프로그램을 실행하면서 프로그램의 흐름을 분석한다.

BP 설정은 실행되는 코드에 반드시 설정한다.
-BP 설정은 공백에 설정하면 안된다. (버전이 업그레이드가 되서 변경되었다.)
-BP 설정은 주석에 설정하면 안된다. (버전이 업그레이드가 되서 변경되었다.)

debug.py 소스코드를 아래처럼 수정하고 디버깅한다.

-- debug.py --
"""
파일명 : debug.py
프로그램 설명 : 디버깅을 이용한 프로그램 분석하기
"""
i = 1

while i <= 5:
    print(i)
    i = i + 1

print('프로그램 종료')    
-- debug.py --

파이썬 소스를 작성할 때는 확장자를 .py로 지정해야 한다.


-- ex01.py --
"""
파일명 : ex01.py
프로그램 설명 : print() 함수를 이용한 문자열 출력하기
"""

# 문자열은 문자가 두 개 이상 모여있으면 문자열이 된다.
# 이 문자열을 만들기 위해서는 "..." or '...' 안에 넣어준다.
print("오늘은 파이썬을 처음 배웁니다.")  # 큰 따옴표
print('오늘은 파이썬을 처음 배웁니다.')  # 작은 따옴표
-- ex01.py --

주석 (설명문)
프로그램에서 프로그래머가 프로그램 코드에 설명을 달아서 알기 쉽게 붙힌 코멘트이다.
파이썬에서 주석을 붙히는 형식 :
-첫 번째 방법 : # ( // )
-두 번째 방법 : ''' ~ ''' (/ ~ /)
-세 번째 방법 : """ ~ """ (/ ~ /)

메뉴 -> 편집을 참고
VScode 단축키 (한 줄) : Ctrl + /
VScode 단축키 (여러 줄) : Ctrl + Shift + A

-- ex02.py --
"""
파일명 : ex02.py
프로그램 설명 : 변수를 이용한 문자열 출력하기
"""

"""
변수 : 데이터(값)를 저장할 수 있는 공간이다.
이 공간이 메모리(RAM)에 생성된다.
변수에 데이터를 저장할 수 있다.
저장된 데이터는 얼마든지 수정될 수 있다.
형식 : 
변수명 = 값
변수명 = 변수명
변수명 = 수식
변수명 = 함수

변수의 메모리 주소값을 출력하는 함수 :
id(변수명)
"""

name = '홍길동'  # name = "홍길동"과 동일하다.
name2 = name
print(name)  # name 변수에 저장된 값을 출력한다.
print(name2) # name2 변수에 저장된 값을 출력한다.

# 돌아가는 다트, 고정된 다트
# ASLR 주소 랜덤화 기법에 의해서 실행할때 마다 주소가 바뀐다.
# 2,147,483,647 + 1 => -2,147,483,648
print(id(name))   # 2539209408848
print(id(name2))  # 2539209408848
print(hex(id(name)))
print(hex(id(name2)))
print(hex(10))
print(hex(15))
-- ex02.py --

앞에 0이 생략
0x16098dfd6b0
0x0000016098dfd6b0

-- ex03.py --
"""
파일명 : ex03.py
프로그램 설명 : print() 함수의 출력 방법
"""

# print() 함수의 출력방법
# 첫 번째 : print(변수명,변수명,변수명 ...)
# 두 번째 : print(값, 값, ...)

name = '홍길동' 
number = 3

# sep 변수에 저장된 값은 변수와 변수를 구분할 수 있는 공백이 저장되어 있다.
print(name, number) # sep 변수의 기본값은 공백
print(name, number, sep = ' ') # sep 변수의 기본값은 공백
print(name, number, sep = '-')

print(number,number, sep=' ') # sep 변수의 기본값은 공백

# sep의 기본값을 변경하기 위해서는 아래처럼 사용한다.
print(name, name, sep='*****')      # sep 변수의 값 변경
print(number, number, sep='-----')  # sep 변수의 값 변경
-- ex03.py --

실습> 화면에 아래와 같은 문자열을 출력하시오.

변수를 활용해서 출력하기

1. 파일명 : ex04.py
2. 출력내용 :
날짜 : 2023년 2월 15일
날씨 : 맑음
오후 : 더 맑음
파이썬 화이팅!

-- ex04.py --
"""
파일명 : ex04.py
프로그램 설명 : 문자열 출력하기
"""

today = '날짜 : 2021년 10월 23일'
weather = '날씨 : 맑음'
message = '파이썬 화이팅!'
print(today)
print(weather)
print('오후 : 더 맑음')
print(message)

# \r, \n 확인
print('Hello\r', end='')
print('\n', end='')
print(' Python!')
print('프로그램 종료')
-- ex04.py --

변수 : 데이터(값)를 저장할 수 있는 공간이다.
이 공간이 메모리(RAM)에 생성된다.
변수에 데이터를 저장할 수 있다.
저장된 데이터는 얼마든지 수정될 수 있다.
형식 : 변수명 = 값

o 변수명을 만드는 규칙
변수명은 사용자가 마음대로 생성할 수 있지만 여기에는 아래와 같은 약간의 제약이 따른다.
변수명을 만들때는 의미있는 이름을 부여해야 한다.
변수명을 만들때는 파이썬에서 제공되는 예약어(if, while ...)는 사용할 수 없다.
변수명은 특수문자는 사용할 수 없습니다.
변수명은 대소문자, 숫자, 를 이용해서 만들 수 있다.
변수명은
를 사용할 수 있고 _로 시작할 수 있다.
변수명은 숫자로 시작할 수 없다.
변수명은 대소문자를 사용할 수 있다.
변수명은 대소문자를 구분한다. (name, Name, nAme 은 모두 다른 변수)

변수명을 의미있는 이름으로 작성하면 프로그램의 흐름을 이해할 수 있다.

이미 만들어진 함수, 클래스로 변수를 생성하면 안된다.
-키워드처럼 에러가 발생하지 않는다.

변수명의 사용 예
test$@ = 1 : X <-- 특수문자 $와 @는 변수명으로 사용할 수 없다.
123abc = 10 : X <-- 변수명은 숫자로 시작할 수 없다.
abc123 = 10 : O <-- 사용 가능
name = "홍길동" : O <-- 사용 가능하지만 아래의 Name 변수와 다르다
Name = "홍길순" : O <-- 사용 가능하지만 위의 name 변수와 다르다
messagestring = "Hello" : O <-- 는 사용할 수 있다.
message-string = "Hello" : X
name = "홍길동" : O <-- 는 변수명으로 사용할 수 있고 _로 시작할 수 있다.
if = 10 : X <-- 예약어는 변수명으로 사용할 수 없다.
while = 20 : X <-- 예약어는 변수명으로 사용할 수 없다.
if1 = 10 : O <-- 예약어가 아니므로 변수명으로 사용할 수 있다.
while1 = 20 : O <-- 예약어가 아니므로 변수명으로 사용할 수 있다.

-- ex05.py --
"""
파일명 : ex05.py
프로그램 설명 : 변수명을 만드는 규칙
"""

# 변수는 대소문자, _, 숫자
# test$@ = 1   # 특수문자 X
# 123abc = 10  # 숫자로 시작할 수 없다. X
# abc123 = 10    # 가능
# name = "홍길동"  # 가능
# Name = "홍길순"  # 가능
# print(abc123, name, Name)
message_string = "Hello"  # 가능
# message-string = "Hello"  # 불가능
_name = "홍길동"  # 가능
# if = 10   # 불가능
# while = 20  # 불가능
# print = 1  # 이미 존재하는 함수명으로 변수를 사용하면 안된다.
# print(print)

# 파이썬에서 키워드를 확인하는 방법
import keyword
print(keyword.kwlist)
-- ex05.py --
-- 변수명표기법.py --
"""
파일명 : 변수명표기법.py
프로그램 설명 : 변수명 표기법
"""

# 변수명 표기법
# 1. 카멜(Camel) 표기법 
# 낙타의 등을 본따서 만든 표기법
# e.g. studentName = '홍길동'
#
# 2. 스네이크(Snake) 표기법
# 바닥을 기어가는 뱀의 모습으로 만든 표기법
# e.g. student_name = '홍길동'

studentName1  = '홍길동'
student_name2 = '김길동'
print(studentName1, student_name2)
-- 변수명표기법.py --

-- errorTest.py --
"""
파일명 : errorTest.py
프로그램 설명 : print() 함수와 에러 구분하기
"""

# print() : 문자열이나 값을 출력할 때 사용하는 함수다.
# 함수 : 명령어
# 문자열 : 문자들이 여러개 모여있는 것을 말한다.
# 문자열을 사용할 때는 따옴표(작은,큰)로 묶어서 사용한다.
# 형식 : print(변수), print(문자열)
# print('오늘은 파이썬을 배웁니다.')
# print("오늘은 파이썬을 배웁니다.")

# 파이썬에 자주 접하는 에러 확인
# 1. 문법이 틀린 경우
# SyntaxError: 에러의 원인이 출력된다.
# print(Hello world!)
# print("Hello world!")
#
# 2. 들여쓰기가 잘못된 경우
# IndentationError: 에러의 원인이 출력된다.
#  print("Hello world!")
#
# 3. 이름이 잘못된 경우
# NameError: 에러의 원인이 출력된다.
# prin("Hello world!")
-- errorTest.py --

실습> print() 함수의 출력 형식

>>> print(1,2,3)
1 2 3
>>> print('%d %d %d' %(1,2,3))  # %용법
1 2 3
>>> print('{} {} {}'.format(1,2,3))  # format 메소드(메서드) 용법 
1 2 3
>>> print(f'{1} {2} {3}')  # f-string 용법
1 2 3
>>> a = 1
>>> b = 2
>>> c = 3
>>> print(a,b,c)
1 2 3
>>> print('%d %d %d' %(a,b,c))
1 2 3
>>> print('{} {} {}'.format(a,b,c))
1 2 3
>>> print(f'{a} {b} {c}')
1 2 3
>>> print('{a} {b} {c}')
{a} {b} {c}

실습> 아래 조건에 만족하는 프로그램을 작성하시오.

-- 조건 --
1. 파일명 : ex06.py
2. 각 변수명에 값을 대입한 후 화면에 출력한다.

-변수 name : 홍길동
-변수 kor : 100
-변수 eng : 90
-변수 math : 80

3. 각 변수를 출력한 결과

이름 : 홍길동
국어점수 : 100
영어점수 : 90
수학점수 : 80

4. 변수를 출력하는 방법

>>> i = 1
>>> print(i)
1
>>> print("%d" %i)
1
>>> print("{}".format(i))
1
>>> print(f"{i}")
1

>>> msg = "안녕하세요"
>>> print(msg)
안녕하세요
>>> print("%s" %msg)
안녕하세요
>>> print("{}".format(msg))
안녕하세요
>>> print(f"{msg}")
안녕하세요
-- 조건 --

-- ex06.py --
""" 
파일명 : ex06.py
프로그램 설명 : 변수의 값 출력하기
"""

# 값 입력 부분
# 형식 : 변수명 = 값
name = '홍길동'
kor  = 100
eng  = 90
math = 80

# 값 출력 부분
# 변수 출력 용법으로 출력한다.
# 형식 : print(문자열,변수)
print("이름 :", name)
print("국어점수 :", kor)
print("영어점수 :", eng)
print("수학점수 :", math)
print(name, kor, eng, math)  # 홍길동 100 90 80
print()  # 엔터

# % 용법으로 출력한다.
# 형식 : print('서식문자열' %(변수))
print("이름 : %s" %name)
print("국어점수 : %d" %kor)
print("영어점수 : %d" %eng)
print("수학점수 : %d" %math)
print("%s %d %d %d" %(name,kor,eng,math))  # 홍길동 100 90 80
print()  # 엔터

# format() 메소드(함수) 용법으로 출력한다.
# 형식 : print('{}'.format(변수))
print("이름 : {}".format(name) )
print("국어점수 : {}".format(kor))
print("영어점수 : {}".format(eng))
print("수학점수 : {}".format(math))
print("{} {} {} {}".format(name,kor,eng,math) )
print("{3} {1} {2} {0}".format(math,kor,eng,name) )
print()  # 엔터

# f-string 용법으로 출력한다.
# 형식 : print(f'{변수명}')
print(f"이름 : {name}")
print(f"국어점수 : {kor}")
print(f"영어점수 : {eng}")
print(f"수학점수 : {math}")
print(f"{name} {kor} {eng} {math}")
print()  # 엔터
-- ex06.py --


'\n' : 엔터 (new line)

-- printTest.py --
"""
파일명 : printTest.py
프로그램 설명 : print() 함수의 다양한 사용법
"""

# print() 함수는 변수나 문자열을 화면에 출력하는 함수이다.
# 형식 : print(value, ...)
# 형식 : print(value, sep=' ')
# 형식 : print(value, end='\n')
# print() 함수의 기본값 
# sep 변수 : ' '  <-- 공백
# end 변수 : '\n' <-- 엔터


i1 = 1
i2 = 2
i3 = 3
i4 = 4
i5 = 5

# 출력방식 4가지를 이용해서 아래처럼 출력한다.
# i1 변수 : 1 입니다.
print('i1 변수 :', i1, '입니다.')
print('i1 변수 : %d 입니다.' %i1)
print('i1 변수 : {} 입니다.'.format(i1))
print(f'i1 변수 : {i1} 입니다.')
print()  # end 변수에 \n가 있으므로 엔터를 의미한다.

# 출력방식 4가지를 이용해서 아래처럼 출력한다.
# 1 2 3 4 5 
print(i1,i2,i3,i4,i5)
print('%d %d %d %d %d' %(i1,i2,i3,i4,i5))
print('{} {} {} {} {}'.format(i1,i2,i3,i4,i5))
print(f'{i1} {i2} {i3} {i4} {i5}')
print()  # 엔터

# 출력방식 4가지를 이용해서 아래처럼 출력한다.
# i1=1, i2=2, i3=3
print('i1=',i1,', i2=',i2, ', i3=',i3, sep='')
print('i1=%d, i2=%d, i3=%d' %(i1,i2,i3))
print('i1={}, i2={}, i3={}'.format(i1,i2,i3))
print(f'i1={i1}, i2={i2}, i3={i3}')

# print() 함수의 기본값 
# sep 변수 : ' '  <-- 공백
# end 변수 : '\n' <-- 엔터
# 기본값을 변경하는 형식 : 
# print('....', sep='')  <-- 공백을 제거
# print('....', end=' ') <-- \n -> 공백으로 변경
# print('....', end='')  <-- \n를 제거
print('1 2 3', end=' ')  # 1 2 3 4 5 6
print('4 5 6')
print(i1, i2, i3, sep='-')  # 1-2-3
-- printTest.py --

-- ex07.py --
"""
파일명 : ex07.py
프로그램 설명 : 변수의 값 출력하기
"""

# 첫 번째 print() : 오늘은 
# 두 번째 print() : 토요일 입니다.
# 결과 : 오늘은 토요일 입니다.
# print("오늘은", end=' ')
# print("토요일 입니다.")

# hp1 = "010"
# hp2 = "1234"
# hp3 = "5678"
# print(hp1, hp2, hp3, sep='-')  # 010-1234-5678

# 변수에 값을 저장하지 않고 출력하는 방법
# print("오늘은 토요일입니다.")
# print("안녕하세요.\n반갑습니다.")  # \n (엔터를 의미하는 문자)

# 변수에 값을 저장하기 출력하는 방법
# 변수명은 한글도 가능하다.
# 메세지 = "오늘은 토요일입니다."
# print(메세지)

name = "홍길동"
kor  = 90
eng  = 95
math = 80

# print() 함수를 4번 호출하는 것보다는 1번 호출하는 것이
# 프로그램을 좀 더 효율적으로 실행하는 것이다.

# % 용법으로 출력한다.
# print("이름 : %s" %name)
# print("국어점수 : %d" %kor)
# print("영어점수 : %d" %eng)
# print("수학점수 : %s" %math)
# print()  # 엔터

# 
# print("이름 : %s\n" 
#       "국어점수 : %d\n" 
#       "영어점수 : %d\n" 
#       "수학점수 : %s" %(name,kor,eng,math))
# print()  # 엔터

# format() 메소드 용법으로 출력한다.
# index 번호는 0부터 시작한다.
# print("이름 : {}\n" 
#       "국어점수 : {}\n" 
#       "영어점수 : {}\n" 
#       "수학점수 : {}".format(name,kor,eng,math))

# f-string 용법으로 출력한다.
print(f"이름 : {name}\n" 
      f"국어점수 : {kor}\n" 
      f"영어점수 : {eng}\n" 
      f"수학점수 : {math}")
-- ex07.py --

📌 파이썬 2강 - 자료형 📌






















파일명 : day02.txt

학습 목표 :
파이썬 프로그래밍에서 사용되는 자료형의 종류를 파악할 수 있다.

###########
자료형
###########

파이썬에서 사용되는 자료형
-정수, 실수, 문자열, 리스트, 튜플, 딕셔너리, 셋, 불리언

파이썬에서는 컬렉션 데이터 유형이 4가지가 존재한다.
컬렉션이란 여러 개의 값을 하나로 묶어서 저장할 수 있는 데이터 구조를 의미한다.

1. list : 순서가 있고 값을 변경 가능하고 반복할 수 있고 중복된 데이터를 허용한다.
-Sequence(Ordered), Mutable, Iterable, duplicate
2. tuple : 순서가 있고 값을 변경할 수 없고 반복할 수 있고 중복된 데이터를 허용한다.
-Sequence(Ordered), IMMutable, Iterable, duplicate
3. dictionary : 순서가 없고 키의 이름은 변경할 수 없지만 값을 변경할 수 있고 반복할 수 있고
키는 중복될 수 없지만 데이터는 중복을 허용한다.
-UnOrdered, Key(IMMutable), Value(Mutable), Iterable
-Key(No duplicate), Value(duplicate)
4. set : 순서가 없고 값을 변경할 수 없고 반복할 수 있고 중복된 데이터를 허용하지 않는다.
-UnOrdered, IMMutable, Iterable, No duplicate

list 자료형 (가변형)
순서가 있고 값을 변경 가능하고 반복할 수 있고 중복된 데이터를 허용한다.
-Sequence(Ordered), Mutable, Iterable, duplicate

리스트는 자료를 하나로 모아서 묶어 놓은 자료형이다.
항목은 값이나 변수가 올 수 있다.
형식 :
변수명 = [항목, 항목 ...]
변수명 = list([항목, 항목 ...])
변수명 = list((항목, 항목 ...))

리스트는 Mutable 타입의 객체이므로 데이터를 추가/수정/삭제할 수 있다.
Mutable : 변할 수 있는

-- exList.py --
"""
파일명: exList.py
프로그램 설명: 리스트 자료형
"""
# 변수 l에 리스트 형식으로 정수 1 ~ 5까지 저장한다.
l = [1, 2, 3, 4, 5]
print(l, type(l))  # [1, 2, 3, 4, 5] <class 'list'>

# 인덱싱
# 인덱스 번호로 항목을 출력하는 방법
# 형식 : 변수명[인덱스번호]
# print(l[2], l[-3])  # 3  --> [2]  [-3] <--
# print(l[0], l[-5])  # 1  --> [0]  [-5] <--
# print(l[4], l[-1])  # 5  --> [4]  [-1] <--

# 멤버쉽 연산
# 종류 : in , not in
# in : 값이 있으면 True, 없으면 False
# not in : 값이 없으면 True, 있으면 False
# 연산의 결과 : True, False
# 형식1 : 값 in 변수명
# 형식2 : 값 in 값
# 형식3 : 변수명 in 변수명
# 형식4 : 변수명 in 값

# l변수에 2가 존재합니까 ?
print(2 in l)  # True
# l변수에 7이 존재하지 않습니까 ?
print(7 not in l)  # True

# 크기 함수
# 크기 함수를 이용해서 자료의 길이(개수)를 확인할 수 있다.
# 리스트에서 크기 함수를 사용하면 항목의 개수를 구한다.
# 형식 : 함수명(인수),  len(변수명)
# 리턴값 : 변수의 개수
# 인수 : 입력값, 리턴값 : 출력값
print(len(l))  # 5

# 슬라이싱
# 슬라이싱 : 범위를 지정해서 데이터를 추출하는 기법이다.
# 형식 : 변수명[시작숫자:끝숫자]
# 여기서 시작숫자와 끝숫자는 index 번호를 의미한다.
# 범위 : 시작숫자 ~ 끝숫자 -1 까지
# 시작숫자 생략 : 처음부터
# 끝숫자 생략 : 시작숫자 ~ 끝까지

#  +-- [-5]
#  |  +-- [-4]
#  |  |  +-- [-3]
#  |  |  |  +-- [-2]
#  |  |  |  |  +--[-1]
#  |  |  |  |  |
# [1, 2, 3, 4, 5]
#  |  |  |  |  |
#  |  |  |  |  +--[4]
#  |  |  |  +-- [3]
#  |  |  +-- [2]
#  |  +-- [1]
#  +-- [0] 
print(l[1:3], l[-4:-2])  # 2 3
print(l[2:], l[-3:])     # [3, 4, 5]

# 반복성 (Iterable)
# 반복할 때 사용하는 형식 : 제어문을 사용한다.
# 제어문은 프로그램의 흐름을 제어할 때 사용한다.
# for문
# 형식 : 
# for 변수 in 리스트:
#     실행문1
# else:
#     실행문2

# for문을 이용해서 l변수에 저장된 1 ~ 5까지 출력하기
for value in l:
    print(value)
else:
    print('for문 종료')


l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for value in l:
    print(f"2 x {value} = {2*value}")
else:
    print('for문 종료')


# + 연산자
# + 연산자를 이용해서 리스트끼로 더할 수 있다.
# 형식 : 
# 리스트1 + 리스트2
# [1,2,3,4,5] + [10,20,30,40,50]
# [1, 2, 3, 4, 5, 10, 20, 30, 40, 50]
# 임시적으로 + 한 것이고
# 영구적으로 + 하려면 변수에 저장해야 한다.
print(l + [10, 20, 30, 40, 50])  # 임시적으로 + 한 것
print(l)  # [1, 2, 3, 4, 5]
l += [10, 20, 30, 40, 50]  # 영구적으로 + 한 것, l = l + [10, 20, 30, 40, 50]
print(l)  # [1, 2, 3, 4, 5, 10, 20, 30, 40, 50]

# * 연산자
# * 연산자를 이용해서 리스트를 반복한다.
# 형식 : 리스트변수명 * 정수값
# [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
# 임시적으로 * 한 것이고
# 영구적으로 * 할려면 변수에 저장해야 한다.
print(l * 3)  # 임시적 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
print(l)  # [1, 2, 3, 4, 5]
l *= 3    # 영구적 l = l * 3
print(l)  # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

# 리스트는 
# +, * 연산은 가능하지만
# -, / 연산은 불가능하다. 
# print(l - [1,2,3])
# print(l / [1,2,3])
-- exList.py --

-- exDebug.py --
"""
파일명: exDebug.py
프로그램 설명: 파이썬 디버깅 분석하기
BP(Break Point): 프로그램을 실행할 때 멈추게 하는 기능
BP 설정 후 디버그 모드로 실행해야 디버깅이 된다.
파이참: Shift + F9 => F8, F7
VScode: F5 => F10, F11
"""

a = 1
b = 2
hap = a + b
print(a, b)  # 1 2
print(hap) # 3
-- exDebug.py --

-- exList2.py --
"""
파일명: exList2.py
프로그램 설명: 리스트 자료형에 데이터를 넣는 방법
"""

# 다양한 형태의 리스트 생성 방법
a = []  # 빈 리스트
b = [1,2,3,4,5]  # 정수
c = [1.2, 2.5, 3.15]  # 실수
d = ['홍길동', '고길동', '김길동']  # 문자열
e = [1, 2.5, '홍길동']  # 정수, 실수, 문자열을 섞어서 넣을 수 있다.
f = [1, 2.5, ['홍길동', 2022]]
#   f[0] f[1] f[2][0]  f[2][1]
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(f[2][0])  # 홍길동

# 리스트는 값을 변경할 수 있다.
l = [1,2,3,4,5]
print(l[0])  # 1
l[0] = 100
print(l[0])  # 100

# 문자열은 값을 변경할 수 없다.
# 문자열은 값을 변경할 수 없는 불변형 자료형이다.
name = "James"
print(name[0])  # J
# name[0] = 'A'   # 에러가 나므로 주석처리 했음.
# print(name[0])  # 

print('프로그램 종료')
-- exList2.py --

튜플은 리스트보다 속도면에서 빠르고 메모리를 적게 차지한다.

튜플은 리스트처럼 자료를 하나로 모아서 묶어 놓은 자료형이다.
튜플은 리스트처럼 추가,삽입,삭제,변경할 수 없는 불변형 자료형이다.
상수이므로 리스트하고 완전 반대라고 생각하면 된다.
형식 : 
변수명 = (항목, 항목 ...)
변수명 = 항목, 항목, ...
변수명 = tuple([항목, 항목 ...])

-- exTuple1.py --
"""
파일명 : exTuple1.py
프로그램 설명: 튜플 자료형
"""

# 변수 t에 튜플 형식으로 정수 1 ~ 5까지 저장한다.
t = (1, 2, 3, 4, 5)
# t = 1,2,3,4,5
# t = tuple([1,2,3,4,5])
# t = 1,  # t = (1,)
print(t, type(t))

# 튜플은 리스트와 동일한 특징을 가지고 있다.
# 인덱스, 멤버쉽 연산, 크기 함수, 슬라이싱, 반복성, + 연산자, * 연산자
# 여기서는 아래에는 인덱싱, 반복성, + 연산자, * 연산자만 사용한다.


# 인덱싱
# 인덱스 번호로 문자를 출력하는 방법
# 형식 : 변수명[인덱스번호]
print(t[2], t[-3])  # 3  --> [2]  [-3] <--
print(t[0], t[-5])  # 1  --> [0]  [-5] <--
print(t[4], t[-1])  # 5  --> [4]  [-1] <--

# 반복성 (Iterable)
# 반복할 때 사용하는 형식 : 제어문을 사용한다.
# 제어문은 프로그램의 흐름을 제어할 때 사용한다.
# for문
# 형식 : 
# for 변수 in 튜플:
#     실행문1
# else:
#     실행문2

# for문을 이용해서 t변수에 저장된 1 ~ 5까지 출력하기
for value in t:
    print(value)
else:
    print('for문 종료')

# + 연산자
# + 연산자를 이용해서 튜플끼로 더할 수 있다.
# 형식 : 
# 튜플1 + 튜플2 
# 임시적으로 + 한 것이고
# 영구적으로 + 할려면 변수에 저장해야 한다.
print(t + (10,20,30,40,50))  # (1, 2, 3, 4, 5, 10, 20, 30, 40, 50)
t += (10,20,30,40,50)  # t = t + (10,20,30,40,50)
print(t)

# * 연산자
# * 연산자를 이용해서 튜플을 반복한다.
# 형식 : 리스트변수명 * 정수값
# 임시적으로 * 한 것이고
# 영구적으로 * 할려면 변수에 저장해야 한다.
print(t + 3)  # (1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
t *= 3    # t = t * 3 와 동일
print(t)  # (1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)

# 튜플은 값을 넣으면 수정할 수 없다.
# 단 편법으로 값을 새롭게 만들어서 t 변수에 저장할 수 있다.
t = (1,2,3,4,5)
# t[0] = 100  # 에러 (수정 X)

a = (100,)  # a = (100) 튜플이 아니고 int이다.
t = a + t[1:]
print(t)  # (100, 2, 3, 4, 5)
-- exTuple1.py --

-- exTuple2.py --
"""
파일명 : exTuple2.py
프로그램 설명: 튜플 자료형에 에 데이터를 넣는 방법
"""

# a = (1,2,3,4,5)
# b = (1.2, 2.1, 3.14)
# c = ('홍길동', '고길동', '김길동')
# d = ((1,2,3),(4,5,6))
# e = (1, 2.3, '홍길동')
# print(a)
# print(b)
# print(c)
# print(d)
# print(e)


a = (1,2,3,4,5)
b = (1.2, 2.1, 3.14)
c = ('홍길동', '고길동', '김길동')
d = ((1,2,3),(4,5,6))
e = (1, 2.3, '홍길동')

# a ~ e 까지 변수를 tupleData 변수에 저장한다.
tupleData = (a,b,c,d,e)

# 반복적으로 돌려서 출력한다.
for value in tupleData:
    print(value)

-- exTuple2.py --

딕셔너리
순서가 없고 키의 이름은 변경할 수 없고 값은 변경할 수 있다.
키는 중복될 수 없지만 데이터는 중복을 허용한다.
- UnOrdered, Key(IMMutable), Value(Mutable), Iterable
- Key(No duplicate), Value(duplicate)

딕셔너리는 키와 값을 쌍으로 가지고 자료를 하나로 모아서 묶어 놓은 자료형이다.
형식 : 
변수명 = {'키':값, '키':값 ...}
변수명 = dict(키 = 값, 키 = 값 ...)

딕셔너리의 키는 문자열과 숫자로 구성할 수 있지만 주로 문자열로 key를 만든다.


-- exDict1.py --
"""
파일명 : exDict1.py
프로그램 설명: 딕셔너리 자료형
"""

# d 변수에 1 ~ 5까지 저장한다.
d = {'a':1, 'b':2, 'c':3, 'z':4, 'y':5 }
print(d['a'])  # 1
print(d['y'])  # 5


# 딕셔너리는 Sequence 타입의 객체가 아니므로 순서를 가지고 있지 않다.
# 그러므로 리스트나, 튜플처럼 index인 변수명[0] 처럼 값에 접근할 수 없다.
# 편법을 쓰면 가능하다. 키를 숫자로 지정하면 된다.
# print(d[0])  # KeyError: 0

dictData2 = {0:1, 1:2, 2:3, 3:4, 4:5}
print(dictData2, type(dictData2))  # {0: 1, 1: 2, 2: 3, 3: 4, 4: 5} <class 'dict'>
print(dictData2[0])  # key를 index 처럼 사용할 수 있다. (비추)


# 딕셔너리에 저장된 데이터에 접근하기 위해서는 키로 접근해야 한다.
# 형식 : 변수명['키'], 변수명[변수]
# 변수에 방을 번호(리스트, 튜플)로 표현하는 것이 아니라 이름(딕셔너리)으로 표현한다.
print(d['a'])  # 변수명['키'] 1
a = 'z'
print(d[a])  # 변수명[변수] 4

# 변수를 이용하는 방법
a = 'a'
b = 'b'
c = 'c'
d = 'd'
e = 'e'
dictData = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
print(dictData[a])  # 1 변수 a에 저장된 값이 키가 된다.
print(dictData[b])  # 2 변수 b에 저장된 값이 키가 된다.
print(dictData[c])  # 3 변수 c에 저장된 값이 키가 된다.
print(dictData[d])  # 4 변수 d에 저장된 값이 키가 된다.
print(dictData[e])  # 5 변수 e에 저장된 값이 키가 된다.


# 변수를 이용하는 방법
dictData = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}

# 변수를 이용하는 방법
key = ['a', 'b', 'c', 'd', 'e']
print(dictData[key[0]])  # 1 변수 key[0]에 저장된 값이 키가 된다.
print(dictData[key[1]])  # 2 변수 key[1]에 저장된 값이 키가 된다.
print(dictData[key[2]])  # 3 변수 key[2]에 저장된 값이 키가 된다.
print(dictData[key[3]])  # 4 변수 key[3]에 저장된 값이 키가 된다.
print(dictData[key[4]])  # 5 변수 key[4]에 저장된 값이 키가 된다.


# 반복성
# 딕셔너리 자료형은 반복성을 가지고 있으므로 for문으로 돌릴 수 있다.
dictData = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}

for value in dictData:
    print(value, type(value))

# key 변수에 저장된 키의 값을 이용해서 값을 출력한다.
for key in dictData:
    print(dictData[key]) 

# 학생의 정보를 저장하는 변수를 사전 자료형으로 생성한다.
# 저장되는 값: 이름, 핸드폰, 생일
# student = ('홍길동', '010-1111-2222', '12월25일')
student = {'name':'홍길동', 'phone':'010-1111-222', 'birth': '12월25일'}
print(student['name'])
print(student['phone'])
print(student['birth'])
print()  # 엔터
for key in student:
    print(student[key])
-- exDict1.py --

set 자료형 (불변형)
순서가 없고 값을 변경할 수 없고 반복할 수 있고 중복된 데이터를 허용하지 않는다.
- UnOrdered, IMMutable, Iterable, No duplicate 

셋은 집합 자료형이다.
중복값을 허용하지 않는다.
불변형 객체이므로 저장된 값을 변경할 수 없다.
저장된 값은 순서가 지정되지 않아서 인덱스로 접근할 수 없다.
항목은 값이나 변수가 올 수 있다.
형식 :
변수명 = { 항목, 항목 ... }
변수명 = set()
변수명 = set([항목, 항목 ...])
변수명 = set((항목, 항목 ...))
변수명 = set({항목, 항목 ...})
변수명 = {}  <-- {}   dictionary 자료형을 생성한다. 

-- exSet1.py --
"""
파일명 : exSet1.py
프로그램 설명 : set 자료형
"""

listData = [1,2,3,4,5,5,5]
setData = {1,2,3,4,5,5,5}
print(listData)                # [1, 2, 3, 4, 5, 5, 5]
print(setData, type(setData))  # {1, 2, 3, 4, 5} <class 'set'>
setData2 = set(listData)       # {1, 2, 3, 4, 5}
print(setData2)

# 멤버쉽 연산
# 종류 : in , not in
# in : 값이 있으면 True, 없으면 False
# not in : 값이 없으면 True, 있으면 False
# 연산의 결과 : True, False
# 형식1 : 값 in 변수명
# 형식2 : 값 in 값
# 형식3 : 변수명 in 변수명
# 형식4 : 변수명 in 값

s = { 1,2,3,4,5}
# s변수에 2가 존재합니까 ?
print(2 in s)  # True
# s변수에 7이 존재합니까 ?
print(7 in s)  # False
# s변수에 7이 존재하지 않습니까 ?
print(7 not in s)  # True

# 크기 함수
# 크기 함수를 이용해서 자료의 길이(개수)를 확인할 수 있다.
# 리스트에서 크기 함수를 사용하면 항목의 개수를 구한다.
# 형식 : 함수명(인수),  len(변수명)
# 리턴값 : 변수의 개수
# 인수 : 입력값, 리턴값 : 출력값
print(len(s))  # 5


# 반복성 (Iterable)
# 반복할 때 사용하는 형식 : 제어문을 사용한다.
# 제어문은 프로그램의 흐름을 제어할 때 사용한다.
# for문
# 형식 : 
# for 변수 in 셋:
#     실행문1
# else:
#     실행문2

# for문을 이용해서 s변수에 저장된 1 ~ 5까지 출력하기
for value in s:
    print(value)
else:
    print('for문 종료')

-- exSet1.py --

-- exSet2.py --
"""
파일명 : exSet2.py
프로그램 설명 :  set 자료형 
"""

# 데이터 추가 (1개)
# 형식 : 
# 변수명.add(값)
a = {1,2,3,4,5}
print(a)  # {1, 2, 3, 4, 5}
a.add(6)  # 6 추가
print(a)  # {1, 2, 3, 4, 5, 6}
# a.add(7,8,9)  # add()는 1개만 추가할 수 있다.

# 데이터 추가 (여러 개)
# 형식 :
# 변수명.update(값)
# iter(1)

# 데이터 삭제
# 형식 : 
# 변수명.remove(값)
# 변수명.pop()
a.remove(9)  # 9를 삭제한다.
print(a)     # {1, 2, 3, 4, 5, 6, 7, 8}
a.pop()
print(a)  # {2, 3, 4, 5, 6, 7, 8}
a.pop()
print(a)  # {3, 4, 5, 6, 7, 8}

# set은 iterable 한 객체이므로 for문으로 값을 반복해서 출력할 수 있다.
# for문 반복
print(iter(a))  # <set_iterator object at 0x000001CD8867F080>

for i in a:  # 3 4 5 6 7 8
    print(i)

setData1 = {1,2,3,4,5}
setData2 = {1,7,2,8,3}

# 교집합
# 형식 : 
# 연산자를 이용하는 방법 : 변수1 & 변수2
# 메소드를 이용하는 방법 : 변수1.intersection(변수2)
print("교집합", setData1 & setData2)  # 교집합 {1, 2, 3}
print("교집합", setData1.intersection(setData2))  # 교집합 {1, 2, 3}

# 합집합
# 형식 : 
# 연산자를 이용하는 방법 : 변수1 | 변수2
# 메소드를 이용하는 방법 : 변수1.union(변수2)
print("합집합", setData1 | setData2)  # {1, 2, 3, 4, 5, 7, 8}
print("합집합", setData1.union(setData2))  # {1, 2, 3, 4, 5, 7, 8}

# 차집합
# 형식 : 
# 연산자를 이용하는 방법 : 변수1 - 변수2
# 메소드를 이용하는 방법 : 변수1.difference(변수2)
print("차집합", setData1 - setData2)  # 차집합 {4, 5}
print("차집합", setData1.difference(setData2))  # 차집합 {4, 5}

# listData1의 중복값을 제거하기 위해서 set을 사용한다.
listData1 = [1,2,3,1,2,3,3,3,3,4,4]
listData2 = set(listData1)
print(listData1)  # [1, 2, 3, 1, 2, 3, 3, 3, 3, 4, 4]
print(listData2)  # {1, 2, 3, 4}
listData1 = list(listData2)
print(listData1)  # [1, 2, 3, 4]
-- exSet2.py --

-- exBool.py --
"""
파일명 : exBool.py 
프로그램 설명 :  bool 자료형 
"""

# 불리언 자료형은 참과 거짓을 나타내는 자료형이다.
# True : 참
# False : 거짓

print(3 > 5)             # False
print(10 < 20)           # True
print(1 in [1,2,3,4,5])  # True
print(7 in [1,2,3,4,5])  # False
-- exBool.py --

-- 이터러블테스트.py --
"""
파일명 : 이터러블테스트.py 
프로그램 설명 : 반복 테스트
"""

# a = 10       # 정수 10 <class 'int'>
# b = 3.14     # 실수 3.14 <class 'float'>
# c = 'Hello'  # 문자열 Hello <class 'str'>
# d = [1,2,3]  # 리스트 [1, 2, 3] <class 'list'>
# e = (1,2,3)  # 튜플 (1, 2, 3) <class 'tuple'>
# f = {1,2,3}  # 셋 {1, 2, 3} <class 'set'>
# g = {'a':1,'b':2,'c':3}  # 딕셔너리 {'a': 1, 'b': 2, 'c': 3} <class 'dict'>
# h = True     # 불리언 True <class 'bool'>
# print(iter(10))  # TypeError: 'int' object is not iterable
# print(iter(3.14))  # TypeError: 'float' object is not iterable
# print(iter(True))  # TypeError: 'bool' object is not iterable
print(iter('Hello'))  # <str_iterator object at 0x000001CF3D566E20>
print(iter([1,2,3]))  # <list_iterator object at 0x0000022A3CD46E20>
print(iter((1,2,3)))  # <tuple_iterator object at 0x000001C5E6AA6E20>
print(iter({1,2,3}))  # <set_iterator object at 0x00000281561C76C0>
print(iter({'a':1,'b':2,'c':3}))  # <dict_keyiterator object at 0x0000021735913450>
print(iter(range(5)))  # <range_iterator object at 0x000002123B061A70>


# 이터러블은 반복할 수 있으므로 반복문인 for문으로 돌릴 수 있다.
# 형식 : 
# for 변수명 in 이터러블 :
#     실행문
# for i in [1,2,3,4,5]:
for i in range(1,6):
    print(i)


listData = [10,20,30,40,50]


# 데이터를 반복하지 않고 출력한 형태
# print(listData[0])
# print(listData[1])
# print(listData[2])
# print(listData[3])
# print(listData[4])

# 데이터를 반복하면서 출력한 형태
# for 변수명 in 문자열, 리스트, 튜플, 딕셔너리, 셋, 함수:
#     실행문

for a in listData:
   print(a)

# 데이터를 반복하면서 출력한 형태
i = 0          # 초기값
while i < len(listData):  # 조건식
    print(listData[i])   # 실행문
    i += 1     # 증감식

print('프로그램 종료')
-- 이터러블테스트.py --
profile
정보보안 전문가

0개의 댓글