일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 크롤링 개발
- Spring
- Spring Boot
- ChatGPT
- Github
- colab
- rnn
- Python
- API
- VSCode
- KAKAO
- Powershell
- OSS
- Database
- 코딩도장
- suricata
- ICT멘토링
- Web
- cloud
- Resnet
- C언어
- 인터넷의이해
- Machine Learning
- Docker
- 국가과제
- LINUX MASTER
- Rocky Linux
- GoogleDrive
- 고등학생 대상
- git
- Today
- Total
코딩두의 포트폴리오
임베디드 시스템 중간 정리 본문
1장. 라즈베리 파이 + 파이썬 + 전자 회로 공작으로 컴퓨터와 친해지기
파이썬, 라즈베리 파이의 가장 큰 특징: 자유롭게 사용할 수 있는 포트 'GIPO' 확장 커넥터를 사용 -> 전자 회로 제어
마이크로 SD 카드 - PC에서 하드디스크에 해당 / 라즈베리 파이가 인식할 수 있는 SD 카드의 최대 용량은 32GB
라즈베리 파이에서 사용 가능한 최대 전류: 2.5A / 2.5A보다 센 전류 흐르면 기판의 퓨즈가 끊겨 일시적으로 사용 불가
배포판: OS의 기능을 간단히 설치할 수 있는 형태로 모아 둔 SW
라즈비안: 라즈베리 파이 표준 배포판, 프로그래밍 언어 학습용 SW
2장. 운영체제(라즈비안) 설치와 사용 방법
라즈비안 업데이트
sudo apt-get update -> OS 업데이트 조사
sudo apt-get upgrade -> 업데이트 정보를 바탕으로 OS가 업데이트됨
한글 입력기 설치 / 활성화
sudo apt-get install ibus-hangul fonts-unfonts-core
ibus engine hangul
관리자 root의 암호 설정
sudo passwd root
라즈비안에서 사용하는 명령어
명령어 | 설명 |
ls | 디렉터리 내부에 있는 파일 목룍 표시 |
cd 디렉터리명 | 현재 디렉터리로 이동 |
mv 파일명1 파일명2 | 파일명1 -> 파일명2로 파일을 옮기거나 파일명 변경 |
cp 파일명1 파일명2 | 파일명1 -> 파일명2로 파일을 복사 |
cat 파일명 | 파일 내용 표시 |
chown 옵션 파일명 | 파일 소유자 변경 |
chgrp 옵션 파일명 | 파일 그룹 변경 |
chmod 옵션 파일명 | 파일 접근 권한 변경 |
sudo 명령어 | 지정한 명령어를 관리자 권한으로 실행 |
apt-get update | 소프트웨어 패키지의 갱신 정보 취득 |
apt-get upgrade | 소프트웨어 패키지의 갱신 정보를 바탕으로 업데이트 실행 |
apt-get install 패키지명 | 지정한 패키지를 설치 |
apt-get remove 패키지명 | 지정한 패키지를 제거 |
apt-get autoclean | 이미 제거한 패키지의 캐시 삭제 |
ifconfig | 네트워크 인터페이스의 참조 및 설정 |
man 명령어 | 명령어 사용법을 표시 (메뉴얼) |
root에는 os를 구성하는 각종 디렉터리가 들어 있음
상위 디렉터리에 파일 관련 작업을 하기 위해선 관리자 권한 필요 -> 명령어 앞에 sudo
3장. 파이썬 기본 지식
파이썬의 특징
가상 머신으로 실행 - 바이트 코드
풍부한 라이브러리 - 내장 자료형, 내장 함수, 내장 상수, 내장 예외
객체 지향 언어 But, 절차형으로도 사용 가능
들여쓰기로 블록 구조 표현
EOL(End Of Line) - 코드 작성 시 문법적으로 문제 발생
EOF(End Of File) - 필요한 코드가 빠져있는 경우에 발생
문자열 한 개는 서로 다른 따옴표로 감쌀 수 X
파이썬 프로그램 작성 규칙
파이썬 작성 규칙
파일명은 영문 숫자, 기호만 사용 / 특수문자 입력 시 오류 발생
공백이 있으면 안 된다
프로그램의 빈 줄
주석 처리
긴 줄 하나를 여러 줄로 작성
파이썬 문법 오류 (대화형 세션의 오류 메시지)
함수의 괄호가 빠졌을 때
줄이 시작되는 부분에 공백이 있을 때
특수문자가 있을 때
파이썬 문법 오류 (프로그램 실행 시 오류)
print 문에 괄호가 없음
줄이 시작되는 부분에 공백이 있음
특수문자가 있을 때
비트 연산
문자 정보 처리
아스키 - 표준 문자 / 128개의 코드 / 1바이트 문자
한글 - 2바이트 이상인 수를 사용
유니코드 - 모든 언어에서 사용하는 문자를 같은 문자 코드 체계로 표시 (UTF-8은 유니코드 한 문자를 0비트 단위로 끊음)
함수, 메서드, 모듈 사용 방법
함수 - 나눌 수 있는 처리를 하나의 블록으로 만든 것
내장 함수 - 라이브러리 필요 없이 바로 함수 형태로 이용 가능
메서드 - 객체 지향 프로그래밍에서 객쳉에 실행하는 어떤 조직 / 프로그램에서 다루는 대상별로 관리
파이썬에서 다루는 모든 것을 '객체'로 보여줌
자주 쓰는 객체, 메서드를 각각 내장 객체, 내장 메서드로 준비
내장 메서드 사용 시 사용할 객체와 메서드명 사이에 마침표(.)를 씀
객체.메서드()
변수 - 데이터를 저장하는 메모리
지정한 문자가 객체 문자열에 없을 때는 오류 반환
모듈( > 함수, 메서드) - 시스템을 구성하는 독립성 높은 요소 1개
모듈은 시작 부분에서 임포트
import 모듈명
함수 사용 시 메서드 사용과 마찬가지
모듈.함수()
자료형
내장 자료형 - 미리 준비된 자료형 -> string 형식
변수
변수 - 데이터를 저장하는 영역 또는 데이터 그 자체
변수에 할당하기
동적 자료형 변수 - 할당한 데이터에 맞게 자료형이 유연하게 변하는 변수
변수 이름 규칙
- 변수명에는 영문, 숫자 밑줄(_)만 사용
- 대문자, 소문자 구별
- 변수명은 숫자로 인식 X
- 파이썬 예약어는 사용 X
정수형, 부동소수형, 불형
정수형 - 소수점 이하를 포함하지 않는 숫자
부동소수점 - 소수점 이하를 포함하는 숫자 (가수부 + 지수부)
내장 함수 round() -> 부동소수의 소수점 이하를 반올림
round(반올림할 숫자[, 자릿수])
불형 - 불 대수로 다루는 참과 거짓 상태를 가진 자료형
숫자 값 계산
산술 연산자 (+, -, *, /, %, **)
복합 할당 연산자 - 연산과 할당을 하나로 합친 것
복합 할당 연산자 사용 시 그 변수에 값이 미리 할당되어 있어야 오류가 발생하지 않음
비트 연산자 - 정수형 값을 일반적인 숫자가 아닌 2진수 숫자로 보고 연산
문자열
문자열 - 하나 이상의 문자가 나열된 데이터
변수에 문자열 할당하기
>>> a = 'Python'
>>> prinT(a)
Python
문자열을 인덱스로 지정하기 (시퀀스형: 요소들이 일정한 순서대로 나열된 데이터형)
인덱스로 데이터 지정 시 인덱스 번호를 대괄호([])로 감싸고 변수명 뒤에 붙이기
ex) 변수 a에 문자열 Python을 할당하고 0번째와 마지막 문자 지정하기
>>> a = 'Python'
>>> a[0]
'p'
>>> a[-1]
'n'
ex) 정수형에 인덱스를 지정하면 오류 발생
>>> a = 1234
>>> a[1]
여러 문자를 인덱스로 지정 - [x:y] : 인덱스 x부터 y-1까지 범위에 있는 요소들을 한 번에 지정 --> 슬라이스
ex) 문자열 요소 0번째부터 1번째까지 지정하기
>>> a = '1234'
>>> a[0:2]
'12'
ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨
>>> a[:2]
'12'
ex) 종료 위치를 생략하면 마지막까지 지정한 것이 됨
>>> a[:2]
'34'
따옴표와 백슬래시를 문자열로 만들기
이스케이프 시퀀스 사용하기 - 백슬래시를 사용
ex) 작은따옴표로 감싼 문자열에 작은따옴표가 포함되면 오류 발생
>>> a = 'Happy 'Python'
SyntaxError: Invalid systax -> 오류 발생
ex) 이스케이프 시퀀스로 문자열 안에 작은따옴표 작성하기
>>> a = 'Happy \'Python/''
>>> print(a)
Happy 'Python'
ex) 문자열에 이스케이프 시퀀스로 줄 바꿈 코드를 넣기
>>> a = 'Happy \n Python'
>>> print(a)
Happy
Python
3중 따옴표로 감싸기 - 도중에 줄 바꿈이나 따옴표가 포함되더라도 모두 그대로 문자열로 다룰 수 있음
ex) 따옴표와 줄 바꿈이 포함된 문자열을 3중 따옴표로 감싸기
>>> a = ''' Happy
'Python' '''
>>> print(a)
Happy
'Python'
문자열 일부를 교체하기 - replace()
replace('교체하기 전의 문자열', '새롭게 넣을 문자열')
ex) 변수 a에 문자열 'Python'을 할당하고 P를 p로 교체한 다음 다시 할당하기
>>> a = 'Python'
a = a.replace('P', 'p')
>>> a
'python'
연산자로 문자열 연결 / 반복하기
+ 연산자 - 연결 / * 연산자 - 반복
ex) 문자열 연결하기
>>> a = 'Python'
>>> b = ' in Raspberry Pi'
>>> a + b
'Python in Raspberry Pi'
ex) 문자열 반복하기
>>> a = 'Python'
>>> a = 3
'PythonPythonPython'
글자 수 세기
내장 함수 len()을 사용
len(문자열)
ex) 문자열의 글자 수 알아내기
>>> a = 'Python'
>>> len(a)
6
특정 문자열이 포함되어 있는지 조사하기
in 연산자 사용하기
찾고 싶은 문자열 in 문자열 전체
ex) 문자열 'Python'에 'Py' 또는 'pi'가 포함되어 있는지 확인하기
>>> a = 'Python'
>>> 'Py' in a
True
>>> 'pi' in a
False
find() 메서드 사용하기
문자열 전체.find(찾고 싶은 문자열[, 시작 인덱스][, 종료 인덱스]
찾으면 인덱스를 반환, 못 찾으면 숫자 -1을 반환
ex)문자열 안에 'Py'가 있는지 확인하기
>>> a = 'Python in Raspberry Pi'
>>> a.find('Py', 0, 3) -> 0번째와 3번째 사이에 'Py'가 있는지 확인
0
>>> a.find('Py', 2) -> 2번째와 마지막 사이에 'Py'가 있는지 확인
-1
리스트
리스트 - 여러 숫자나 문자열 등의 요소를 일정한 순서로 나열한 구조의 자료형 (문자열과 동일한 시퀀스형)
변수에 리스트를 할당해서 인덱스로 지정하기
[요소1, 요소2, 요소3, 요소4, 요소5, ...]
ex) 변수 a에 리스트 1, 2, 3, 4를 할당하고 0번째와 마지막 문자를 지정하기
>>> a = [1, 2, 3, 4]
>>> a[0]
1
>>> a[-1]
4
ex) 문자열, 정수, 부동소수가 담긴 리스트
>>> a = ['Python', 1234, 1.234]
>>> a[0]
'Python'
>>> a[1]
12324
>>> a[2]
1.234
리스트에 들어 있는 또 다른 리스트의 요소를 인덱스로 지정
리스트[부모 리스트의 인덱스][자식 리스트의 인덱스]]
ex) 리스트의 3번째 요소인 자식 리스트의 첫(0번째) 요소를 지정하기
>>> a = [1, 2, 3, [4, 5, 6]
>>> a[3]a[0]
4
ex) 인덱스로 지정한 리스트의 요소 교체하기
a = [1, 2, 3, 4]
a[0] = 0
a
[0, 2, 3, 4]
여러 요소를 인덱스로 지정하기
[x:y]로 인덱스 지정 -> x부터 y-1까지 범위에 있는 요소를 리스트로 추출
ex) 리스트의 요소 0번째부터 1번째까지 지정하기
>>> a = [1, 2, 3, 4]
>>> a[0:2]
[1, 2]
ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨
>>> a[:2]
[1, 2]
ex) 종료 위치를 생략하면 마지막까지 지정한 것이 됨
>>> a[:2]
[3, 4]
슬라이스로 리스트의 여러 요소 한 번에 교체 (리스트 형식과 동일)
ex) 0번째부터 1번째까지 요소를 다른 요소로 교체하기
>>> a =[1, 2, 3, 4]
>>> a[0:2] = [0:0]
>>> a
[0, 0, 3, 4]
ex) 0번째 요소부터 1번째 요소까지를 다른 요소로 교체하면서 요소 추가하기
>>> a = [1, 2, 3, 4]
>>> a[0:2] = [0, 0, 0]
>>> a
[0, 0, 0, 3, 4]
슬라이스로 지정한 요소 개수 < 할당한 리스트의 요소 개수 --> 원래 리스트에 들어 있는 요소 개수가 증가
연산자로 리스트 연결 / 반복하기
리스트에 요소 추가하기
append() 메서드로 리스트 끝에 요소 추가하기
ex) 리스트 끝에 요소 추가하기
>>> a = [1, 2, 3, 4]
>>> a.append(5)
>>> a
[1, 2, 3, 4, 5]
extend() 메서드로 리스트 끝에 여러 요소 추가하기
-> 문자열이나 숫자를 리스트 끝에 추가
- 요소를 여러 개 추가할 수 있는 점이 append()와의 차이점
- 리스트로 작성해야 함
ex) 리스트 끝에 요소 3개 추가하기
>>> a = [1, 2, 3, 4]
>>> a.extend([5, 6, 7])
>>> a
[1, 2, 3, 4, 5, 6, 7]
리스트의 요소 제거하기
del 문을 사용하여 제거
del 제거할 요소
ex) del 문으로 리스트에 있는 요소 제거하기
>>> a = [1, 2, 3, 4]
>>> del a[0]
>>> a
[2, 3, 4]
pop() 메서드로 리스트의 마지막 요소 제거하기
- 괄호 생략 가능
ex) 리스트의 마지막 요소 제거하기
>>> a = [1, 2, 3, 4]
>>> a.pop()
4
>>> a
[1, 2, 3]
리스트의 요소를 역순으로 재배치하기
reverse() 메서드를 사용 / 리스트 내용 자체가 변함
>>> a = ['(>_<)', '(+0+)', '(*_*)']
>>> a.reverse()
>>> a
['(*_*)', '(+0+)', '(>_<)']
리스트의 요소를 지정한 순서로 재배치하기
sort() 메서드 사용
요소가 숫자 -> 작은 숫자부터 나열
요소가 문자열 -> 숫자, 대문자, 소문자 순
ex) 리스트 요소 재배치하기(오름차순)
>>> a = ['3', '2', 'B', '1', 'a']
>>> a.sort()
>>> a
['1', '2', '3', 'B', 'a']
ex) 반대로 재배치하기
>>> a.sort(reverse = True)
>>> a
['a', 'B', '3', '2', '1']
튜플
튜플은 리스트와 비슷한 자료형이지만 불변 -> 일부 요소만 변경하거나 제거 X
변수에 튜플을 할당하고 인덱스 지정하기
(요소1, 요소2, 요소3, 요소4, 요소5, ...)
ex) 변수 a에 튜플을 할당하고 0번째와 마지막 요소 지정하기
>>> a = ('P', 'y', 't', 'h', 'o', 'n')
>>> a[0]
'P'
>>> a[-1]
'n'
ex) 문자열, 정수, 부동소수가 담긴 튜플
>>> a = ('Python', 1234, 1.234)
>> a[0]
'Python'
>>> a[1]
1234
>>> a[2]
1.234
ex) 튜플에 튜플 저장하기
>>> a = (1, 2, 3, (4, 5, 6))
>>> a[3][0]
4
ex) 요소가 3개인 튜플을 세 변수에 할당하기
>>> a = (1, 2, 3)
>>> x, y, z = a
>>> x
1
>>> y
2
>>> z
3
여러 요소를 인덱스로 지정하기
튜플도 슬라이스로 여러 요소 지정할 수 있음 (=문자열=리스트)
ex) 튜플의 0번째부터 1번째까지 요소 지정하기
>>> a = (1, 2, 3, 4)
>>> a[0:2]
(1, 2)
ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨
>>> a[:2]
(1, 2)
ex) 종료 위치를 생략하면 0번째부터 지정한 것이 됨
>>> a[:2]
(3, 4)
연산자로 튜플 연결 / 반복하기
딕셔너리
문자열, 리스트, 튜플처럼 순서대로 나열한 시퀀스형이 X
키(변하지 않는 자료형)와 값(각종 객체)으로 이루어진 자료형
변수에 딕셔너리를 할당해서 인덱스 지정하기
{키1:값1, 키2:값2, 키3:값3, ...}
ex) 변수 a에 딕셔너리를 할당하고 키로 값을 지정하기
>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['happy']
'(^-^)'
>>> a['sad']
'(ToT)'
ex) 키: 숫자, 값: 문자열
>>> a = {1:'(^-^)', 2:'(ToT)'}
>>> a[1]
'(^-^)'
딕셔너리에는 또 다른 딕셔너리 저장할 수 있음
딕셔너리명[부모 딕셔너리의 키][딕셔너리의 키]
ex) 자식 딕셔너리의 값 지정하기
>>> a = {'happy':(1:'(^-^)', 2:'(^o^)'}, 'sad':{1:'(ToT)', 2:'(T-T)'}}
>>> a['sad'][1]
'(ToT)'
ex) 인덱스로 지정한 값 바꾸기 -> 가변 데이터라서 정의 후에 변경 가능
>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['happy'] = '(^o^)'
>>> a['happy']
'(^o^)'
딕셔너리에 요소 추가하기
시퀀스형이 아니므로 요소는 무작위로 나열
새로 추가된 요소가 딕셔너리 끝에 들어가는 것은 X
>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['sleepy'] = '(-_-)'
>>> a
{'happy': '(^-^)', 'sad': '(ToT)', 'sleepy': '(-_-)'}
딕셔너리의 요소 제거하기
del 문으로 지정한 키와 값 제거
>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> del a['sad']
>>> a
{'happy':'(^-^)'}
pop() 메서드로 키와 값 제거하기
제거할 값의 키를 인수로 지정
>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a.pop('happy')
'(^-^)'
>>> a
{'sad':'(ToT)'}
다른 자료형으로 변환하기
내장 함수 | 내용 | 인수로 지정 가능한 자료형 |
float() | 부동소수형으로 변환 | 정수, 문자열 |
int() | 정수형으로 변환 | 부동소수, 문자열 |
str() | 문자열로 변환 | 숫자, 리스트, 튜플 등의 객체 |
list() | 리스트로 변환 | 문자열, 튜플 등 |
tuple() | 튜플로 변환 | 문자열, 리스트 등 |
ex) float()으로 정수형 -> 부동소수형
>>> a = 1
>>> b = float(a)
>>> b
1.0
ex) int()로 부동소수형 -> 정수형
>>> a = 1.0
>>> b = int(a)
>>> b
1
ex) str()로 정수형 -> 문자열
>>> a = 1.234
>>> str(a)
'1.234'
ex) int()로 문자열 -> 정수형
>>> a = '1234'
>>> int(a)
1234
ex) 문자열을 숫자 값으로 변환하여 계산하고, 숫자 값을 다시 문자열로 되돌려서 변수 c에 할당하기
>>> a = '3'
>>> b = 5
>>> c = str(int(a) + b)
>>> c
'8'
ex) 튜플을 리스트로 변환해 요소를 변경하고, 리스트를 다시 튜플로 되돌리기
>>> a = (1, 2, 3)
>>> b = list(a)
>>> b[0] = 0
>>> a = tuple(b)
>>> a
(0, 2, 3)
내장 함수인 isinstance() -> 변수나 데이터가 특정 자료형인지 확인
isinstance(객체, 자료형의 명칭)
isinstance()의 두 번째 인수로 지정할 수 있는 자료형
자료형 | 명칭 |
정수형 | int |
부동소수형 | float |
문자열 | str |
리스트 | list |
튜플 | tuple |
딕셔너리 | dict |
ex) 변수가 float형인지 int형인지 확인하기
>>> a = 1.0
>>> isinstance(a, float)
True
>>> isinstance(a, int)
False
문자열 서식 지정
데이터를 지정한 형식에 따라 문자열로 변경
%연산자 or format() 메서드 사용
% 연산자 사용
키 - 서식 지정 대상이 딕셔너리일 때 (키)처럼 작성하면 해당 값을 지정
플래그 - 플래그 지정 시 옵션 지정
플래그 | 내용 |
0 | 대상이 숫자면 빈 자리를 0으로 채움 |
- | 왼쪽 정렬 |
(공백) | 양수 앞에 공백 넣기 |
+ | 양수 앞에 + 넣기 |
# | 서식 코드 옵션 |
자릿수 - 전체 자릿수 지정
정확도 - .정수로 소수점 이하의 자릿수 지정
서식 코드 - 서식 코드로 데이터 어떻게 표시할지 지정
'Embedded System' 카테고리의 다른 글
라즈베리파이 오류 해결 (2) | 2024.11.19 |
---|