[패스트캠퍼스python] 데이터타입(리스트, 튜플, 딕셔너리, 셋)

데이터타입(리스트, 튜플, 딕셔너리, 셋)

다른 데이터들은 익숙한데 위의 데이터타입들은 생소해서 꼼꼼하게 인강을 들었다.
이러한 데이터들만 잘 활용해도 파이썬을 제대로 사용할 수 있을 것만 같다
신기한게 다음 인강이 test인강이었다. 답을 어디 제출하는 것은 아니지만 숙제개념으로 먼저 풀어본 뒤 인강을 들으면 진짜 학원다니는 느낌(?)을 낼 수 있다 ㅋㅋㅋㅋㅋ

1. 리스트

리스트는 아래 4가지가 다 가능한 매우 유연한 데이터타입이다.

  • 순서O
  • 중복O
  • 수정O
  • 삭제O

1-1 리스트의 선언

선언은 쉽다

1
2
3
4
5
6
7
8
a = [1,2,3,4,5]
b = list('a')
c = [1,2,'Apple', ['Pink', 'Red']]
d = list(1)

print(a)
print(b)
print(d)

출력값으로는

1
2
3
[1, 2, 3, 4, 5]
['a']
#에러발생, int값은 출력이 안됨.

d = list(‘a’)는 출력이 가능하나 list(1)은 출력이 불가능했다.

1-2 리스트의 인덱싱

위의 선언을 그대로 아래코드를 입력했다

1
2
3
4
5
print(c[0])
print(c[-1])
print(c[1])
print(c[-1][-2])
print(c[3][1])

그 출력값은 아래와 같다.
특히 -인덱스에서 출력되는 값들이 조금 헷갈린다
실습을 많이해서 실수하지 않도록 해야겠다.

1
2
3
4
5
1
['Pink', 'Red']
2
Pink
Red

1-3 리스트의 슬라이싱

선언한 c에서 1부터 사과까지의 값만 가지고 오고싶다면 슬라이싱을 하면 된다.

1
2
c = [1,2,'Apple', ['Pink', 'Red']]
print(c[0:3])

출력값

1
[1, 2, 'Apple']

1-4 리스트의 연산

곱하기 연산이 신기했다

1
2
a = [1,2]
print(a * 3)

출력값은

1
[1,2,1,2,1,2]

1-5 리스트의 수정 및 삭제

리스트는 수정 및 삭제가 간편했다.

1
2
3
4
5
6
7
8
9
10
11
c[0] = 77
print(c)

a[1:3] = [100, 200, 300]
print(a)

c[1] = a
print(c)

del c[1]
print(c)

출력값

1
2
3
4
[77, 2, 'Apple', ['Pink', 'Red']]
[1, 100, 200, 300, 4, 5]
[77, [1, 100, 200, 300, 4, 5], 'Apple', ['Pink', 'Red']]
[77, 'Apple', ['Pink', 'Red']]

1-6 리스트 함수

함수는 재미있는 내용이 꽤 많았다

  1. append(a)와 insert(a,b), extend(c)의 차이점
    • append(a)는 배열 맨 뒤에 a값을 넣음
    • insert(a,b)는 a번째 인덱스에 b값을 넣음
    • list.extend(a)는 a가 배열인 경우 배열 통채로 list에 삽입되지만 list.extend(a)는 a의 원소들이 list에 삽입됨

차이점은 아래 코드를 보면 명확히 나타난다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
y = [5,2,3,1,4]
print(y)

y.append(6)
print(y)

list = [10,20,30]
list.append(y)
print(list)

list.extend(y)
print(list)

y.insert(2,7) #2번째 인덱스에 7을 넣음
print(y)

출력값은

1
2
3
4
5
[5, 2, 3, 1, 4]
[5, 2, 3, 1, 4, 6]
[10, 20, 30, [5, 2, 3, 1, 4, 6]]
[10, 20, 30, 5, 2, 3, 1, 4, 6]
[1, 2, 7, 3, 4, 5, 6]

