[패스트캠퍼스python] 파이썬의 조건문과 반복문 중간 점검 퀴즈

파이썬의 조건문과 반복문 중간 점검 퀴즈

조건문과 반복문 중간 점검 퀴즈를 하였다
데이터타입 중간 점검 퀴즈와는 다르게 조금 어려웠다.

여러 문제를 풀었지만 내가 모르는 문제해결방법 위주로 정리해보았다
이번 중간 퀴즈도 역시 유익했다.

1. 아래 딕셔너리에서 ‘가을’에 해당하는 과일을 출력하세요.

동일한 접근 방법이지만 keys()를 가져올 지 items()를 가져올 지 선택할수있다

첫번째 방법 : for와 if문 사용

1
2
3
4
5
q1 =  {"봄": "딸기", "여름": "토마토", "가을": "사과"}

for k in q1.keys():
if k == '가을':
print(q1[k])

두번째 방법 : keys()말고 items()가져오기

1
2
3
for k, v in q1.items():
if k == '가을':
print(v)

첫번째, 두번째 출력값은

1
2
사과
사과

2. 다음 세 개의 숫자 중 가장 큰수를 출력하세요.(if문 사용) : 12, 6, 18

나는 아래와 같이 풀었다. 쉽게쉽게~!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a = 12
b = 6
c = 18

if a > b:
if a > c:
print(a)
else:
print(c)
else:
print(b)

# 출력값은
18

위는 내가 푼 코드이고 아래는 강사가 푼 코드이다.
변수선언이나 코드길이도 훨씬 효율적여보인다.
여러 방법으로 푸는 방법을 익히고 그리고 여러 방법으로 풀어보려는 자세가 중요하다.

1
2
3
4
5
6
7
8
a, b, c = 12, 6, 18
best = a

if b > a:
best = b
if c < b:
best = c
print('best : ', best)

두 방법 다 꼭 기억해야겠다.

3. s에서 7자리 숫자를 사용해서 남자, 여자를 판별하세요. (1,3 : 남자, 2,4 : 여자)

처음에 어떻게 풀지 막막했다. 결국 겅의를 보게 되었고 결과는 허무했다.
이렇게 간단한거였는데 풀지도 못하다니 수학적 사고를 길러야겠다고 생각이 들었다

1
2
3
4
5
6
7
8
9
s = '021022-4473837'

if int(s[7]) % 2 == 0:
print('여자')
else:
print('남자')

# 출력값은
여자

4. 다음 리스트 중에서 ‘아’ 글자를 제외하고 출력하세요.

여기서 continue 를 쓸 생각을 하지못했다.
슬라이싱 처리하려고 했는데 잘 안되서 막막하던 차에 강의에서 continue쓰고 묵혔던 답답함이 쏴악 해소되었다.
이제 컨디뉴 절대 안 잊어버릴것같다

1
2
3
4
5
6
7
8
9
10
11
q3 = ["지", "컨", "아", "세", "요"]

for v in q3:
if v == '아':
continue
else:
print(v, end='')
print()

# 출력값은
지컨세요

5. 아래 리스트 항목 중에서 5글자 이상의 단어만 출력하세요.

이건 보자마자 길이함수를 써야겠다는 확신이 들었다
js를 할때 길이를 항상 length()로 사용해서 무의식적으로 length()적었다가 에러가 떴다
아차차 하고 바로 len()로 바꿨다
비슷하지만 조금씩 다른 함수들이 있어서 가끔 혼동스럽다
헷갈리지 않도록 더 빡세게 암기해야겠다.

1
2
3
4
5
6
7
8
9
q4 = ["nice", "study", "python", "anaconda", "!"]

for v in q4:
if len(v) >= 5:
print(v, end=' ')
print()

# 출력값은
study python anaconda

6. 아래 리스트 항목 중에서 소문자만 출력하세요.

나는 당연히 islower()함수만 썼는데 강의에서 continue를 써서 깜짝 놀랬다.
이런 부분때문에 혼자 공부하는 것보다 강의나 여럿이 공부하는 것이 좋은 것같다
어서 실력을 키워 모각코나 스터디그룹을 만들고 싶다

