프로그램에서 필요한 요소만을 사용해서 객체를 표현하는 것을 추상화라고 합니다.

학생 성적 관리 프로그램 만들기

# 학생 리스트를 선언합니다.
students = [
    { "name": "윤인성", "korean": 87, "math": 98, "english": 88, "science": 95 },
    { "name": "연하진", "korean": 92, "math": 98, "english": 96, "science": 98 },
    { "name": "구지연", "korean": 76, "math": 96, "english": 94, "science": 90 },
    { "name": "나선주", "korean": 98, "math": 92, "english": 96, "science": 92 },
    { "name": "윤아린", "korean": 95, "math": 98, "english": 98, "science": 98 },
    { "name": "윤명월", "korean": 64, "math": 88, "english": 92, "science": 92 }
]

# 학생을 한 명씩 반복합니다.
print("이름", "총점", "평균", sep="\t")
for student in students:
    # 점수의 총합과 평균을 구합니다.
    score_sum = student["korean"] + student["math"] +\
        student["english"] + student["science"]
    score_average = score_sum / 4
    # 출력합니다.
    print(student["name"], score_sum, score_average, sep="\t")

 

딕셔너리로 학생을 표현하고 리스트로 묶어 학생들을 표현했습니다.

이처럼 여러가지 속성을 가질 수 있는 대상을 객체라고 부릅니다.

현재 코드에서 학생이 바로 객체입니다.

 

클래스 선언하기

class 클래스 이름:

    클래스 내용

 

클래스를 기반으로 만들어진 객체를 인스턴스라고 부릅니다.

 

클래스가 가지고 있는 함수를 메소드라고 부릅니다.

class 클래스 이름:

    def 메소드 이름(self, 추가적인 매개변수)

        pass

 

 

'혼공파' 카테고리의 다른 글

07-2 외부 모듈  (0) 2024.02.11
혼공파 7장 모듈(1)  (0) 2024.02.04
혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21

07-2 외부 모듈

사이킷-런(scikit-learn), 텐서플로우(Tensorflow), 장고(Django), 플라스크(Flask), 넘파이(NumPy)를 외부 모듈이라고 합니다. 앞으로는 이런 모듈 책을 학습하시는 것이 좋다고 해요.

이번 과정은 Beautiful Soup, Flask 모듈을 공부하는데요.

 

먼저 사용하기 위해서 설치를 해야 하는데요.

pip install 모듈이름

 

Beautiful Soup은 웹 페이지를 분석할 때 사용하는 모듈입니다.

기사청의 전국 날씨 정보를 가져와서 출력해 보겠습니다.

# 모듈을 읽어 들입니다.
from urllib import request
from bs4 import BeautifulSoup

# urlopen() 함수로 기상청의 전국 날씨를 읽습니다.
target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")

# BeautifulSoup을 사용해 웹 페이지를 분석합니다.
soup = BeautifulSoup(target, "html.parser")

# location 태그를 찾습니다.
for location in soup.select("location"):
    # 내부의 city, wf, tmn, tmx 태그를 찾아 출력합니다.
    print("도시:", location.select_one("city").string)
    print("날씨:", location.select_one("wf").string)
    print("최저기온:", location.select_one("tmn").string)
    print("최고기온:", location.select_one("tmx").string)
    print()
# 모듈을 읽어 들입니다.
from flask import Flask
from urllib import request
from bs4 import BeautifulSoup

# 웹 서버를 생성합니다.
app = Flask(__name__)
@app.route("/")

def hello():
    # urlopen() 함수로 기상청의 전국 날씨를 읽습니다.
    target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")

    # BeautifulSoup를 사용해 웹 페이지를 분석합니다.
    soup = BeautifulSoup(target, "html.parser")

    # location 태그를 찾습니다.
    output = ""
    for location in soup.select("location"):
        # 내부의 city, wf, tmn, tmx 태그를 찾아 출력합니다.
        output += "<h3>{}</h3>".format(location.select_one("city").string)
        output += "날씨: {}<br/>".format(location.select_one("wf").string)
        output += "최저/최고 기온: {}/{}"\
            .format(\
                location.select_one("tmn").string,\
                location.select_one("tmx").string\
            )
        output += "<hr/>"
    return output

Flask 모듈

웹 개발을 할 때 사용하는 모듈은 장고와 플라스크입니다.

장고는 매우 다양한 기능을 제공하는 웹 개발 프레임워크입니다.

플라스크는 작은 기능만을 제공하는 웹 개발 프로엠워크입니다.

 

사용하기 위해 설치해야 하는데요.

pip install flask

 

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Hello World!</h1>"

@로 시작하는 구문을 파이썬에서는 '데코레이터'라고 부릅니다.

데코레이터는 꾸며주는 건데요.

함수 데코레이터와 클래스 데코레이터로 나뉘게 됩니다.

 

외부 모듈은 사용하는 목적에 따라 다른데요.

웹 서버 개발을 위해서는 Django, Flask

인공지능 개발을 위해서는 scikit-learn, tensorflow, keras

데이터 분석을 위해서는 pandas, matplotlib

크롤러 개발을 위해서는 BeautifulSoup, requests, scrapy

를 활용하시면 됩니다.

 

 

'혼공파' 카테고리의 다른 글

혼공파 08 클래스  (1) 2024.02.11
혼공파 7장 모듈(1)  (0) 2024.02.04
혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21