append는 배열 통채로 추가되는 것을 확인할 수 있다.

  1. sort()와 reverse()는 서로 반대!

    • sort()는 순서대로정렬, 오름차순정렬
    • reverse()는 역순정렬, 내림차순정렬
  2. del, remove(), pop()은 셋 다 삭제하는 기능이다!

    • del는 인덱스로 삭제 가능
    • remove(a)는 인덱스의 값이 지워지는게 아니라 a라는 값을 찾아서 삭제해줌
    • pop() 맨 마지막 값을 꺼냄, 참고로 pop()과 push())를 LIFO(Last in first out)구조를 가진 스택(Stack)이라고 부른다
1
2
3
4
5
y.remove(7)
print(y)

y.pop()
print(y)

출력값은

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

2. 튜플

언뜻보면 리스트와 다름없는 튜플은 왜 있는걸까?
수정이나 삭제되면 안되는 중요 데이터를 다룰때 튜플에 저장사용하면 좋기 때문이다
리스트와 중복되는 부분이 많아 내게 필요한 부분만 정리해보았다

  • 순서O
  • 중복O
  • 수정x
  • 삭제x
1
2
3
4
d = (10, 20, 30, ('a', 'b', 'c'))

print(d[2:])
print(d[3][0:1])

출력값은

1
2
(30, ('a', 'b', 'c'))
('a',)

마지막 출력값에 ,가 찍히는 건 튜플의 특성이다.

튜플 예시

튜플은 수정과 삭제가 안되기 때문에 위의 이미지처럼 del로 삭제를 시도한 경우 터미널에 TypeError코드가 생기며 deletion을 support하지 않는다고 알려준다.

3. 딕셔너리

dictionary 는 key, value, items를 구분할 줄 알아아한다.
딕셔너리를 배우면서 이렇게 데이터를 효율적으로 다룰 수 있단 말이야? 하며 크게 놀랐다.
왜 파이썬이 데이터베이스에 많이 사용되는 언어인지 이해가 갔다.

  • 순서x
  • 중복x
  • 수정o
  • 삭제o

3-1 딕셔너리의 선언

1
2
a = {'name' : 'kim', 'Mobile':'02-3196-777'}
b = {'arr' : [1,2,3,4,5]}

3-2 딕셔너리의 출력

딕셔너리 출력시 그냥 출력하는 것보다 get()을 이용하는 걸 추천한다.
get()을 이용해서 key를 찾으면, None을 통해 key유무를 확실히 확인할 수 있어 유용하다

1
2
print(a['name'])
print(a.get('name'))

둘 다 동일한 출력값을 가진다.

1
2
kim
kim

3-3 딕셔너리의 추가

1
2
3
4
5
6
a['address'] = 'Seoul'
print(a)
```
출력값
```python
{'name': 'kim', 'Mobile': '02-3196-777', 'address': 'Seoul'}

3-4 keys, values, items(keys와 values 합친거)

형변환 필수!

1
2
3
4
5
6
7
print(a.keys())
print(list(a.keys()))
# 정말 자주 사용함. 중요해! for반복문할때 temp에 넣어서 자주 사용
temp = list(a.keys())
print(temp[1:3])
print(a.values()) # 대량의 데이터처리가 매우 쉬움
print(a.items())

출력값은

1
2
3
4
5
dict_keys(['name', 'Mobile', 'address'])
['name', 'Mobile', 'address']
['Mobile', 'address']
dict_values(['kim', '02-3196-777', 'Seoul'])
dict_items([('name', 'kim'), ('Mobile', '02-3196-777'), ('address', 'Seoul')])

3-5 ( in )은 keys 유무확인만 가능할뿐 value유무확인은 안됨

1
2
print('name' in a) 
print('kim' in a)

출력값은

1
2
True
False

