PYTHON-BACK

#파이썬 기초 3일차

Astero 2024. 7. 1. 16:16
728x90

가상환경 설정

 

cd /

mkdir  명령을 통해 작업용 폴더(디렉토리)를 생성함

mkdir workspace

cd .\workspace\

python -m venv [생성하고자 하는 가상환경의 이름]

.\Scripts\activate

    프롬프트 앞에 (가상환경이름)이 표시되면 활성화 성공

 

가상환경 활성화 오류 발생 시 해결 방안

windows powerShell


cd \

cd . \workspace\

ls

python -m venv webserver(생성하고자하는 가상환경 이름)

cd .\webserver\

.\Scripts\activate

(webserver) PS C:\workspace\webserver> (이런식으로 뜨면 성공)

 

deactivate  (하면 가상환경 비활성화)

 

한방에 activate까지 들어가려면

cd \ (이후에)

cd .\workspace\webserver\Scripts

.\activate


3. 자료형

 

3.1 리스트

- 리스트는 대부분의 프로그래밍 언어에서 배열, Array라고 표현하는 것과 비슷함

 

  • 배열은 동일한 형태(실수끼리, 문자열끼리... 등)의 데이터 여러 개가 순서대로 모여 있는 것을 말하지만 파이썬의 List는 꼭 동일한 형태가 아니어도 관계없습니다.
  • 예를 들면 Java와 같은 언어에서의 Collection 이란 것과 비슷하다고 볼 수 있습니다.
  • 리스트의 데이터는 대괄호 [ ]로 둘러싸서 표시하며 내부의 데이터는 콤마( , )로 구분합니다.
list_1 = [1, 3, 5, 7, 9]
list_2 = ['hello', 'good morning', 'a', 'b', 'c']
list_3 = [2, 4, 'bye', [6, 8, 10], ['see', 'you', 'later']]
print(list_1)
print(list_2)
print(list_3)

[1, 3, 5, 7, 9]

['hello', 'good morning', 'a', 'b', 'c']

[2, 4, 'bye', [6, 8, 10], ['see', 'you', 'later']]

 

리스트는 인덱스라는 것을 가지고 접근하며, 인덱스는 0부터 시작한다.

따라서 list_1에 0번 인덱스는 1, 4번 인덱스는 9이다.

list_3의 4번 인덱스는 ['see', 'you', 'later'] 이다. (리스트 안 리스트 형태)

 

3.2 튜플(Tuple)

  • 튜플은 리스트와 비슷한데 리스트는 안에 들어있는 값을 바꿀 수 있는 반면에 튜플은 바꿀 수 없다는 차이가 있습니다.
  • 튜플의 데이터는 괄호 ( ) 로 둘러싸서 표시하며 안에 있는 데이터는 콤마( , )로 구분합니다.

 

list_4 = [1, 2, 3, 4, 5]
tuple_1 = (1, 2, 3, 4, 5)
print(list_4)
list_4[2] = 10
print(list_4)

[1, 2, 3, 4, 5]

[1, 2, 10, 4, 5]

print(tuple_1)
tuple_1[2] = 10
print(tuple_1)

(1, 2, 3, 4, 5)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-673e4377b279> in <cell line: 2>()
      1 print(tuple_1)
----> 2 tuple_1[2] = 10
      3 print(tuple_1)

TypeError: 'tuple' object does not support item assignment

  • 리스트와 달리 튜플에서는 안에 있는 값을 바꾸려고 하면 오류가 발생한다.

 

3.3 딕셔너리(Dictionary)

  • 딕셔너리의 데이터는 중괄호 { } 로 둘러싸서 표시하며 내부의 데이터는 콤마( , )로 구분
  • 딕셔너리의 데이터는 "키:값"의 형태를 가진 한 쌍의 요소로 구성되어 있다. (키 콜론 값)
  • 리스트, 튜플과 달리 딕셔너리는 데이터에 인덱스가 지정되어있지 않다. (가장 중요한 특징)
  • "키:값"으로 구성된 데이터 쌍에서 "키"를 [ ] 안에 입력하여 원하는 데이터를 지정하고 사용한다.
  • 딕셔너리의 키와 값에는 어떤 데이터라도 사용할 수 있다.
  • 딕셔너리의 값에는 리스트, 튜플, 딕셔너리가 들어갈 수도 있다.
  • 그런데 "키"라는 것은 단 하나를 지칭하기 위한 것이니까 여기에는 리스트와 같은 것을 지정하시면 안된다.
  • 그리고 리스트와 마찬가지로 딕셔너리도 내부의 값을 바꿀 수 있다.