7장부터는 고급편으로 다른 사람이 만든 것을 활용하는 방법을 배우게 됩니다.

파이썬은 모듈이라는 기능을 활용해 코드를 분리하고 공유합니다.

모듈은 여러 변수와 함수를 가지고 있는 집합체로 크게 표준 모듈과 외부 모듈로 나뉩니다.

 

사용하는 방법은

import 모듈 이름

 

import.math

모듈에 대한 정보는 파이썬 공식 문서에서 확인할 수 있습니다.

 

사용하는 방법은

math.sin(x)
x 라디안의 사인(sine)을 반환합니다.

 

이렇게 사용하는데요.

math.cos(), math.sin(), math.pi처럼 앞에 무언가를 계속 입력해야 하는 것이 귀찮다면 from 구문을 사용할 수 있습니다.

from math import sin, cos, tan, floor, ceil

 

from math import *

math를 붙이는 것이 싫고, 모든 기능을 가져와 사용하는 것이 목적이라면 * 기호를 사용합니다.

 

이렇게 모든 모듈을 가져와 사용하다보면 충돌이 나는 경우가 발생하는데요.

as를 사용해서 짧게 만들어 사용할 수 있습니다.

 

import 모듈 as 사용하고 싶은 식별자

 

import math as m
m.sin(1)

 

랜덤한 값을 생성할 때 사용하는 모듈

import random

 

import random
print("# random 모듈")

# random(): 0.0 <= x < 1.0 사이의 float를 리턴합니다.
print("- random():", random.random())

# uniform(min, max): 지정한 범위 사이의 float를 리턴합니다.
print("- uniform(10, 20):", random.uniform(10, 20))

# randrange(): 지정한 범위의 int를 리턴합니다.
# - randrange(max): 0부터 max 사이의 값을 리턴합니다.
# - randrange(min, max): min부터 max 사이의 값을 리턴합니다.
print("- randrange(10)", random.randrange(10))

# choice(list): 리스트 내부에 있는 요소를 랜덤하게 선택합니다.
print("- choice([1, 2, 3, 4, 5]):", random.choice([1, 2, 3, 4, 5]))

# shuffle(list): 리스트의 요소들을 랜덤하게 섞습니다.
print("- shuffle([1, 2, 3, 4, 5]):", random.shuffle([1, 2, 3, 4, 5]))

# sample(list, k=<숫자>): 리스트의 요소 중에 k개를 뽑습니다.
print("- sample([1, 2, 3, 4, 5], k=2):", random.sample([1, 2, 3, 4, 5], k=2))
# random 모듈
- random(): 0.9667180292767871
- uniform(10, 20): 18.153949827852813
- randrange(10) 4
- choice([1, 2, 3, 4, 5]): 4
- shuffle([1, 2, 3, 4, 5]): None
- sample([1, 2, 3, 4, 5], k=2): [5, 1]

 

sys모듈

시스템과 관련된 정보를 가지고 있는 모듈

 

os 모듈

운영체제와 관련된 기능을 가진 모듈

새로운 폴더를 만들거나 폴더 내부의 파일 목록을 보는 일도 모두 os 모듈을 활용해서 처리합니다.

 

datetime 모듈

날짜, 시간과 관련된 모듈

날짜 형식을 만들 때 자주 사용되는 코드로 구성

 

# 모듈을 읽어 들입니다.
import datetime

# 현재 시각을 구하고 출력하기
print("# 현재 시각 출력하기")
now = datetime.datetime.now()
print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")
print()

# 시간 출력 방법
print("# 시간을 포맷에 맞춰 출력하기")
output_a = now.strftime("%Y.%m.%d %H:%M:%S")
output_b = "{}년 {}월 {}일 {}시 {}분 {}초".format(now.year,\
now.month,\
now.day,\
now.hour,\
now.minute,\
now.second)
output_c = now.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초")
print(output_a)
print(output_b)
print(output_c)
print()
# 현재 시각 출력하기
2024 년
2 월
4 일
15 시
28 분
36 초

# 시간을 포맷에 맞춰 출력하기
2024.02.04 15:28:36
2024년 2월 4일 15시 28분 36초
2024년 02월 04일 15시 28분 36초

 

 

time 모듈

import time

print("지금부터 5초 동안 정지합니다!")
time.sleep(5)
print("프로그램을 종료합니다")

 

urllib 모듈'URL'을 다루는 라이브러리

# 모듈을 읽어 들입니다.
from urllib import request

# urlopen() 함수로 구글의 메인 페이지를 읽습니다.
target = request.urlopen("https://google.com")
output = target.read()

# 출력합니다.
print(output)

 

'혼공파' 카테고리의 다른 글

혼공파 08 클래스  (1) 2024.02.11
07-2 외부 모듈  (0) 2024.02.11
혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21

프로그래밍 언어의 오류에는 2가지 종류가 있습니다.

구문오류 - 프로그램 실행 전에 발생하는 오류

예외, 런타임오류 - 프로그램 실행 중에 발생하는 오류

구문오류(Syntax error)

괄호의 갯수, 들여쓰기 문제 등으로 발생하는 오류입니다.

구문 오류는 해결하지 않으면 프로그램 자체가 실행되지 않습니다.

 

예외(exception), 런타임오류(runtime error)

