sugenius

[초보자를 위한 파이썬 300제] 201 to 300 본문

Python

[초보자를 위한 파이썬 300제] 201 to 300

sugeniusk 2021. 3. 21. 08:39

초보자를 위한 파이썬 300제 

wikidocs.net/book/922

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net


👉 함수 (201 to 240)

# 09. 파이썬 함수
# 201 ~ 210
# ___________________________________

#"비트코인" 문자열을 화면에 출력하는 print_coin() 함수를 정의
def print_coin():
    print("비트코인")

#함수호출
print_coin()

for i in range(100) : 
    print_coin()

def print_coins() :
    for i in range(100) : 
        print("비트코인")

def message() :
    print("A")
    print("B")
message()
print("C")
message()

 

# 09. 파이썬 함수
# 211 ~ 220
# ___________________________________

def 함수(문자열) :
    print(문자열)
함수("안녕")
함수("Hi")
'''출력:
안녕
Hi
'''

def 함수(a, b) :
    print(a + b)

함수(3, 4)
함수(7, 8)

def print_with_smile(string) :
    print(string , ":D")
print_with_smile("안녕하세요")

def print_upper_price(현재가격) : 
    print(현재가격*1.3)

def print_sum (a,b) : 
    print(a+b)

def print_arithmetic_operation(a,b) :
    print(a,"+",b,"=",a+b)
    print(a,"-",b,"=",a-b)
    print(a,"*",b,"=",a*b)
    print(a,"/",b,"=",a/b)

def print_max (a,b,c) :
    max_val = 0 
    if a>max_val:
        max_val = a 
    if b > max_val :
        max_val = b
    if c > max_val :
        max_val = c
    print(max_val)

 

# 09. 파이썬 함수
# 221 ~ 230
# ___________________________________

def print_reverse (string) :
    print(string[::-1])
print_reverse("python") #출력:nohtyp

def print_score(score_list) :
    print(sum(score_list)/len(score_list))
print_score ([1, 2, 3]) #출력:2.0

def print_even(list) :
    for i in list : 
        if i%2 == 0 : 
            print(i)
print_even ([1, 3, 2, 10, 12, 11, 15])
'''출력 : 
2
10
12
'''

def print_keys(dic) :
    for k in dic.keys() :
        print(k)
print_keys ({"이름":"김말똥", "나이":30, "성별":0})
'''출력:
이름
나이
성별
'''

my_dict = {"10/26" : [100, 130, 100, 100],
           "10/27" : [10, 12, 10, 11]}
def print_value_by_key (my_dict,k) :
    print ( my_dict[k] )
print_value_by_key  (my_dict, "10/26") #출력 : [100, 130, 100, 100]

#입력 문자열을 한 줄에 다섯글자씩 출력
def print_5xn(string) :
    ch = int(len(string)/5)
    for i in range(ch+1) :
        print(string[i*5:i*5+5])
print_5xn("아이엠어보이유알어걸")

#문자열과 한줄에 출력될 글자 수를 입력을 받아 한 줄에 입력된 글자 수만큼 출력
def printmxn(line , num) :
    ch = int( len(line)/num )
    for x in range(ch+1) :
        print(line[x*num : x*num+num])
printmxn("아이엠어보이유알어걸", 3)
'''출력:
아이엠
어보이
유알어
걸
'''

#연봉을 입력받아 월급을 계산. 1원 미만은 버림
def calc_monthly_salary(sal) :
    monsal = int(sal/12) #입력된 값을 12로 나누고 형변환을 해서 1원 미만을 절사함
    return monsal
calc_monthly_salary(12000000)

def my_print (a, b) :
    print("왼쪽:", a)
    print("오른쪽:", b)

my_print(b=100, a=200)
'''출력:
왼쪽: 200
오른쪽: 100
'''

 

# 09. 파이썬 함수
# 231 ~ 240
# ___________________________________

def make_url(string) :
    return "www." + string + ".com"
make_url("naver")