dictionary_1 = {0:'False', 'a':"small A", "b":"small B", 'three':3, 'four':4, 1:['a', 'b']}
print(dictionary_1)

{0: 'False', 'a': 'small A', 'b': 'small B', 'three': 3, 'four': 4, 1: ['a', 'b']}

- 키: 값 순서로 나온것

print(dictionary_1[1])
print(dictionary_1["a"])
print(dictionary_1['four'])

['a', 'b']

small A

4

dictionary_1["b"] = "alphabet small B"
print(dictionary_1["b"])

alphabet small B

 

4. 데이터 처리를 위한 구문

 

4.1 문자열 처리

4.1.1 특정 위치의 문자 얻기

txt1 = 'A tale that was not right'
txt2 = '이 또한 지나가리라'
print(txt1[5])
print(txt2[-2])

e

 

4.1.2 지정한 구간의 문자열 얻기

print(txt1[3:7])
ale
- 3부터 시작해서 7 앞까지

- 시작점은 포함이고 끝점은 포함하지 않는다

print(txt1[:6])

A tale

- 앞부분이 비워있는 경우

 

print(txt1[7:])

that was not right

print(txt2[-2])

h

- -는 뒤로가라는 의미이다.

 

print(txt2[-4:])

ight

- -를 이용해서도 구간을 가져올 수 있다.

 

print(txt2[2:-4])

tale that was not r

 

txt = 'python'

for i in range(len(txt)):
    print(i, ":", txt[:i+1])

0 : p

1 : py

2 : pyt

3 : pyth

4 : pytho

5 : python'

 

4.1.3 홀수 번째 문자만 추출하기

txt = 'aAbBcCdDeEfFgG'

result = txt[::2]
print(result)

abcdefg

 

txt = 'aAbBcCdDeEfFgG'

result = txt[1::2]
print(result)

ABCDEFG

 

4.1.4 문자열 거꾸로 만들기

txt = 'abcdefg'

result = txt[::-1]
print(result)

gfedcba

- 거꾸로해서 역으로 돌아가라 

 

4.1.5 특정 문자가 있는지 확인하기

msg = '안녕하세요'

if '안' in msg:
    print('문자열에 안이 포함되어 있음')
else:
    print('문자열에 안이 포함되어 있지 않음')

문자열에 안이 포함되어 있음

 

4.1.6 숫자인지 알파벳인지 검사하기

txt1 = '010-1234-5678'
result1 = txt1.isdigit()
print(result1)

False

txt2='R2D1'
print(txt2.isdigit())

False

 

-주로 가독성이 얼마나 좋은가로 나눔 위 두 코드는 동일함

 

txt3 = '1234'
print(txt3.isdigit())

True

 

  • 문자열이 문자만으로 구성되었는지 확인하기
txt1 = 'A'
print(txt1.isalpha())

True

 

txt2 = '안녕'
print(txt2.isalpha())

True

 

txt3 = 'star Craft'
print(txt3.isalpha())

False

- 스페이스바 같은 특수문자는 반영안됨

 

  • 문자열이 문자와 숫자만으로 구성되었는지 확인하기
  • isalnum()알파벳인지 숫자인지 확인
txt1 = '안녕하세요'
txt2 = '1. Title-제목을 입력하세요'
txt3 = '3피오R2D2'
result1 = txt1.isalnum()
result2 = txt2.isalnum()
result3 = txt3.isalnum()
print(result1)
print(result2)
print(result3)

True

False

True

 

문자열 조작하는 작업은 데이터 분석, AI 학습을 위한 데이터 조작에 많이 활용되므로 다양하게 익혀두어야 한다.

 