실행중에 발생하는 오류입니다.

 

기본 예외 처리(exception handling

예외를 해결하는 과정의 모든 것을 예외 처리라고 부릅니다.

조건문을 사용하는 방법

try 구문을 사용하는 방법

 

number_input_a = int(input("정수 입력> "))

print("원의 반지름:", number_input_a)
print("원의 둘레:", 2 * 3.14 * number_input_a)
print("원의 넓이:", 3.14 * number_input_a * number_input_a)

이렇게 코드를 만들고 숫자를 입력하면 결과 값이 나옵니다.

정수 입력> 15
원의 반지름: 15
원의 둘레: 94.2
원의 넓이: 706.5

그런데 입력할 때 숫자와 함께 문자를 넣으면 에러가 발생하는데요.

정수 입력> 15cm   
Traceback (most recent call last):
  File "h06.py", line 1, in <module>
    number_input_a = int(input("정수 입력> "))
ValueError: invalid literal for int() with base 10: '15cm'

 

이런 문제를 해결하기 위해 조건문으로 예외처리해 보겠습니다.

 

# 숫자를 입력받습니다.
user_input_a = input("정수 입력> ")

# 사용자 입력이 숫자로만 구성되어 있을 때
if user_input_a.isdigit():
    # 숫자로 변환합니다.
    number_input_a = int(user_input_a)
    # 출력합니다.
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
else:
    print("정수를 입력하지 않았습니다.")

숫자와 문자를 함께 넣어도 문제없이 프로그램이 작동되는 것을 확인할 수 있습니다.

그런데 조건문 만으로 예외처리 할 수 없기에 try except 구문을 사용하는 것이 편리합니다.

 

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드

   

try:
    number_input_a = int(input("정수 입력> "))
    
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)

except:
    print("문제가 생겼습니다.")

 

try except 구문과 pass 키워드를 조합해서 예외가 발생하면 그냥 넘어가도록 할 수도 있습니다.

 

try excepr else 구문

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
except:
    # 예외가 발생했을 때 실행할 코드
    print("정수를 입력하지 않았습니다.")

else:
    # 예외가 발생하지 않았을 때 실행할 코드
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)

 

finally 구문

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
except:
    # 예외가 발생했을 때 실행할 코드
    print("정수를 입력하지 않았습니다.")

else:
    # 예외가 발생하지 않았을 때 실행할 코드
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
    
finally:
    # 무조건 실행할 코드
    print("무조건 출력되는 문장이랍니다.")
"""
정수 입력> 15
원의 반지름: 15
원의 둘레: 94.2
원의 넓이: 706.5
무조건 출력되는 문장이랍니다.
"""

 

구문 오류와 예외의 차이는

구문 오류는 프로그램의 문법적인 오류로 실행조차 되지 않는 오류이고요.

예외는 프로그램 실행 중에 발생하는 오류입니다.

이런 오류를 방지하기 위해 try except 구문을 사용합니다.

 

 

예외 고급

try:
    # 예외가 발생할 가능성이 있는 코드
    number_input_a = int(input("정수 입력> "))
    
    print("원의 반지름:", number_input_a)
    print("원의 둘레:", 2 * 3.14 * number_input_a)
    print("원의 넓이:", 3.14 * number_input_a * number_input_a)
    
    
except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("type(exception): ", type(exception))
    print("exception: ", exception)
정수 입력> 8cm 
type(exception):  <class 'ValueError'>
exception:  invalid literal for int() with base 10: '8cm'

이 코드에서는 잘못된 값을 입력할 때 생기는 ValueError이 나오는데요.

값의 범위를 벗어나는 경우에는 IndexError이 발생됩니다.

 

list_number = [4, 2, 42, 53, 170]

try:
    number_input_a = int(input("정수 입력> "))
    
    print("{}번째 요소: {}".format(number_input_a, list_number[number_input_a]))
    
except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("type(exception): ", type(exception))
    print("exception: ", exception)

이렇게 코딩을 해서 

정수 입력> 2
2번째 요소: 42

이렇게 출력이 되는데요.

정수 입력> 10
type(exception):  <class 'IndexError'>
exception:  list index out of range

 

범위를 넘어서는 값을 입력하면 에러가 납니다.

이렇게 예외의 종류가 달라지는데요.

예외의 종류에 따라 구분하는 코드를 만들어 보겠습니다.

 

list_number = [4, 2, 42, 53, 170]

try:
    number_input_a = int(input("정수 입력> "))
    
    print("{}번째 요소: {}".format(number_input_a, list_number[number_input_a]))
    
except ValueError:
    print("정수를 입력해 주세요")
    
except IndexError:
    print("리스트의 범위를 벗어났습니다.")

이렇게 만들면 되고요.

이외에도 다양한 에러가 발생했을 때 실행할 예외구문을 넣어 주는 경우가 필요한데요.

이럴때는 가장 뒤에 

except Exception as exception:
    # 예외 객체를 출력해봅니다.
    print("미리 파악하지 못한 예외가 밠애했습니다.")
    print("exception: ", exception)

를 추가시켜 주면 됩니다.

 

raise 구문

아직 구현되지 않은 부분이므로 일부러 예외를 발생시켜 프로그램을 주겍 만들어 잊지않도록 하는 키워드입니다.

raise 예외 객체

 

 