#문자열을 입력받아 각 문자들로 구성된 리스트로 반환
def make_list(string) :
    list = []
    for i in string :
        list.append(i) #틀린 오답 : list.append(string[i])
    return list
make_list("abcd") #출력 ['a', 'b', 'c', 'd']
#문자열을 list로 형변환하면 쉽게 문제를 해결
def make_list (string) :
    return list(string)

#하나의 리스트를 입력받아, 짝수들을 추출하여 리스트로 반환
def pickup_even(list) :
    result = []
    for i in list :
        if i%2 == 0 :
            result.append(i)
    return result
pickup_even([3, 4, 5, 6, 7, 8])

#콤마가 포함된 문자열 숫자를 입력받아 정수로 변환
def convert_int(string) :
    return int(string.replace(",",""))
convert_int("1,234,567")

👉 모듈 (241 to 250)

# 10. 파이썬 모듈
# 241 ~ 250
# ___________________________________

#현재시간
#datetime 모듈을 사용해서 현재 시간을 화면에 출력
import datetime
now = datetime.datetime.now()
print(now) #출력 : 2021-03-21 06:23:37.722876

#현재시간의 타입
#datetime 모듈의 now 함수의 리턴 값의 타입을 화면에 출력
import datetime
now = datetime.datetime.now()
print(now, type(now)) #출력 : 2021-03-21 06:30:08.947733 <class 'datetime.datetime'>

#timedelta
#datetime 모듈의 timedelta를 사용해서 오늘로부터 5일, 4일, 3일, 2일, 1일 전의 날짜를 화면에 출력
import datetime
now = datetime.datetime.now()
for day in range(5,0,-1):
    delta = datetime.timedelta(days=day)
    date = now - delta
    print(date)
'''출력 : 
2021-03-16 06:32:43.259229
2021-03-17 06:32:43.259229
2021-03-18 06:32:43.259229
2021-03-19 06:32:43.259229
2021-03-20 06:32:43.259229
'''

#strftime
#trftime 메서드. 현재시간을 얻어온 후 다음과 같은 포맷으로 시간을 출력
import datetime
now = datetime.datetime.now()
print(now.strftime("%H:%M:%S")) #출력 : 06:48:45

#strptime
#datetime.datetime.strptime 메서드를 사용하면 문자열 형식의 시간을
#datetime.datetime 타입의 시간 값으로 만들어줌
#"2020-05-04"의 문자열을 시간 타입으로 변환
import datetime
day = "2020-05-04"
ret = datetime.datetime.strptime(day, "%Y-%m-%d")
print(ret, type(ret)) #출력 : 2020-05-04 00:00:00 <class 'datetime.datetime'>

#sleep 함수
#time 모듈, datetime 모듈을 사용해서 1초에 한 번 현재 시간을 출력하는 코드
import time
import datetime
'''
while True :
    now = datetime.datetime.now()
    print(now)
    time.splee(1)
'''

#모듈 임포트
#모듈을 임포트하는 4가지 방식
'''
'''

#os 모듈
#os 모듈의 getcwd 함수를 호출하여 현재 디렉터리의 경로
import os 
ret = os.getcwd()
print(ret,type(ret)) #출력 : C:\python_study <class 'str'>

#rename 함수
#바탕화면에 텍스트 파일을 하나 생성한 후 os 모듈의 rename 함수를 호출하여 해당 파일의 이름을 변경
'''
import os
os.rename("C:/Users/hyunh/Desktop/before.txt", "C:/Users/hyunh/Desktop/after.txt")
'''

#numpy
#numpy 모듈의 arange 함수를 사용해서 0.0 부터 5.0까지 0.1씩 증가하는 값을 화면에 출력
import numpy
for i in numpy.arange(0, 5, 0.1):
    print(i)

👉 클래스 (251 to 290)

# 11. 파이썬 클래스
# 251 ~ 260
# ___________________________________

#클래스, 객체, 인스턴스 개념 알기

#클래스 정의
class Human : 
    pass