1
2
3
4
5
6
q5 = ["A", "b", "c", "D", "e", "F", "G", "h"]

for v in q5:
if v.islower():
print(v, end=' ')
print()

또는 continue를 써서 풀수도 있다

1
2
3
4
5
6
for v in q5:
if v.isupper():
continue
else:
print(v, end=' ')
print()

위의 두가기 방식의 출력값은

1
2
b c e h
b c e h

7. 아래 리스트 항목 중에서 소문자는 대문자로 대문자는 소문자로 출력하세요.

재밌는 문제였다. 위의 방법을 그대로 응용하면 되는 문제라 풀면서도 재미있었다
저 출력값들을 한 문장으로 나타내려면 어떻게하면 좋을까?
if문 끝난 값들을 temp에 넣고 end()로 한 문장에 넣으면 될 것 같다
나중에 실습해봐야지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
q6 = ["A", "b", "c", "D", "e", "F", "G", "h"]

for v in q6:
if v.isupper():
print(v.lower())
elif v.islower():
print(v.upper())
print()

# 출력값은
a
B
C
d
E
f
g
H

그리고 아래 내용들을 학습했다.
정의에 관한 내용이라 블로깅할 부분이 없었지만 강의가 구체적으로 들어가면 자세히 블로깅 할 예정이다

[ITWILL : JSP]프로그래밍기초이론, 하드웨어 vs 소프트웨어 vs 펌웨어, 기억장치, 클라이언트 vs 서버

ITWILL학원 : 1강 프로그래밍이론 BY 정규태강사

1. 프로그래밍

특정 목적을 위해서 컴퓨터에 명령을 내리는 동작 혹은 동작의 집합

  • 시스템 프로그래밍 : OS제작, 수정
  • 응용 프로그래밍 : 엑셀 제작, 원가 관리 프로그램 등
  • 웹프로그래밍 : 홈페이지 제작 등, 프로그래밍에는 다양한 것들이 있지만 웹 프로그래밍위주로 공부 할 예정(웹 프로그래밍은 망하지 않을 듯)

2. jsp (= java server page)

자바 class, 객체 개념 인지 필수!

3. 하드웨어 vs 소프트웨어 vs 펌웨어

  • 하드웨어 : 물리적인 기계 자체
  • 소프트웨어 :
    • 운영체제 : 리눅스, 윈도우, 맥
    • 응용프로그램(application program): excel, power point, 계산기 등등
  • 펌웨어 : 하드웨어+소프트웨어

4. 기억장치(Memory)

  • 주기억장치 : RAM
  • 보조기억장치 : CD-RM, FDD(플로피디스크->USB), HDD(하드디스크드라이브)-발전->SDD
  • 모든 프로그램은 주기억장치에서만 실행된다 : 메모리가 크면 한번에 많은 일을 처리할 수 있어서 메모리가 클수록 성능이 좋다

5. 기본용어

  • 적재(load) : 보조기억장치에서 주기억장치로 (HDD->RAM) 넘어가는 과정
  • 프로그램 : 하드디스크에 들어 있는 상태
  • 프로세스 : 주기억장치에 로드된 상태의 프로그램(실행되고 있는 프로그램) (작업관리자의 백그라운드프로세스가 많을수록 컴터속도가 느려짐)

6. WEB(웹)

인터넷 환경에서 여러가지 정보를 html문서 타입을 결과를 나타내는 환경

7. 웹 브라우저

웹의 정보를 볼 수 잇는 클라이언트 프로그램
ex)익스,크롬,웨일,맥 등

8. 클라이언트 vs 서버

  • 클라이언트 : 정보를 제공 받는 쪽
  • 서버 : 정보를 제공해주는 쪽