'혼공파' 카테고리의 다른 글

07-2 외부 모듈  (0) 2024.02.11
혼공파 7장 모듈(1)  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15

함수 만들기

함수를 사용한는 것을 프로그래밍에서는 '함수를 호출한다'라고 표현합니다.

함수를 호출할 때는 괄호 앞에 여러 가지 자료를 넣는데요.

이런 자료를 매개변수라고 합니다.

그리고 함수를 호출해서 최종적으로 나오는 결과값을 리턴값이라고 부릅니다.

 

def 함수 이름():

    문장

 

def print_n_times(value, n):
    for i in range(n):
        print(value)

print_n_times("안녕하세요", 5)
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요

 

이렇게 동작합니다.

 

매개변수와 관련된 TypeError 예외처리

함수를 생성할 때 매개변수를 만들었는데 함수를 호출할 때 매개변수를 넣지 않거나 더 많이 넣으면 어떻게 될까요?

이때 나는 에러가 TypeError입니다.


가변 매개변수는 함수 안에 매개변수를 원하는 만큼 받을 수 있는 함수를 뜻합니다.

def print_n_times(n, *values):
    for i in range(n):
        for value in values:
            print(value)
        print()

print_n_times(3, "안녕하세요", "즐거운", "파이썬 프로그램")

 

안녕하세요
즐거운
파이썬 프로그램

안녕하세요
즐거운
파이썬 프로그램

안녕하세요
즐거운
파이썬 프로그램

 

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

value가 바로 가변 매개변수입니다.

 

기본적인 함수의 활용

def 함수(매개변수):
    변수 =  초깃값
    # 여러 가지 처리
    # 여러 가지 처리
    # 여러 가지 처리
    return 변수

 

def sum_all(start=0, end=100, step=1):
    output = 0
    for i in range(start, end + 1, step):
        output += i
    return output

print("A.", sum_all(0, 100, 10)) # A. 550
print("B.", sum_all(end=100)) # B. 5050
print("C.", sum_all(end=100, step=2)) # C. 2550

 

함수의 활용

함수를 만드는 기본적인 방법을 알고 있어도 실제로 함수들이 어떻게 사용되는지 많이 접해 보지 않으면 제대로 활용할 수 없습니다. 이번 절에서는 함수를 활용하는 주요 패턴에 대해서 살펴보겠습니다.

 

재귀함수

 

반복문으로 팩토리얼 구하기

def factorial(n):
    output = 1
    for i in range(1, n + 1):
        output *= i
    return output

print("1!:", factorial(1))
print("2!:", factorial(2))
print("3!:", factorial(3))
print("4!:", factorial(4))
print("5!:", factorial(5))

 

재귀 함수를 사용해 팩토리얼 구하기

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print("1!:", factorial(1))
print("2!:", factorial(2))
print("3!:", factorial(3))
print("4!:", factorial(4))
print("5!:", factorial(5))

 

함수 고급

튜플 : 함수와 함께 많이 사용되는 리스트와 비슷한 자료형으로 리스트와 다른 점은 한번 결정된 요소는 바꿀 수 없다는 것

[a, b] = [10, 20]
(c, d) = (10, 20)

print("a:", a) # a: 10
print("b:", b) # b: 20
print("c:", c) # c: 10
print("d:", d) # d: 20

 

람다 : 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭고, 코드 공간 낭비라는 생각이 들 때 함수를 간단하고 쉽게 선언하는 방법

def call_10_times(func):
    for i in range(10):
        func()

def print_hello():
    print("안녕하세요")

call_10_times(print_hello)

 

 

파일처리

파일과 관련된 처리를 하는 함수는 표준 함수가 기본으로 제공됩니다.

파일은 크게 텍스트 파일과 바이너리 파일로 나뉘는데 여기서는 텍스트 파일과 관련된 내용만 살펴보겠습니다.

 

파일 객체 = open(문자열: 파일 경로, 문자열: 읽기 모드)

모드 설명
w write 모드(새로 쓰기 모드)
a append(뒤에 이어서 쓰기 모드)
r read(읽기 모드)

 

file = open("basic.txt", "w")
file.write("Hello Python Programming...!")

file.close()

 

with 키워드

with open("basic.txt", "w") as file:
    file.write("Hello Python Programming...!")

이렇게 코드를 작성하면 with 구문이 종료될 때 자동으로 파일이 닫힙니다.

따라서 파일을 열고 닫지 않는 실수를 줄일 수 있습니다.

 

 

텍스트 읽기

파일 객체.read()

with open("basic.txt", "r") as file:
    contents = file.read()
print(contents)
import random
hanguls = list("가나다라마바사아자차카타파하")
    
with open("info.txt", "w") as file:
    for i in range(1000):
        name = random.choice(hanguls) + random.choice(hanguls)
        weight = random.randrange(40, 100)
        height = random.randrange(140, 200)

        file.write("{}, {}, {}\n".format(name, weight, height))

'혼공파' 카테고리의 다른 글

혼공파 7장 모듈(1)  (0) 2024.02.04
혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15
혼공파 ch2 자료형  (0) 2024.01.14

학습목표

리스트, 딕셔너리, 범위를 이해한다.

for 반복문과 리스트, 딕셔너리, 범위를 조합하는 방법을 배운다.

while 반복문을 배운다.

break, continue 이해하기

 