5.  조건문 (if 구문)

  • 말 그대로, 순서대로 쭉 이어서 가다가 이런 경우에는 이렇게 해라~라고 조건을 주고 그 조건에 따른 동작을 지정해 주는 것
  • 컴퓨터에게 처리를 위한 조건을 알려주는 구문을 조건문 이라함.
  • 가장 기본적인 조건문은 if ~~ else OO 구문이 있습니다.
  • 만약~~이면 OO를 해라. 라는 의미입니다.
 
a = 10
b = 20

if a > b:
  print("a가 b보다 큽니다.")
else:
  print("a가 b보다 크지 않습니다.")

a가 b보다 크지 않습니다.

 

if - elif - else 구문

  • 조건이 많으면 elif는 여러번 들어갈 수 있다.
a = 20
b = 20

if a>b:
  print("a가 b보다 큽니다.")
elif a == b:
  print("a와 b는 같습니다.")
else:
  print('a가 b보다 작습니다.')

a와 b는 같습니다.

 

5.1.2 중첩 if

a = 20
b = 30

if a>b:
  print("a가 b보다 큽니다.")
else:
    if a  == b:
        print('a와 b가 같습니다.')
    else:
        print('a가 b보다 작습니다.')

a가 b보다 작습니다.

 

5.2 반복문

  • 파이썬에서 사용하는 반복문은 크게 For 문과 While 문의 두 가지로 구분
  • 그 중에서 가장 많이 사용되는 것이 For 문이며, For 문은 다양한 활용 형태를 가진다.

 5.2.1 While문

  • while 문은 for 문과 다르게 반복하기 위한 조건이 주어진다는 점이 특징
  • while 문에 따라오는 조건을 만족하는 동안 계속해서 반복 작업을 수행하라는 의미
x = 1

while x < 10:
    print(x)
    x = x + 1

1

2

3

4

5

6

7

8

9

 

5.2.2 for 문

  • 먼저 가장 기본적인 형태
area = [1,3,5,7,9]

for x in area:
  print(x)

1

3

5

7

9

  • for 구문에는 리스트 외에도 문자열(문자열도 엄밀히 말하면 문자들의 리스트), 딕셔너리, 범위 등이 사용될 수 있다.

튜플로 바꿔서 실행 (리스트와 동일하게 작동함)

 

area = (1,3,5,7,9)

for x in area:
  print(x)

1

3

5

7

9

area = (1,3,5,7,9)

for x in area:
  print(x, end='')

13579

- end쓰면 1열로 이어서 작동됨

# 문자열을 사용한 예
area_string = 'Hello'
for x in area_string:
  print(x, end='')

Hello

- 문자를 써도 동일하게 작동된다.

 

# 딕셔너리를 사용한 예
area_dictionary = {'a':'Nice', 'b':'to', 'c':'meet', 'd':'you'}

for x in area_dictionary:
    print(x)

a

b

c

d

 

-딕셔너리에서는 키에 따른 값을 가져옴으로 기본적으로 키를 가져오게 된다.

 

  •  "Nice", "to", "meet", "you"를 출력하고 싶은데 이것은 어떻게 해야할까?
  • for 구문이 사용하는 것은 딕셔너리에 포함된 값을 순서대로 꺼낸 것이기 때문에 "키:값"의 쌍에서 "키"만을 사용하고 있다.
  • 우리는 area_dictionary 변수를 사용해서 출력해 줄 수 있겠죠. 키를 사용할 수 있으니까요.
for x in area_dictionary:
    print(area_dictionary[x])

Nice

to

meet

you

 

키와 벨류를 같이 보게 하려면

for x in area_dictionary:
  print(x, ':', area_dictionary[x])

a : Nice

b : to

c : meet

d : you

 

 파이썬에서는 어떤 함수의 결과로 하나의 값만 받는 것이 아니라 두 개 이상의 값을 받을 수 있다.

for key, value in area_dictionary.items():
  print(key, ':', value)

a : Nice

b : to

c : meet