9. 클라이언트와 서버는 어떻게 요청을 주고 받을까?

  • 클라이언트가 주소를 검색한다 (https://www.naver.com)
  • http는 통신규약 (보내는 방식, 속도등이 포함되어 있음)
    • http://
    • https:// 후자가 전자보다 보안이 더 좋음
  • 도메인주소는 인간에게 편하게 만든거고 컴퓨터끼리는 IP주소임
  • IP주소 : 웹에서 컴퓨터를 구분하는 값 (0 ~ 255숫자조합임) ex)http://192.168.7.200 인간이 기억하기 어렵기때문에 도메인으로 이용
  • 도메인서버 : IP <-변경-> 도메인 서버 주소 시키는 역활을 함

10.IPv4 VS IPv6

나누는 이유가 뭘까?
원래는 v4(4자리 조합)만 있으면 충분히 사용할 수 있었지만 요즘은 스마트폰, 테블릿, IPTV등 상용화가 많이 이루어지면서 4자리조합힘들어서 v6가 나왔다

  • IPv4 : IP를 4자리로 구분한 것 ex) 192.168.7.200

[패스트캠퍼스python] 조건문과 반복문

파이썬의 흐름제어 : 조건문과 반복문

조건문과 반복문

파이썬은 정말 문법에 자유로운 언어인 것 같다.
조건문, 반복문에도 ()를 넣지 않아도 된다.
점점 내 스타일이다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

1. 조건문

1. 조건문의 Boolean

조건문에서 가장 중요한건 boolean이다

1
2
3
4
5
6
7
if None:
print("Yes1")
else:
print("Yes2")

#출력값은
Yes2

만약 Yes1을 출력하고 싶다면 if 의 조건을 True 값을 넣어야한다
그렇다면 True 와 false 에는 뭐가 있을까?

참 거짓 종류
참 : “내용” [내용] (내용) {내용} 1
거짓 : “” [] () {} 0

Boolean

1
2
3
4
5
6
7
if 1:
print("Yes1")
else:
print("Yes2")

#출력값은
Yes1

2. 관계연산자

다양한 예가 있다.
수학에서의 부등호와 비슷하기 때문에 직관적으로 의미를 알수있다.
==, !=, >, >=, <, <=

3. 논리연산자 : and or not

js에서 and와 or 연산자만 배웠었는데
python에서 not 연산자를 처음 봤다.
not이란 연산자는 되게 흥미로워서 조금 더 찾아봤다
논리연산자진리표를 보면 쉽게 이해가 간다.

아래 이미지는 논리연산자의 쉬운 예시이다

논리연산자예시

아래 코드의 의미는 참이 아닌 것을 출력하시오이다.

1
2
3
4
print(not True)

# 출력값은
False

4. 산술 > 관계 > 논리 순서대로 적용.

위에서 배웠던 세 가지의 연산자들이 동시에 쓰이게 되면 우선순위대로 처리가 이루어진다

1
2
3
4
print('ex1 : ', 5+10 > 0 and not 7+3 == 10)

# 출력값은
ex1 : False

관계연산자와 논리연산자를 함께 쓰면 아래와 같다

1
2
3
4
5
6
7
8
9
score1 = 80
score2 = 'A'
if score1 >= 90 and score2 =='A':
print("합격입니다")
else:
print("불합격입니다")

# 출력값은
불합격입니다

5. 다중조건문 :

다중조건문은 위의 점수조건문을 응용해서 만들어볼 수 있다

다중조건문

num이 82이기에 B값이 터미널에 출력되는 것을 확인 할 수 있다.

2. 파이썬 흐름제어(반복문) : while, for

흐름제어 반복문

1. while과 for문

while문은 아래와 같이 나타낼수있다
while문과 for문이 자유자재로 바꿔 생각할 수 있어야 코딩 초짜를 뗄 수있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
v1 =1
while v1 < 11:
print("vi is :", v1)
v1 +=1
# 출력값은
vi is : 1
vi is : 2
vi is : 3
vi is : 4
vi is : 5
vi is : 6
vi is : 7
vi is : 8
vi is : 9
vi is : 10

이걸 for 문으로 바꾼다면 어떻게 될까?

1
2
3
4
5
6
7
8
9
10
11
12
for v2 in range(1, 11):
print("v2 is : ", v2)
v2 is : 1
v2 is : 2
v2 is : 3
v2 is : 4
v2 is : 5
v2 is : 6
v2 is : 7
v2 is : 8
v2 is : 9
v2 is : 10