4.집합(Sets)

셋의 특징은 아래와 같다.
셋을 통해 파이썬이 빅데이터처리에 유용하다는 것을 느꼈다.

  • 순서x
  • 중복x
1
2
3
4
z = set([1,2,7])
y = set([1,2,3,4,4,5,6])

print(y)

출력값은

1
{1, 2, 3, 4, 5, 6}

sets은 중복을 허용하지않기때문에 알아서 중복제거해준다.

4-1 교집합

1
2
print(z.intersection(y))
print(z & y)

동일한 출력값을 가진다

1
2
{1, 2}
{1, 2}

4-2 합집합

1
2
print(z | y)
print(z.union(y))

동일한 출력값을 가진다

1
2
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}

4-3 차집합

1
2
3
print(z - y)
print(y - z)
print(z.difference(y))

출력값은

1
2
3
{7}
{3, 4, 5, 6}
{7}

위에서 배웠던 데이터타입을 가지고 형변환을 하면 아래 이미지와 같이 출력된다

차집합 출력값

괄호의 모형도 다르고 type도 다르다.

드디어 자료형에 대해 개략적으로 공부 완료했다
실습을 통해 내것으로 빨리 만들어보는 시간을 가졌으면 좋겠다.

[패스트캠퍼스python] 괄호종류, .format(), 기본단축키, 가상환경명령어, 데이터타입

괄호종류, .format(), 기본단축키, 가상환경명령어, 데이터타입

1. 괄호종류 : 대괄호[] - 중괄호{} - 소괄호()

2. format사용

Python에서 중요한 format함수의 활용에 대해 공부했다.
각 약어들의 의미는 아래와 같다

  • $s : 문자
  • $d : 정수 (ex: -1,0,1등)
  • $f : 실수 (유리수 + 무리수이므로 ex: 1.8, 3/4, √4, π 등)

format

1
2
3
4
5
6
7
8
print('{} and {}'.format('You', 'I'))
print('{0} and {1} and {1}'.format('You', 'I'))
print("%s likes to go %d St. %s" %('Kim', 7, 'library'), '도서관')

# run하면 아래와 같이 터미널에 나타난다.
# You and I
# Me and I and I
# Kim likes to go 7 St. library 도서관

3. 기본 단축키

  • ctrl + shift + B => 터미널에 코드실행 (터미널에 적힌 코드들의 실행값을 볼 수 있음)
  • ctrl + / => 파이썬에서 주석을 나타낼 수 있다. 언어마다 주석이 다른데 파이썬은 앞에 #이 붙으면 주석처리가 된다.

4. 가상환경 명령어

여러 프로젝트를 진행하다보면 다양한 프로그램들을 다운로드하게 되고 python버전끼리 또는 프로그램끼리 서로 충돌할 수 있다.
에러를 해결하기위해 고군분투하다가 심한 경우 포맷을 해야하는 끔찍한 상황에 처할 수 있다.

이를 방지하기 위해 프로젝트를 가상환경안에서 진행하면 좋다.
프로그램끼리 충돌이 생겨 에러가 난 경우, 가상환경안의 include폴더, Lib폴더 그리고 Scripts폴더만 삭제해주면 끝!
굳이 눈물의 포맷을 할 필요가 없다!

가상환경설정을 윈도우기준으로 설명하자면,

  1. cmd를 검색하여 명령 프롬프트를 연다
  2. cd 원하는파일위치복붙: 원하는 파일위치를 연다
  3. dir: 현재 파일 위치안에 있는 파일들을 확인한다
  4. cd Scripts: Scripts파일로 들어간다
  5. activate.bat : 명령어를 입력하면 경로 제일 앞에 괄호가 생기고 그 안에 (지정했던 가상환경파일)이 적힌다. 이렇게 되면 가상환경안에 들어와 있는 것이 된다!
  6. code: 가상환경안에 있음을 확인 후 code를 쳐서 에디터를 연다.꼭 가상환경안에서 에디터를 열어야 추후 일어날 수 있는 문제를 예방할 수 있다.
  7. deactivate.bat: 가상환경 밖으로 나갈 수 있는 코드이다.