리스트

자료를 저장할 수 있는 자료?

 

리스트 선언하기

[1, 2, 3, 4]

nums = [1, 2, 3, 4]
print(nums) # [1, 2, 3, 4]
print(nums[1]) # 2

 

리스트 값 변경은

리스트에 변경할 값을 입력해 주면 됩니다.

nums = [1, 2, 3, 4, "a", "에이"]
print(nums) # [1, 2, 3, 4, 'a', '에이']
print(nums[3:5]) # [4, 'a']
nums[5] = "A"
print(nums) # [1, 2, 3, 4, 'a', 'A']

대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있습니다.

nums = [1, 2, 3, 4, "a", "에이"]
print(nums[-1]) # 에이
print(nums[-4]) # 3

리스트 접근 연산자를 이중으로 사용할 수 있습니다.

nums = [1234, "대한민국", "ABCD"]
print(nums[1][0]) # 대
print(nums[0][3]) # TypeError: 'int' object is not subscriptable

전 4자를 뽑아오고 싶었는데 에러가 나네요.

그래서 고민하다가 str를 사용해 봤습니다.

nums = [str(1234), "대한민국", "ABCD"]
print(nums[1][0])
print(nums[0][3])

일단 제가 원했던 결과는 나오네요.

 

다음으로 리스트 안에 리스트를 사용할 수 있다고 해요.

nums = [[1, 2, 3, 4], ["대", "한", "민", "국"], "ABCD"]
print(nums[0][2]) # 3
print(nums[1][1]) # 한
print(nums[2][2]) # C

 

리스트 연산자 : + 연결, * 반복 len() 길이

list_a = [1, 2, 3]
list_b = [4, 5, 6]

print("list_a + list_b = ", list_a + list_b) # list_a + list_b =  [1, 2, 3, 4, 5, 6]
print("list_a * 3 = ", list_a * 3) # list_a * 3 =  [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(len(list_a) + len(list_b)) # 6

리스트에 요소를 추가할 때

는 append(요소), insert(위치, 요소)를 사용합니다.

append()는 가장 뒤에 추가되고요.

insert()는 원하는 위치를 적어서 추가하면 됩니다.

list_a = [1, 2, 3]
list_a.append(4)
list_a.append(5)
print(list_a) # [1, 2, 3, 4, 5]
list_a.insert(0, 6)
print(list_a) # [6, 1, 2, 3, 4, 5]

extend()는 한 번에 여러개를 추가할 수 있습니다.