2. 1부터 100까지의 합을 구하는 두 가지 방법

  1. 첫번째 방법 while문사용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sum1 = 0
    cnt1 = 1

    while cnt1 <= 100:
    sum1 += cnt1
    cnt1 += 1
    print(' 1 ~ 100합은 : ', sum1)

    # 출력값은
    1 ~ 100합은 : 5050
  2. 두번째 방법 range()함수사용

    1
    2
    3
    4
    print(' 1 ~ 100합은 : ', sum(range(1,101)))

    # 출력값은
    1 ~ 100합은 : 5050
  3. 위의 range 함수 활용
    range()함수는 3번째 매개변수까지 받을 수 있다.
    range(시작값, 끝값, 넘어가는숫자))

예를 들어 1~100까지의 짝수의 합은?

1
2
3
4
5
6
print(' 1 ~ 100까지 짝수의 합은 : ', sum(range(1,101, 2)))
print(' 1 ~ 100까지 짝수의 합은 : ', sum(range(1,101, 10))) # 십단위의 합

# 출력값은
1 ~ 100까지 짝수의 합은 : 2500
1 ~ 100까지 짝수의 합은 : 460

3. 시퀀스

순서가 있는 자료형을 반복 (매우중요)
문자열, 리스트, 튜플, 집합, 사전 이 데이터들은 다 시퀀스 가능
iterable 리턴함수 : range, reversed, enumerate, filter

예제 1 : 값을 하나씩 가져오시오

1
2
3
4
5
6
7
8
names = ['kim', 'park', 'lee']
for v in names:
print("You are : ", v)

# 출력값은
You are : kim
You are : park
You are : lee

예제 2 : ‘word’를 한 글자씩 가져오시오

1
2
3
4
5
6
7
8
9
word = 'word'
for s in word:
print("Word : ", s)

# 출력값은
Word : w
Word : o
Word : r
Word : d

예제 3

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
36
37
my_info = {
'name' : 'kim',
'city' : 'seoul',
'age' : 77
}
# 키를 가져오는 두가지 방법 :기본값과 keys()
print('기본값은 키가져오기')
for key in my_info:
print(key)

for key in my_info.keys():
print(key)
# 값
print('값가져오기')
for key in my_info.values():
print(key)
# 키와 값 둘 다
print('키와 값 둘 다 가져오기')
for k, v in my_info.items():
print(k, v)

# 출력값은
기본값은 키
name
city
age
name
city
age
기본값은 값
kim
seoul
77
기본값은 키와 벨류 둘다
name kim
city seoul
age 77

예제 4 : 대문자는 소문자로, 소문자는 대문자로 바꾸시오

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = 'GoodbYe'

for n in name:
if n.isupper():
print(n.lower())
else:
print(n.upper())

# 출력값은
g
O
O
D
B
y
E

4. break

정말 중요한 break!
사소하지만 효율을 올려준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
numbers = [14,3,4,7,10,33,24,17]

for num in numbers:
if num == 33:
print('찾았다', num)
else:
print('못찾았다')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33
못찾았다
못찾았다

위의 코드로 하면 원하는 값을 찾은 뒤에 2번 더 실행되는 것을 볼 수 있다.
효율이 떨어지므로 break걸어주면 좋다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for num in numbers:
if num == 33:
print('찾았다', num)
break
else:
print('못찾았다')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33

5. for - else 구문

흥미롭게도 python에는 for문에도 else가 있다 (중요)
반복문이 정상적으로 수행 된 경우 else 블럭 수행
블럭안에 break가 들어간 경우 반복문 전체가 실행되지않기에 for-else문이 출력되지않는다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for num in numbers:
if num == 33:
print('찾았다', num)
else:
print('못찾았다')
else:
print('반복문끄읕')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33
못찾았다
못찾았다
반복문끄읕

6. continue

break의 반대이다
아래는 continue를 가장 이해하기 쉬운 예시이다