#참고 파이썬 pass와 continue
#https://zetawiki.com/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC_pass%EC%99%80_continue_%EC%B0%A8%EC%9D%B4%EC%A0%90

#인스턴스 생성
# (Human) 클래스의 인스턴스를 "생성" 하고 이를 areum 변수로 바인딩
class Human : 
    pass 
areum = Human()

#클래스 생성자-1
#(Human) 클래스에 "응애응애"를 출력하는 생성자를 추가
class Human : 
    def __init__(self) :
        print("응애응애")
areum = Human()

# 클래스 생성자-2
# (Human) 클래스에 (이름, 나이, 성별)을 받는 생성자를 추가
class Human : 
    def __init__(self, name, age, sex) :
        self.name = name 
        self.age = age
        self.sex = sex
areum = Human("아름", 25, "여자")
print(areum.name)

#인스턴스 속성에 접근
#생성한 인스턴스의 이름, 나이, 성별을 출력
class Human:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

areum = Human("아름", 25, "여자")
print(areum.age)

#클래스 메소드 - 1
#(Human) 클래스에서 이름, 나이, 성별을 출력하는 who() 메소드를 추가
class Human : 
    def __init__(self,name,age,sex) :
        self.name = name
        self.age = age
        self.sex = sex 
    def who(self) :
        print("이름: {} 나이: {} 성별: {}" .format(self.name,self.age,self.sex)) 
areum = Human("아름",25,"여자")
areum.who() 
#Human.who(areum)
#출력:이름: 조아름, 나이: 25, 성별: 여자