5. 가상환경설정시 warning 해결

명령 프롬프트를 열고 열심히 강의를 따라하고 있는데 아래 이미지와 같이 warning이 나타났다.

가상환경설정시 warning발생

옛날이었으면 엄청 당황했겠지만 공부하는 동안 꽤 많이 봐왔다.
당황하지않고 찬찬히 읽어보았다. 현재 pip버전이 옛날 버전이므로 이를 업그레이드하라는 말이었다.
뭐야~ 쉽잖아!
휴~ 난 또,, 놀래라!

그래서 적혀저있는 그대로~ 하라는대로~ python -m pip install --upgrade pip를 복붙했다.
짜잔-

위의 사진에서 위와 아래, 두 개의 빨간 동그라미를 통해 버전업그레이드가 잘 된것을 확인할 수 있다.

6. 파이썬의 데이터타입 종류

데이터타입 종류

파이썬의 데이터타입에는

  • Boolean
  • Numbers
  • String
  • Bytes
  • List
  • Tuples
  • Sets
  • Dictionaries
    사실 모든 테이터 타입들이 다 중요하다.
    이 중 중요한 타입들로는 Lists, Sets, Dictionaries라고 한다.

[패스트캠퍼스python] 파이썬 인강 자기계발 챌린지 시작

[패스트캠퍼스 수강 후기]파이썬인강 자기계발 챌린지 시작

기회는 준비된 자에게 온다고 했던가?
이번에 패스트캠퍼스 5주 자기계발 챌린지 라는 좋은 기회가 있어 바로 기회를 잡았다.

앞으로 35일간 매일 TIL을 작성할 예정이다
이번 인강을 통해 Python을 실무에서 쓸 수 있었으면 좋겠다.


참고링크 파이썬 웹 개발 올인원 패키지 Online : https://bit.ly/2WG0IXN

ID와 PASSWORD 일치여부 앱의 코드 리팩토링

ID와 PASSWORD일치여부 앱의 코드 리팩토링


생활코딩 JAVA를 수강중에 나오는 실습들만 따라하는 게 아니라 더 나아가 응용을 스스로 하고 있다.
그만큼 JAVA의 매력에 푹 빠졌달까…

실습에선 ID와 PASSWORD가 일치하면 로그인되는 결과만 도출하는 APP이었다면 나는 더 나아가 ID만 일치하고 PASSWORD가 다른 경우 PASSWORD를 다시 입력하라는 메세지를 전달하는 APP을 만들고 싶었다.

그래서 내가 처음 짠 코드는 아래와 같다.

초기 코드

조건문을 어떻게 해야하는 지 고민스러웠다.
일단 가장 쉬운 if로만 이루어진 코드를 짰다.
원하는대로 작동하니 정말 뿌듯했다.

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
32
33
34
35
public class authapp {

public static void main(String[] args) {

String[][] users = {
{"민지", "111"},
{"하지", "222"},
{"뽀니", "333"},
{"라미", "444"}
};
String inputId = args[0];
String inputPass = args[1];

Boolean isRightId = false;
Boolean isRightPass = false;
for(int i=0; i<users.length; i++) {
String[] current = users[i];
if(current[0].equals(inputId)){
isRightId = true;
if(current[1].equals(inputPass)){
isRightPass = true;
break;
}
}
}
System.out.println("Hi,");
if(isRightId && isRightPass) {
System.out.println(args[0] + " Long time No see!");
}else if (isRightId && (!isRightPass)) {
System.out.println(args[0] + " Please check password again");
}else{
System.out.println(args[0] + "Please sign up");
}
}
}