1
2
3
4
5
6
7
8
lt = ["1", 2, 5, True, 4.3, complex(4)]

for v in lt:
if type(v) is float:
print('찾았다, float : ', v)

# 출력값은
찾았다, float : 4.3

만약 찾은 float빼고 나머지를 보고싶다면?
이때 continue사용하면 좋다!

for v in lt:
    if type(v) is float:
        continue
    print('타입 : ', type(v))

# 출력값은
타입 :  <class 'str'>
타입 :  <class 'int'>
타입 :  <class 'int'>
타입 :  <class 'bool'>
타입 :  <class 'complex'>

float만 빼고 출력된 것을 확인할 수있다
개이득!

[패스트캠퍼스python] 데이터 타입 관련 퀴즈 풀기

파이썬 인강 : 데이터 타입 관련 퀴즈 풀기

내 돈 내고 듣고 있는 패스트캠퍼스의 파이썬 인강!

이때까지 배운 데이터 타입과 관련하여 16문제정도를 풀어보았다.
다양한 방법으로 풀어보고 출력값이 일치하는 거 보니 참 뿌듯했다.
이런 간단한 사항들을 자유자재로 다룰 수 있어야 나중에 프로젝트를 호율적으로 진행할 수 있을 것임에 틀림없다.
간단하다고 약보지말자.
16가지 문제 중 기억해야할 것들을 위주로 블로깅을 해보려고 한다

1. 문자열 “30” 을 각각 정수형, 실수형, 복소수형, 문자형으로 변환해보세요.

이건 형변환문제이고 아주 쉽지만 중요하다
참고로 문자형은 이미 “30” 문자이기때문에 그대로 적어도 되고
str()을 사용해서 만들어도 된다.

1
2
3
4
5
6
7
8
9
10
print(type(int("30")), int("30"))
print(type(float("30")), float("30"))
print(type(complex("30")), complex("30"))
print(type("30"), "30", type(str(30)), str(30))

# 출력값은 아래와 같다
<class 'int'> 30
<class 'float'> 30.0
<class 'complex'> (30+0j)
<class 'str'> 30 <class 'str'> 30

2. 다음 문자열 “Niceman” 에서 “man” 문자열만 추출해보세요.

다양한 방법으로 풀 수 있고 강의에서는 슬라이싱방식과 인덱싱을 이용한 방법으로 풀이해주었다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 첫번째 방법: 슬라이스 활용
q5 = "Niceman"
print(q5[4:]) # 슬라이싱으로 간단하게 처리
print(q5[4:7]) # 슬라이싱으로 간단하게 처리

# 두번째 방법: index활용
q5Idx = q5.index("m")
print(q5Idx)
print(q5[q5Idx:])

# 출력값은 순서대로
man
man
4
man

만약 Nice를 빼고 문자열을 추출해보세요라고 한다면 어떻게 하면 될까?
나는 len()를 이용해서 풀어보았다.
위와 동일한 값이 출력되는 것을 볼 수 있다.
간단하게 응용도 해보니 파이썬을 향한 재미가 쑥쑥 올라간다.

1
2
3
4
5
q5len = len("Nice")
print(q5[q5len:])

# 출력값은
man

3. 다음 문자열을 거꾸로 출력해보세요. : “Strawberry”

간단한 문제라서 reverse()로 접근했다.

1
2
3
4
5
6
q6 = "Strawberry"
q6.reverse()
print(q6)

# 출력값은
에러

에러가 발생해서 깜짝 놀랬는데 알고보니 reverse()는 리스트일때 사용하는거였다.
이제 절대 안 잊어버릴것같다 ㅋㅋㅋㅋ
문자형은 reversed()를 사용하면 된다
심지어 내 에디터가 알려줬는데도 무시해버렸다ㅋㅋㅋㅋ
에디터말 잘 들어야지!

1
2
3
4
print(reversed(q6))

# 출력값은
<reversed object at 0x0000017E087888E0>

이건 우리가 원하는 데이터가 아니므로 list로 형변환시키면된다

1
2
3
4
print(list(reversed(q6))) 