list_a = [1, 2, 3]
list_b = [4, 5]
list_a.extend(list_b)
print(list_a) # [1, 2, 3, 4, 5]
list_a.extend([6, 7, 8, 9])
print(list_a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

리스트에서 요소를 제거하는 방법

값으로 제거하는 방법 : remove, clear

list_a = [1, 2, 3, 4, 5, 6, 7]
list_a.remove(4)
print(list_a) # [1, 2, 3, 5, 6, 7]
list_a.clear()
print(list_a) # []

 

인덱스로 제거하는 방법 : del, pop(인덱스)

list_a = [1, 2, 3, 4, 5, 6, 7]
list_a.pop(4)
print(list_a) # [1, 2, 3, 4, 6, 7]

pop(4)를 적었는데요.

숫자 4가 삭제된 것이 아니라 인덱스[4]가 삭제되어 5값이 지워졌습니다.

list_a = [1, 2, 3, 4, 5, 6, 7]
del list_a[4]
print(list_a) # [1, 2, 3, 4, 6, 7]

 

del()를 사용해서도 삭제할 수 있습니다.

 

리스트 내부에 있는지 확인하는 in / not in 연산자

list_a = [1, 2, 3, 4, 5, 6, 7]
print(4 in list_a) # True 4가 리스트에 있어서 True
print(10 not in list_a) # True 10이 리스트에 없어서 True

 

for 반복문

print("출석")
print("출석")
print("출석")
print("출석")
print("출석")

for i in range(5):
    print("출석")

 

앞의 리스트를 반복에 사용할 수 있습니다.

list_a = [1, 2, 3, 4, 5, 6, 7]

for i in list_a:
    print(i)

 

딕셔너리와 반복문

리스트가 인덱스를 기반으로 값을 저장하는 것이라면 딕셔너리는 키를 기반으로 값을 저장하는 것입니다.

변수 = {

    키 : 값,

    키 : 값.

 

}

 

dic1 = {"a" : 1, "b" : 2, "c" : 3}
dic2 = {"a1" : 20, "b1" : 20, "c1" : 30}

print(dic2["a1"]) # 20

dic2[a1] = 200
print(dic2["a1"]) # 200

딕셔너리 값에 리스트를 넣을 수도 있는데요.

dic1 = {"a" : [1, 2, 3, 4], "b" : ["A", "B", "C", "D"]}

print(dic1["a"])
print(dic1["a"][1])

이렇게 사용할 수 있습니다.

 

리스트와 딕셔너리의 사용법을 정확하게 익히는 것이 중요할 것 같네요.

리스트 list_a = [] list_a[1]
딕셔너리 dic_a = {} dic_a["name"]

 

딕셔너리 값 변경은

dic1 = {"a" : [1, 2, 3, 4], "b" : ["A", "B", "C", "D"]}

print(dic1["a"][1]) # 2
dic1["a"][1] = 200
print(dic1["a"][1]) # 200

 

d1 = {'a': 2, 'b': 4, 'c': 30}
d2 = {'a1': 20, 'b1': 40, 'c1': 60}

for key in d1:
    print( key , ":" , d1[key])

딕셔너리는 키를 기반으로 여러 자료를 저장하는 자료형입니다.

키는 딕셔너리 내부에서 값에 접근할 때 사용하는 것입니다.

값은 딕셔너리 내부에 있는 각각의 내용을 의미합니다.

 

pets = [
    {"name" : "구름", "age" : 5},
    {"name" : "초코", "age" : 3},
    {"name" : "아지", "age" : 1},
    {"name" : "호랑이", "age" : 1}
]

print("# 우리 동네 애완 동물들")
for i in pets:
    # print(i)
    print(i["name"], str(i["age"]), "살")

 

반복문과 while 반복문

어떤 조건이 될 때까지 반복하는 형태의 반복을 배우게 됩니다.

 

범위 :  range(5)

 

while 반복문

 

while 불 표현식"

    문장

 

i = 0
while i < 10:
    print("{}번째 반복입니다.".format(i))
    i += 1

 

상태를 기반으로 반복하기

리스트에 3이 있으면 삭제하기

list1 = [1, 2, 3, 2, 3, 1, 3]

while 3 in list1:
    list1.remove(3)
    
print(list1) # [1, 2, 2, 1]

 

시간을 기반으로 반복하기

유닉스 타임은 시간은 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것인데요.

사용하는 형식은

 

import time

number = 0

target_time = time.time() + 5

while time.time() < target_time:
    number += 1

print(number) # 46099988

 

문자열, 리스트, 딕셔너리와 관련된 기본 함수

리스트에 적용할 수 있는 기본 함수 : min(), max(), sum()

num = [104, 105, 95, 456, 183]

print(min(num))
print(max(num))
print(sum(num))

 

reversed() 함수로 리스트 뒤집기

num = [104, 105, 95, 456, 183]
num_reversed = reversed(num)

print(num) # [104, 105, 95, 456, 183]
print(num_reversed)
print(list(num_reversed)) # [183, 456, 95, 105, 104]

 

num = [1, 2, 3, 4, 5, 6, 7]

for i in reversed(num):
    print(i)
    
for i in reversed(num):
    print(i+10)
    
print(num[::-1]) # [7, 6, 5, 4, 3, 2, 1]

 

enumerate() 함수와 반복문 조합하기

example_list = ["요소A", "요소B", "요소C"]

출력값

0번째 요소는 요소A입니다.

1번째 요소는 요소B입니다.

2번째 요소는 요소C입니다.

이렇게 출력하기 위해서는 인덱스가 필요한데요.

인덱스를 강제적으로 만들어 주는 함수가 enumerate() 함수입니다.

 

example_list = ["요소A", "요소B", "요소C"]
print(list(enumerate(example_list))) # [(0, '요소A'), (1, '요소B'), (2, '요소C')]

for i, value in enumerate(example_list):
    print("{}번째 요소는 {}입니다.".format(i, value))
///
0번째 요소는 요소A입니다.
1번째 요소는 요소B입니다.
2번째 요소는 요소C입니다.
///

 

 

딕셔너리의 items() 함수와 반복문 조합하기

enumerate()함수가 리스트 형태로 반복문을 작성할 수 있는 것처럼

딕셔너리에는 items()함수로 키와 값을 조합해서 반복문을 작성할 수 있습니다.

 

리스트 내포

 

array = []

for i in range(0, 20, 2):
    array.append(i * i)

print(array) # [0, 4, 16, 36, 64, 100, 144, 196, 256, 324]

 

리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것]
array = [i * i for i in range(0, 20, 2)]
print(array)

이렇게 코딩 할 수 있습니다.

 

리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것 if 조건문
array = [i * i for i in range(0, 20, 2)]
print(array) # [0, 4, 16, 36, 64, 100, 144, 196, 256, 324]

# 조건 추가한 리스트
output = [num for num in array if num != 16]
print(output) # [0, 4, 36, 64, 100, 144, 196, 256, 324]

'혼공파' 카테고리의 다른 글

혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 ch3 조건문  (1) 2024.01.15
혼공파 ch2 자료형  (0) 2024.01.14
혼공파 1주 파이썬 시작하기 자료형  (1) 2024.01.05

03-1 불 자료형과 if 조건문

불 연산자 : 비교 연산자

불 자료형은 비교 연산자를 이용해서 만듭니다.

print(101 == 100) # False
print(101 != 100) # True

이렇게 비교 연산자를 이용해서 불 자료형을 만들 수 있는데요.

 ==        같음                  x == y   (True, 만약 x와 y가 같으면) 
 !=        같지 않음           x != y   (True, 만약 x와 y가 다르면) 
 <         작음                    x < y    (True, 만약 x가 y보다 작으면) 
 >         큼                        x > y    (True, 만약 x가 y보다 크면) 
 <=       작거나 같음         x <= y   (True, 만약 x가 y보다 작거나 같으면) 
 >=        크거나 같음        x >= y   (True, 만약 x가 y보다 크거나 같으면) 

 

숫자 이 외에도 문자와 범위로도 사용할 수 있습니다.

print("가방" == "책가방") # False
print("책가방" != "책가방") # False