d : you

  • items( ) 라는 것도 딕셔너리 클래스가 가지고 있는 함수 중의 하나
  • 딕셔너리 변수가 가지고 있는 각 항목들을 키와 값의 쌍으로 돌려주는 기능을 함.
  • 한개의 변수만 가져오게 되면 튜플로 묶어서 가져오게 된다.

range 함수를 사용한 예제

  • range( ) 함수는 내부에 지정된 범위 안의 숫자를 돌려주는 함수
  •  range( ) 함수에서는 범위 안의 숫자 사이의 간격을 지정할 수도 있음
for x in range(5):
  print(x)

0

1

2

3

4

for x in range(3, 5):
    print(x)

3

4

for x in range(3,10,2):
    print(x)
3
5
7
9
 
 

5.2.3 for 문의 확장

 if ~~ 구문을 이용해서 For 문을 빠져나간다거나

반복 작업 속에서 상황에 따라 다른 작업을 선택하도록 할 수 있다.

파이썬에서는 for ~ continue ~ break구문과 for ~ else 구문을 제공한다.

 

for ~ break 구문 - for구문을 어떤 조건에 맞춰서 중단시키는 구문

area = [1,3,4,6,7]
for x in area:
  print(x)
  if x > 4:
    break

1

3

4

6

 

for x in area:
  if x>4:
    break
  print(x)

1

3

4

- 같은 코드지만 break에 위치에 따라서 동작이 달라지는 것을 확인해볼 수 있다.

 

for x in area:
    print(x)
    if x >= 4:
        break

1

3

4

- 결국 우리가 원하는 형태를 만들기 위해서 가공하는 것은 차이가 별로 없다

 

for ~ continue ~ break 구문

  • for ~ continue ~ break 구문은 반복문을 수행하던 도중에 어떤 조건을 만나면 반복문을 계속 수행하고, 그 조건을 만족하지 않으면 반복문을 빠져나가도록 하는 구문이다
area = [1, 3, 4, 6, 7]

for x in area:
    print(x)
    if x < 4:
        continue
    else:
        break
    print("continue")

1

3

4

 

  • continue 구문은 해당 조건을 만족할 경우 반복문을 계속 실행하라는 의미인데, 중요한 것은 continue 구문 이후의 명령들은 생략하라~ 라는 의미라는 것이다.
  • 그렇기 때문에 print("continue")는 언제나 생략되어 출력되지 않은 것 이다.
area = [1, 3, 4, 6, 7]

for x in area:
    print(x)
    if x < 4:
        continue
    elif x > 6:
        break
    print("continue")

1

3

4

continue

6

continue

7

 

아래는 continue쓰지 않고 동일한 코드 만든것임

for x in area:
    print(x)
    if x > 6:
        break
    elif x > 3:
      print("continue")

1

3

4

continue

6

continue

7

 

for ~ else 구문

  • for ~ else 구문은 반복문이 break 명령에 의해서 중단되지 않은 경우에만 else 안의 명령을 수행하라는 구문
  • 어떤 처리를 할때 전부 다 마무리 됐다 하는것을 넣어주기 위해 사용
  • 처리가 다 마무리 되면 출력
for x in area:
  print(x)
else:
  print('finish')

1

3

4

6

7

finish

 

  • else는 final이라는 것과 비슷하게 사용됨
  • final은 어떤 조건을 만족해도 만족하지 않아도 출력함.
for x in area:
    print(x)
    if x > 7:
        break
else:
    print("finish")

1

3

4

6

7

finish

  • x가 7보다 큰 경우에 break를 걸어줌
  • 리스트 area의 마지막 값인 7이 x > 7을 만족하지 않았기 때문에 if문을 만족하기 전에 for문이 끝나버림
  • break 명령에 걸리지 않게 되었으므로 "Finish"가 출력됨 (break를 만났느냐 만나지 않고 종료했느냐를 구분)

별첨) while에서 continue

x = 1

while True:
    x = x + 1
    if x < 5:
        continue
    print(x)

    if x > 7:
        break

5

6

7

8

 

6. 기본 문법을 가지고 활용

 

6.1 딕셔너리 처리