# 출력값은
['y', 'r', 'r', 'e', 'b', 'w', 'a', 'r', 't', 'S']

자 이제 원하는 값이 리스트형태로 나왔으니 슬라이싱 이용하면 된다

1
2
3
4
print(q6[::-1])

# 출력값은
yrrebwartS

손 쉽게 해결!

4. 다음 문자열에서 ‘-‘를 제거 후 출력하세요. : “010-7777-9999”

이번 문제는 실무에서 활용도가 높은 문제였다.
물론 해결방법은 여러가지가 있지만 제일 쉽게 접근 할 수 있는 방법은 역시 슬라이싱이다.
강의에서 슬라이싱뿐만 아니라 아래 이미지처럼 정규표현식을 사용하여 풀이해주었는데 굉장히 재미있었다

4-1 첫번째 방법: 슬라이싱 이용.

1
2
3
4
5
q7 = "010-7777-9999"
print(q7[0:3]+q7[4:8]+q7[9:])

# 출력값은
01077779999

4-2 두번째 방법: 정규표현식 이용.

이번 문제를 통해 정규표현식을 처음 접했는데 굉장히 재미있었다
정규표현식은 언어와 상관없이 표준화가 거의 되어있다.
따라서 정규표현식을 공부하면 언어를 초월해서 해당 언어(java,c,c++,js,python등)에 금방 적응할수있다

  • ^ 의미는 ‘아니다’ 이다.
  • 0-9 는 0부터 9까지라는 의미이다.
  • 즉 [^0-9] 뜻은 숫자제외이다.
  • replace기능 가능 : 예를 들어 010또는 011이면 070으로 바꾸고싶을때 사용가능하다
1
2
3
4
5
6
7
import re
print(re.sub('[^0-9]','', q7))
print(re.sub('010|011','070', q7)) #010또는 011이면 070으로 바꾸고싶다면

# 출력값은
01077779999
070-7777-9999

5. 다음 문자열(URL)에서 “http://“ 부분을 제거 후 출력하세요. : "http://daum.net"

이 문제는 위에서 배운 내용들을 토대로 혼자서 네가지 방식으로 풀어보았다
다 제대로 값이 출력되니 여간 뿌듯한 게 아니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 첫번째 방식: 슬라이싱
q8 = "http://daum.net"
print(q8[7:])

# 두번째 방식: 인덱싱
q8index = q8.index("/")
print(q8index)
print(q8[q8index+2:])

# 세번째 방식: len()길이
q8len = len("http://")
print(q8[q8len:])

# 네번째 방식: 정규표현식
print(re.sub('http://','', q8))

# 출력값은
daum.net
5
daum.net
daum.net
daum.net

6. 다음 문자열을 슬라이싱을 이용해서 “cde”만 출력하세요. : “abcdefghijklmn”

해당 문제는 슬라이싱을 이용해서 풀어라고 했기때문에 아래 이미지처럼 풀면 된다

하지만 이렇게 문자열 길이가 긴 문제의 경우 슬라이싱으로 몇 번째 인덱스인지 직접 세는 것보다 인덱싱을 활용하는 게 더 편하다고 생각해서 인덱싱으로 풀어보았다

1
2
3
4
5
6
q10 = "abcdefghijklmn"
q10Index = q10.index("cde")
print(q10[q10Index:q10Index+3])

# 출력값은
cde

7. 다음 리스트에서 “Apple” 항목만 삭제하세요. : [“Banana”, “Apple”, “Orange”]

리스트의 remove()를 이용해서 간단하게 풀었다

1
2
3
4
5
q11 = ["Banana", "Apple", "Orange"]
print(q11.remove("Apple"))

# 출력값은
None

그런데 출력값이 None이 떠서 당황했다.
remove()한 내용은 출력할 필요가 없고 삭제완료한 리스트를 print하면 되었던 문제였다

1
2
3
4
5
6
q11 = ["Banana", "Apple", "Orange"]
q11.remove("Apple")
print(q11)

# 출력값은
['Banana', 'Orange']

[패스트캠퍼스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는 결과를 도출한다.