x = 10
print(5 < x < 20) # True

 

불 연산자 : 논리 연산자

파이썬에서 논리 연산자는 불리언 값 (True 또는 False) 간의 논리적인 연산을 수행하는데 사용됩니다. 주요 논리 연산자는 다음과 같습니다.

and (논리곱): 두 조건이 모두 True일 때만 True를 반환합니다.
True and True   # True
True and False  # False
False and True  # False
False and False # False

 

or (논리합): 두 조건 중 하나라도 True이면 True를 반환합니다.
True or True    # True
True or False   # True
False or True   # True
False or False  # False

 

not (논리부정): 주어진 조건의 반대를 반환합니다.
not True  # False
not False # True

 

논리 연산자는 조건문, 반복문 및 다양한 프로그래밍 상황에서 조건을 평가하고 제어하는 데 사용됩니다. 논리 연산자를 조합하여 복잡한 조건을 만들 수 있습니다.

 

if 조건문

조건문에 따라 실행하거나 실행하지 않도록 할 때 사용됩니다.

 

if 조건:
    # 조건이 참(True)일 때 실행되는 코드 블록
    # 이 코드 블록은 들여쓰기로 표시된다 (보통 4칸 또는 탭)
else:
    # 조건이 거짓(False)일 때 실행되는 코드 블록
    # 이 코드 블록도 들여쓰기로 표시된다

 

if 조건1:
    # 조건1이 참일 때 실행
elif 조건2:
    # 조건1이 거짓이고 조건2가 참일 때 실행
else:
    # 모든 조건이 거짓일 때 실행

 

number = input("숫자를 입력해 주세요 ")
number = int(number)

if number > 0:
    print("양수입니다.")

if number < 0:
    print("음수입니다")

if number == 0:
    print("0입니다")

 

날짜/시간 활용하기

import datetime

now = datetime.datetime.now()

print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")

format함수를 사용해서 만들어 보겠습니다.

import datetime

now = datetime.datetime.now()

print("{}년 {}월 {}일 {}시 {}분 {}초".format(
    now.year,
    now.month,
    now.day,
    now.hour,
    now.minute,
    now.second
)) # 2024년 1월 15일 8시 9분 2초

 

03-2 if~else와 elif 구문

number = input("숫자를 입력해 주세요 ")
number = int(number)

if number % 2 == 0:
    print("짝수입니다.")
else:
    print("홀수입니다.")

 

import datetime

now = datetime.datetime.now()

if 3<= now.month <=5:
    print("지금은 봄입니다.")
elif 6<= now.month <= 8:
    print("지금은 여름입니다.")
elif 9<= now.month <= 11:
    print("지금은 가을입니다.")
else:
    print("지금은 겨울입니다.")

 

사용자에게 태어난 연도를 입력받아 띠를 출력하는 프로그램

str_input = input("당신이 태어난 해를 입력해 주세요> ")
birth_year = int(str_input)

if birth_year % 12 == 0:
    print("당신은 원숭이 띠입니다")
elif birth_year % 12 == 1:
    print("당신은 닭 띠입니다")
elif birth_year % 12 == 2:
    print("당신은 개 띠입니다")
elif birth_year % 12 == 3:
    print("당신은 돼지 띠입니다")
elif birth_year % 12 == 4:
    print("당신은 쥐 띠입니다")
elif birth_year % 12 == 5:
    print("당신은 소 띠입니다")
elif birth_year % 12 == 6:
    print("당신은 범 띠입니다")
elif birth_year % 12 == 7:
    print("당신은 토끼 띠입니다")
elif birth_year % 12 == 8:
    print("당신은 용 띠입니다")
elif birth_year % 12 == 9:
    print("당신은 뱀 띠입니다")
elif birth_year % 12 == 10:
    print("당신은 말 띠입니다")
else:
    print("당신은 양 띠입니다")

'혼공파' 카테고리의 다른 글

혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch2 자료형  (0) 2024.01.14
혼공파 1주 파이썬 시작하기 자료형  (1) 2024.01.05

2주 커리큘럼

혼자 공부하는 파이썬(개정판)
진도: Chapter 02(02-3) ~ 03
기본 미션: p. 187 3번 문제 풀고 본인이 태어난 해와 띠를 출력하는 결과값 화면 인증하기
선택 미션: else 구문과 elif 구문 정리한 내용 포스팅하기

02-3 변수와 입력

변수는 변할 수 있는 자료

pi = 3.14159265
r = 10
pi
print("원주율 =", pi) # 원주율 = 3.14159265   
print("반지름 =", r) # 반지름 = 10
print("원의 둘레 =", 2*pi*r) # 원의 둘레 = 62.831853 
print("원의 넓이 =", r*r*pi) # 원의 넓이 = 314.159265

 

파이썬에서는 자바, C언어와는 다르게 변수를 선언하지 않습니다.

그래서 같은 변수에 여러 종류의 자료형을 넣을 수 있습니다.

a = "문자열"
print(a)

a = True
print(a)

a = 10
print(a)

이렇게 사용해도 에러가 나지 않지만 되도록 하나의 자료형을 넣어서 사용하기를 권장하네요.

 

input() 사용법

number = input("숫자를 입력하세요>")
print(number)

그런데 문자를 입력했는데 에러가 나질 않습니다.