dictionary_ = {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingredient": ["망고", "설탕", "메타중아황산나트륨"],
    "origin": "필리핀"
}
print(dictionary_["name"])

7D 건조 망고

 

value = dictionary_.get("name")
print("값:", value)

값: 7D 건조 망고

 

6.2  스플릿

- 컴마 기준으로 스플릿하면 리스트로 만들어진다.

str = "짜장,짬뽕,탕슉"
print(str.split(","))

['짜장', '짬뽕', '탕슉']

 

6.3 3가지의 출력방식

- %d 숫자 출력

- %s 스트링 출력

price = 500
price2 = 1000
print("궁금하면 %d원! 너는 %d원" % (price2, price)) # 순서 조작 상관 없을시
print("궁금하면 {1}원! 너는 {0}원".format(price, price2)) # 순서 조작 필요시
print(f'궁금하면 {price2}원! 너는 {price}원') # 변경 변수 직접 작성시

궁금하면 1000원! 너는 500원

궁금하면 1000원! 너는 500원

궁금하면 1000원! 너는 500원

 

6.3 pass

- 큰 프로그램 만들때 처음부터 세세하게 제작이 어려움으로, 함수같은거 만들때 이름같은거만 만들고 넘어가는 경우가 많은데 이때 사용(개발 할때 팁처럼 사용)

number = 1
if number > 0:
    pass
else:
    pass
for dan in range(2, 10):
  print(dan, "단")
  for hang in range(2, 10):
    print(dan , "*", hang, "=", dan*hang)
  print() # 구분 빈줄 출력

2 단
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3 단
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4 단
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5 단
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6 단
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

7 단
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

8 단
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9 단
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

 

7.  예외처리

  • 프로그램을 만들때 생각하지 못한 일들이 발생시 처리하는 방법
  • 에러처럼 오류가 우리의 통제를 벗어나는지 아닌지를 확인
  • 가능하면 예외처리는 무저껀 한다 생각해야함
  • 파이썬에서는 cotch 대신에 except를 사용함
print('안녕하세요.')
print(param)

안녕하세요.
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-84-6d5ed5ef1d00> in <cell line: 2>()
      1 print('안녕하세요.')
----> 2 print(param)

NameError: name 'param' is not defined

  •  except를 사용하여 예외처리
  • 우리가 만든 프로그램이 통제를 벗어나지 않았다라는 것을 보여줌
try:
    print('안녕하세요.')
    print(param)

except:
    print('예외가 발생했습니다.')

안녕하세요.

예외가 발생했습니다.

 

param = "반갑습니다"
try:
    print('안녕하세요.')
    print(param)

except:
    print('예외가 발생했습니다.')

안녕하세요.

반갑습니다.

 

  • finally:는 예외가 있건 없건 마지막에 무저껀 출력해주는 코드
  • finally 앞단에 예외처리를 이용해서 예외가 어디 발생했는지 확인가능

 

  • 예외처리를 하면서도 동시에 어떤 예외가 발생했는지 확인하는 코드
  • Exception 이라는 클래스는 다양한 예외 정보를 다룸
try:
    print('안녕하세요.')
    print(param3)

except Exception as e:
    print(e)
    print('예외가 발생했습니다.')

안녕하세요.
name 'param3' is not defined
예외가 발생했습니다.

 

키보드 인터럽트 예외

키보드 인터럽트 예외를 발생시키기 위하여 무한루프

 

import time

count = 1
try:
    while True:
        print(count)
        count += 1
        time.sleep(0.5)

except KeyboardInterrupt:
    print('사용자에 의해 프로그램이 중단되었습니다.')

1
2
3
4
5
6
7
8
9
사용자에 의해 프로그램이 중단되었습니다.

 

이러한 예외는 하나만 들어가는게 아니고 여러 개 넣을 수 있다.

import time

count = 1
try:
    while True:
        print(count1)
        count += 1
        time.sleep(0.5)

except KeyboardInterrupt:
    print('사용자에 의해 프로그램이 중단되었습니다.')
except NameError:
    print('잘못된 이름이 사용되었습니다.')

잘못된 이름이 사용되었습니다.

728x90