작동해서 뿌듯했지만 프로그래머들 사이에서 들여쓰기가 3번이상된다면 코드를 한번 더 봐라라는 격언이 있다고 들었다.

리팩토링 두번째코드

주석없이도 다른 사람이 알아볼 수 있는 코드를 만들고 싶었다.
위의 코드와 1줄차이이고 두번째코드가 오히려 1줄 더 길다.
하지만 나는 두번째코드가 직관적이라서 더 좋은 느낌이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Boolean isRightId = false;
Boolean isRightPass = false;
for(int i=0; i<users.length; i++) {
String[] current = users[i];
if(current[0].equals(inputId) && current[1].equals(inputPass)) {
isRightId = true;
isRightPass = true;
break;
}else if(current[0].equals(inputId)) {
isRightId = true;
break;
}
}

System.out.println("Hi,");
if(isRightId && isRightPass) {
System.out.println(args[0] + " Long time No see!");
}else if (isRightId && (!isRightPass)) {
System.out.println(args[0] + " Please check password again");
}else{
System.out.println(args[0] + "Please sign up");
}

좋은 코드란 무엇일까?

아직까지 잘 모르겠다.
JAVA를 더 배우고나면 좋은 코드가 무엇인지 감이 확실히 올거라 믿는다.

JAVA 동작 원리

생활코딩JAVA1 : JAVA 동작 원리

모든 공부는 그 원리가 중요하다
원리 즉 기초를 튼튼히 쌓아 올려야 무너지지 않는 건물이 되고 건물주가 될 수 있다<응?

그렇다면 자바는 어떻게 작동할까?

JAVA 동작 원리

  1. 우리는 자바라는 언어를 이용하여 컴퓨터에 우리가 원하는 것을 시킬 수 있다. 이때 컴퓨터는 우리의 언어를 이해하지 못한다.

  2. 이러한 우리의 언어를 컴퓨터가 이해할 수 있도록 컴파일(compile)을 한다.

  3. 컴파일링 후 .class가 생성되고 쉽게 말해 컴퓨터가 이해할 수 있는 언어로 번역된 것이다.

  4. 그리고 실행(Run)을 시키면 우리가 java를 설치하면서 다운로드했던 Java Virtual Machine을 거쳐서

  5. computer는 결과를 도출한다.

코드스테이츠 Pre 35기 수료 후기

코드스테이츠 Pre 35기 수료 후기

코드스테이츠는 부트캠프 형식의 코딩 교육으로 알고리즘은 물론 JS, HTML, CSS를 페어프로그래밍을 통해서 공부할 수가 있다.

나는 코드스테이츠를 2019년 10월에 수료를 했다.
Latte is horse, 코스가 총 2가지로 pre코스(기초과정)와 immersive코스(심화과정)으로 나뉘었었는데
이번에 다시 홈페이지를 방문하니 기존 코스를 하나로 통합하여 몰입과정만 운영하고 있었다.
멈춰있지않고 항상 나아가려고 노력하는 기업인 것 같다.

Read More

변수 기초(정확한 데이터타입)

생활코딩JAVA1 : 변수 기초(정확한 데이터타입)

자바는 변수를 설정할때 꼭 정확한 데이터타입을 적어줘야한다.
숫자 1의 경우에는 Number지만 정확히 말하면 정수(Integer 인티저)에 속한다
따라서 아래 변수a와 같이 int 를 적은 뒤 변수를 적는다.

숫자 1.1의 경우에는 실수(real number)이다.
이를 아래 변수b처럼double로 나타내면 된다

문자열은 그래도 String을 쓰면 된다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
public static void main(String[] args) {
// Number -> integer ... -2, -1 , 0, 1, 2 ...
int a = 1;
System.out.println(a);

// real number -> double ... -2.0, -1.0, 0, 1.0, 2.0 ...
double b = 1.1;
System.out.println(b);

String c = "Hello World";
System.out.println(c);
}
}