input() 함수는 사용자가 무엇을 입력해도 무조건 문자열 자료형으로 받기 때문입니다.

 

그럼 숫자로 입력해서 더하기를 하기 위해서는 어떻게 해야 할까요?

바로 문자열을 숫자로 변환시켜 주는 int(), float() 함수를 사용해야 합니다.

 

a = input("입력A")
b = input("입력B")
print(int(a) + int(b))

a = input("입력A")
b = input("입력B")
print(a + b)

 

* ValueError 예외

변환할 수 없는 것을 변환하려고 하면 ValueError 발생

 

02-4 숫자와 문자열의 다양한 기능

format() 함수로 숫자를 문자열로 변환한다.

upper()

a = "Hello Python"
a.upper() # HELLO PYTHON

lower()

b = "Hello Python"
b.lower() # hello python

 

문자열 양옆의 공백 제거하기 : strip()

양쪽 공백 strip()

왼쪽의 공백 lstrip()

오른쪽의 공백 rstrip()

a = """
       Hello 
    Python    
        """
print(a.strip())

문자열 찾기 : fine(), rfine()

text = "땡큐땡큐 베리 머치".find("땡큐")
print(text) # 0

text = "땡큐 땡큐 베리 머치".rfind("땡큐")
print(text) # 3

문자열과 in 연산자

print("안녕" in "안녕하세요") # True
print("잘가" in "안녕하세요") # False

문자열 자르기 : split()

num = "10 20 30 40 50 60".split(" ")
print(num) # ['10', '20', '30', '40', '50', '60']

'혼공파' 카테고리의 다른 글

혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15
혼공파 1주 파이썬 시작하기 자료형  (1) 2024.01.05

 

파이썬을 설치할 때 Add Python ** 체크하는 이유

 

파이썬을 공부할 때 필요한 것은 뭐가 있을까요?
1. 파이썬 코드를 입력할 수 있는 텍스트 에디터
2. 파이썬 코드를 실행하는 파이썬 인터프리터
파이썬 프롬프트라 불리는 >>> 에 코드를 입력하면 바로 실행결과를 볼 수 있는데요.
이것을 상호작용하는 공간이라는 의미로 인터렉티브 셸
또는 한 마디씩 대화를 주고 받기 때문에 대화형 셸이라 부른다고 하네요.
키워드는 특별한 의미가 부여된 단어, 파이썬이 미리 예약한 단어이기 때문에 사용할 수 없다.
식별자는 프로그래밍 언어에서 이름을 붙일 때 사용하는 단어, 변수, 함수, 클래스로 사용된다.
키워드를 사용하면 안되고, 특수 문자는 _만 사용, 숫자를 가장 앞에 넣어서 사용할 수 없다. 공백 X

프로그램은 자료를 처리하는 역할을 합니다.
카메라로 사진을 찍으면 사진이 자료이고, 이를 카메라에 저장하는 것이 처리입니다.
카카오톡으로 친구에게 사진과 함께 "여기 어때?"라는 메시지를 보냈다면 사진과 메시지가 자료이고, 이를 친구에게 전송하는 것이 처리입니다.

자료의 형식을 확인할 때 type() 함수 사용
이스케이프문자는 역슬래시(\) 기호와 함께 조합해서 사용하는 특수한 문자를 의미한다.
\n : 줄바꿈을 의미합니다. 
\r : 탭을 의미합니다.

문자열 연산자
문자열 연결 연산자 : +
문자열은 무조건 문자열끼리 + 기호를 사용해서 연결해야 한다.
숫자라 하더라도 문자열과 함께 + 연산하려면 ""로 붙여 주어야 한다.
문자열 반복 연산자 : *
문자열 * 숫자
숫자만큼 문자열을 반복해서 출력한다.
문자 선택 연산자(인덱싱) : []
문자 선택 연산자는 문자열 내부의 문자 하나를 선택하는 연산자이다.
[]안에 선택할 문자의 위치를 지정하며 이 숫자를 인덱스라고 부른다.
파이썬은 제로 인덱스
문자열 범위 선택 연산자(슬라이싱) [:]
문자열의 범위를 선택할 때 사용하는 연산자
[] 기호를 이용해 문자열의 특정 위치에 있는 문자를 참조하는 것을 인덱싱이라 하고, [:]기호를 이용해 문자열의 일부를 추출하는 것을 슬라이싱이라 합니다;.


기본 미션: p. 101 3~5번 실행 결과 쓰고 인증하기
3번 문제
print("# 연습문제")
print("\\\\\\\\")
print("-" *😎


4번 문제
print("안녕하세요"[1])
print("안녕하세요"[2])
print("안녕하세요"[3])
print("안녕하세요"[4])
print("안녕하세요"[5])


5번 문제
print("안녕하세요"[1:3])
print("안녕하세요"[2:4])
print("안녕하세요"[1:])
print("안녕하세요"[:3])




#혼공학습단 #혼공 #혼공파

'혼공파' 카테고리의 다른 글

혼공파 5주 예외처리 6장  (0) 2024.02.04
혼공파 4주차 5장 함수  (2) 2024.01.28
혼공파 3주차 Ch04 반복문  (1) 2024.01.21
혼공파 ch3 조건문  (1) 2024.01.15
혼공파 ch2 자료형  (0) 2024.01.14

+ Recent posts