# 클래스 메소드 - 2
class Human:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def who(self):
        print("이름: {} 나이: {} 성별: {}".format(self.name, self.age, self.sex))

    def setInfo(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


areum = Human("불명", "미상", "모름")
areum.who()      # Human.who(areum)

areum.setInfo("아름", 25, "여자")
areum.who()      # Human.who(areum)

#클래스 소멸자
class Human:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __del__(self):
        print("나의 죽음을 알리지마라")

    def who(self):
        print("이름: {} 나이: {} 성별: {}".format(self.name, self.age, self.sex))

    def setInfo(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

areum = Human("아름", 25, "여자")
del(areum) #출력 : 나의 죽음을 알리지 말라

 

# 11. 파이썬 클래스
# 261 ~ 270
# ___________________________________

class Stock:
    def __init__(self, name, code):
        self.name = name
        self.code = code

삼성 = Stock("삼성전자", "005930")
print(삼성.name)
print(삼성.code)


class Stock:
    def __init__(self, name, code):
        self.name = name
        self.code = code

    def set_name(self, name):
        self.name = name

a = Stock(None, None)
a.set_name("삼성전자")  # Stock.set_name(a, "삼성전자")
print(a.name)


class Stock:
    def __init__(self, name, code):
        self.name = name
        self.code = code

    def set_name(self, name):
        self.name = name

    def set_code(self, code):
        self.code = code

a = Stock(None, None)
a.set_code("005930")
print(a.code)


class Stock:
    def __init__(self, name, code):
        self.name = name
        self.code = code

    def set_name(self, name):
        self.name = name

    def set_code(self, code):
        self.code = code

    def get_name(self):
        return self.name

    def get_code(self):
        return self.code

삼성 = Stock("삼성전자", "005930")
print(삼성.name)
print(삼성.code)
print(삼성.get_name())
print(삼성.get_code())


class Stock:
    def __init__(self, name, code, per, pbr, dividend):
        self.name = name
        self.code = code
        self.per = per
        self.pbr = pbr
        self.dividend = dividend

    def set_name(self, name):
        self.name = name

    def set_code(self, code):
        self.code = code

    def get_name(self):
        return self.name

    def get_code(self):
        return self.code

    def set_per(self, per):
        self.per = per

    def set_pbr(self, pbr):
        self.pbr = pbr

    def set_dividend(self, dividend):
        self.dividend = dividend

종목 = []

삼성 = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)
현대차 = Stock("현대차", "005380", 8.70, 0.35, 4.27)
LG전자 = Stock("LG전자", "066570", 317.34, 0.69, 1.37)

종목.append(삼성)
종목.append(현대차)
종목.append(LG전자)

for i in 종목:
    print(i.code, i.per)        # i-> Stock 클래스의 객체를 바인딩하기 때문

    

 

# 11. 파이썬 클래스
# 271 ~ 280
# ___________________________________

#Account 클래스
#Account 클래스를 생성한 후 생성자를 구현
#생성자에서는 예금주와 초기 잔액만 입력 받음 
#은행이름은 SC은행으로 계좌번호는 3자리-2자리-6자리 형태로 랜덤하게 생성
import random

class Account:
    def __init__(self, name, balance):
        self.name = name
        self.balance = balance
        self.bank = "SC은행"
        num1 = random.randint(0, 999)
        num2 = random.randint(0, 99)
        num3 = random.randint(0, 999999)

        num1 = str(num1).zfill(3)      # 1 -> '1' -> '001'
        num2 = str(num2).zfill(2)      # 1 -> '1' -> '01'
        num3 = str(num3).zfill(6)      # 1 -> '1' -> '0000001'
        self.account_number = num1 + '-' + num2 + '-' + num3  # 001-01-000001

kim = Account("김민수", 100)
print(kim.name)
print(kim.balance)
print(kim.bank)
print(kim.account_number)
'''출력:
김민수
100
SC은행
900-61-930922
'''

import random


class Account:
    # class variable
    account_count = 0

    def __init__(self, name, balance):
        self.deposit_count = 0
        self.deposit_log = []
        self.withdraw_log = []

        self.name = name
        self.balance = balance
        self.bank = "SC은행"

        # 3-2-6
        num1 = random.randint(0, 999)
        num2 = random.randint(0, 99)
        num3 = random.randint(0, 999999)

        num1 = str(num1).zfill(3)  # 1 -> '1' -> '001'
        num2 = str(num2).zfill(2)  # 1 -> '1' -> '01'
        num3 = str(num3).zfill(6)  # 1 -> '1' -> '0000001'
        self.account_number = num1 + '-' + num2 + '-' + num3  # 001-01-000001
        Account.account_count += 1

    @classmethod
    def get_account_num(cls):
        print(cls.account_count)  # Account.account_count

    def deposit(self, amount):
        if amount >= 1:
            self.deposit_log.append(amount)
            self.balance += amount

            self.deposit_count += 1
            if self.deposit_count % 5 == 0:         # 5, 10, 15
                # 이자 지금
                self.balance = (self.balance * 1.01)


    def withdraw(self, amount):
        if self.balance > amount:
            self.withdraw_log.append(amount)
            self.balance -= amount

    def display_info(self):
        print("은행이름: ", self.bank)
        print("예금주: ", self.name)
        print("계좌번호: ", self.account_number)
        print("잔고: ", self.balance)

    def withdraw_history(self):
        for amount in self.withdraw_log:
            print(amount)

    def deposit_history(self):
        for amount in self.deposit_log:
            print(amount)


k = Account("Kim", 1000)
k.deposit(100)
k.deposit(200)
k.deposit(300)
k.deposit_history()

k.withdraw(100)
k.withdraw(200)
k.withdraw_history()

 

# 11. 파이썬 클래스
# 281 ~ 290
# ___________________________________

class 차 : 
    def __init__(self,바퀴,가격) :
        self.바퀴 = 바퀴 
        self.가격 = 가격
car = 차 (2,1000)
print(car.바퀴)
print(car.가격)

#클래스 상속
#차 클래스를 상속받은 자전차 클래스

class 차 : 
    def __init__(self,바퀴,가격) :
        self.바퀴 = 바퀴 
        self.가격 = 가격

class 자전거(차):
    pass


#부모 클래스 메서드 호출
class 차:
    def __init__(self, 바퀴, 가격):
        self.바퀴 = 바퀴
        self.가격 = 가격

    def 정보(self):
        print("바퀴수 ", self.바퀴)
        print("가격 ", self.가격)

class 자동차(차):
    def __init__(self, 바퀴, 가격):
        super().__init__(바퀴, 가격)

class 자전차(차):
    def __init__(self, 바퀴, 가격, 구동계):
        super().__init__(바퀴, 가격)
        self.구동계 = 구동계

    def 정보(self):
        super().정보()
        print("구동계 ", self.구동계)

bicycle = 자전차(2, 100, "시마노")
bicycle.정보()

#메서드 오버라이딩
class 부모:
    def 호출(self):
        print("부모호출")

class 자식(부모):
    def 호출(self):
        print("자식호출")


나 = 자식()
나.호출()

#생성자
class 부모:
    def __init__(self):
        print("부모생성")

class 자식(부모):
  def __init__(self):
    print("자식생성")

나 = 자식()


#부모클래스 생성자 호출
class 부모:
    def __init__(self):
        print("부모생성")

class 자식(부모):
    def __init__(self):
        print("자식생성")
        super().__init__()

나 = 자식()

 

👉 파일 입출력과 예외처리(291 to 300)

 

# 12. 파일 입출력과 예외처리
# 291 ~ 300
# ___________________________________

#파일 쓰기
#바탕화면에 '매수종목1.txt' 파일을 생성한 후 다음과 같이 종목코드를 파일에 써보
'''
f = open("C:/Users/hyunh/Desktop/매수종목1.txt", mode="wt", encoding="utf-8")
f.write("005930\n")
f.write("005380\n")
f.write("035420")
f.close()
'''

#CSV 파일 쓰기
#바탕화면에 '매수종목.csv' 파일을 생성한 후 
# 다음과 같이 종목코드와 종목명을 파일에 써보세요. 
# 인코딩은 'cp949'를 사용해야함
'''
import csv

f = open("C:/Users/hyunh/Desktop/매수종목.csv", mode="wt", encoding="cp949", newline='')
writer = csv.writer(f)
writer.writerow(["종목명", "종목코드", "PER"])
writer.writerow(["삼성전자", "005930", 15.59])
writer.writerow(["NAVER", "035420", 55.82])
f.close()
'''

#파일 읽기
'''
f = open("C:/Users/hyunh/Desktop/매수종목1.txt", encoding="utf-8")
lines = f.readlines()   # python list

codes = []
for line in lines:
    code = line.strip()  #'\n'
    codes.append(code)

print(codes)

f.close()
'''

#예외처리
#문자열 PER (Price to Earning Ratio) 값을 실수로 변환할 때 에러가 발생함
#예외처리를 통해 에러가 발생하는 PER은 0으로 출력하라

per = ["10.31", "", "8.00"]

for i in per:
    try:
        print(float(i))
    except:
        print(0)


#예외처리 및 리스트에 저장
#문자열로 표현된 PER 값을 실수로 변환한 후 이를 새로운 리스트에 저장
per = ["10.31", "", "8.00"]
new_per = []

for i in per:
    try:
        v = float(i)
    except:
        v = 0
    new_per.append(v)

print(new_per)

#특정 예외만 처리하기
#어떤 값을 0으로 나누면 ZeroDivisionError 에러가 발생함 
#try ~ except로 모든 에러에 대해 예외처리하지 말고 ZeroDivisionError 에러만 예외처리
try:
    b = 3 / 0
except ZeroDivisionError:
    print("0으로 나누면 안되요")

#예외의 메시지 출력하기
'''
try:
    실행코드
except 예외 as 변수:
    예외처리코드 
'''
data = [1, 2, 3]

for i in range(5) : 
    print(data[i])

#try, except, else, finally 구조 사용해보기
'''
try:
    실행 코드
except:
    예외가 발생했을 때 수행할 코드
else:
    예외가 발생하지 않았을 때 수행할 코드
finally:
    예외 발생 여부와 상관없이 항상 수행할 코드
'''
per = ["10.31", "", "8.00"]

for i in per:
    try:
        print(float(i))
    except:
        print(0)
    else:
        print("clean data")
    finally:
        print("변환 완료")