경기도 인공지능 개발 과정/Python

Python 초보자를 위한 파이썬 300제 (201 ~ 300)

agingcurve 2022. 5. 28. 17:38
반응형

파이썬 함수 201 ~ 240

201 "비트코인" 문자열을 화면에 출력하는 print_coin() 함수를 정의하라.`

 

In [99]:
def print_coint():
    print("비트코인")

202 201번에서 정의한 함수를 호출하라.

In [98]:
print_coint()
비트코인

203 201번에서 정의한 print_coin 함수를 100번호출하라.

In [ ]:
for i in range(100):
    print_coint()

204 "비트코인" 문자열을 100번 화면에 출력하는 print_coins() 함수를 정의하라.

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

205 아래의 에러가 발생하는 이유에 대해 설명하라.

In [106]:
hello()
def hello():
    print("Hi")
#함수가 정의되기 전에 호출되어서 에러가 발생합니다.
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [106], in <cell line: 1>()
----> 1 hello()
      2 def hello():
      3     print("Hi")

NameError: name 'hello' is not defined

206 아래 코드의 실행 결과를 예측하라.

In [108]:
def message() :
    print("A")
    print("B")

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

207 아래 코드의 실행 결과를 예측하라. (읽기 어려운 코드의 예입니다.)

In [109]:
print("A")

def message() :
    print("B")

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

208 아래 코드의 실행 결과를 예측하라. (읽기 어려운 코드의 예입니다.)

In [110]:
print("A")
def message1() :
    print("B")
print("C")
def message2() :
    print("D")
message1()
print("E")
message2()
A
C
B
E
D

209 아래 코드의 실행 결과를 예측하라.

In [111]:
def message1():
    print("A")

def message2():
    print("B")
    message1()

message2()
B
A

210 아래 코드의 실행 결과를 예측하라.

In [112]:
def message1():
    print("A")

def message2():
    print("B")

def message3():
    for i in range (3) :
        message2()
        print("C")
    message1()

message3()
B
C
B
C
B
C
A

211 함수의 호출 결과를 예측하라.

In [113]:
def 함수(문자열) :
    print(문자열)

함수("안녕")
함수("Hi")
안녕
Hi

212 함수의 호출 결과를 예측하라.

In [114]:
def 함수(a, b) :
    print(a + b)

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

213 아래와 같은 에러가 발생하는 원인을 설명하라.

In [117]:
def 함수(문자열) :
    print(문자열)
#함수에 정의와 다르게 함수를 호출하고 있다. 함수를 호출할 때 하나의 파라미터를 입력해야한다.

214 아래와 같은 에러가 발생하는 원인을 설명하라.

In [120]:
def 함수(a, b) :
    print(a + b)

함수("안녕", 3)
#정의된 함수는 같은 타입의 두 개의 값을 입력 받아 덧셈 연산을 적용하려는
#의도로 설계됐습니다. 하지만 함수를 호출 할때 문자열과 숫자를 입력해서
#문자열과 숫자는 더할 수 없다는 에러가 발생합니다.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [120], in <cell line: 4>()
      1 def 함수(a, b) :
      2     print(a + b)
----> 4 함수("안녕", 3)

Input In [120], in 함수(a, b)
      1 def 함수(a, b) :
----> 2     print(a + b)

TypeError: can only concatenate str (not "int") to str

215 하나의 문자를 입력받아 문자열 끝에 ":D" 스마일 문자열을 이어 붙여 출력하는 print_with_smile 함수를 정의하라.

In [121]:
def print_with_smile(message):
    print(message+":D")

216 215에서 정의한 함수를 호출하라. 파라미터는 "안녕하세요"로 입력하라.

In [122]:
print_with_smile("안녕하세요!")
안녕하세요!:D

217 현재 가격을 입력 받아 상한가 (30%)를 출력하는 print_upper_price 함수를 정의하라.

In [125]:
def print_upper_price(num):
    print(num * 1.3)

218 두 개의 숫자를 입력받아 두 수의 합을 출력하는 print_sum 함수를 정의하라.

In [126]:
def print_sum(a, b):
    print(a + b)

219 두 개의 숫자를 입력받아 합/차/곱/나눗셈을 출력하는 print_arithmetic_operation 함수를 작성하라.

In [128]:
def print_arithmetic_operation(a,b):
    print(f"{a} + {b} = {a+b}")
    print(f"{a} - {b} = {a-b}")
    print(f"{a} * {b} = {a*b}")
    print(f"{a} / {b} = {a/b}")
print_arithmetic_operation(3,4)
3 + 4 = 7
3 - 4 = -1
3 * 4 = 12
3 / 4 = 0.75

220 세 개의 숫자를 입력받아 가장 큰수를 출력하는 print_max 함수를 정의하라. 단 if 문을 사용해서 수를 비교하라.

In [130]:
def print_max(a,b,c):
    if a>b and a>c:
        print(a)
    elif b>a and b>c:
        print(b)
    else:
        print(c)
        
print_max(1,3,5)
5

221 입력된 문자열을 역순으로 출력하는 print_reverse 함수를 정의하라.

In [133]:
def print_reverse(message):
    print(message[::-1])
print_reverse("python")
nohtyp

222 성적 리스트를 입력 받아 평균을 출력하는 print_score 함수를 정의하라.

In [136]:
def print_score(num_list):
    print(sum(num_list) / len(num_list))
print_score([1,2,3])
2.0

223 하나의 리스트를 입력받아 짝수만 화면에 출력하는 print_even 함수를 정의하라.

In [138]:
def print_even(new):
    for i in new:
        if i % 2 ==0:
            print(i)

print_even([1, 3, 2, 10, 12, 11, 15])
2
10
12

224 하나의 딕셔너리를 입력받아 딕셔너리의 key 값을 화면에 출력하는 print_keys 함수를 정의하라.

In [142]:
def print_keys(dic):
    for i in dic.keys():
        print(i)

print_keys({"이름":"김말똥", "나이":30, "성별":0})
이름
나이
성별

225 my_dict에는 날짜를 키값으로 OHLC가 리스트로 저장돼 있다. my_dict와 날짜 키값을 입력받아 OHLC 리스트를 출력하는 print_value_by_key 함수를 정의하라.

In [145]:
my_dict = {"10/26" : [100, 130, 100, 100],
           "10/27" : [10, 12, 10, 11]}

def print_value_by_key(my_dict, day):
    print(my_dict[day])
    
print_value_by_key  (my_dict, "10/26")
[100, 130, 100, 100]

226 입력 문자열을 한 줄에 다섯글자씩 출력하는 print_5xn(string) 함수를 작성하라.

In [155]:
def print_5xn(string):
    print(string[:len(string)//2])
    print(string[len(string)//2:])
    
print_5xn("아이엠어보이유알어걸")

def print_5xn(string):
    chunk_num = int(len(string)/5)
    for i in range(chunk_num+1):
        print(string[i*5:i*5+5])
print_5xn("아이엠어보이유알어걸")
아이엠어보
이유알어걸
아이엠어보
이유알어걸

227 문자열과 한줄에 출력될 글자 수를 입력을 받아 한 줄에 입력된 글자 수만큼 출력하는 print_mxn(string) 함수를 작성하라.

In [159]:
def print_mxn(string, num):
    chunk_num = int(len(string)/num)
    for i in range(chunk_num + 1):
        print(string[i * num: i * num + num])
print_mxn("아이엠어보이유알어걸", 3)
아이엠
어보이
유알어
걸

228 연봉을 입력받아 월급을 계산하는 calc_monthly_salary(annual_salary) 함수를 정의하라. 회사는 연봉을 12개월로 나누어 분할 지급하며, 이 때 1원 미만은 버림한다.

In [165]:
def calc_monthly_salary(annual_salary):
    result = round(annual_salary /12,-1)
    print(result)
calc_monthly_salary(12000000)

def calc_monthly_salary(annual_pay) :
    monthly_pay = int(annual_pay / 12)
    return monthly_pay
calc_monthly_salary(12000000)
1000000.0
Out[165]:
1000000

229 아래 코드의 실행 결과를 예측하라.

In [166]:
def my_print (a, b) :
    print("왼쪽:", a)
    print("오른쪽:", b)

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

230 아래 코드의 실행 결과를 예측하라.

In [167]:
def my_print (a, b) :
    print("왼쪽:", a)
    print("오른쪽:", b)

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

231 아래 코드를 실행한 결과를 예상하라.

In [168]:
def n_plus_1 (n) :
    result = n + 1

n_plus_1(3)
print (result)
0

232 문자열 하나를 입력받아 인터넷 주소를 반환하는 make_url 함수를 정의하라.

In [172]:
def make_url(http):
    return "www." + http + ".com"
make_url("naver")
Out[172]:
'www.naver.com'

233 문자열을 입력받아 각 문자들로 구성된 리스트로 반환하는 make_list 함수를 정의하라.

In [174]:
def make_list(mon):
    look = []
    for i in mon:
        look.append(i)
    return look

make_list("abcd")
Out[174]:
['a', 'b', 'c', 'd']

234 숫자로 구성된 하나의 리스트를 입력받아, 짝수들을 추출하여 리스트로 반환하는 pickup_even 함수를 구현하라.

In [177]:
def pickup_even(num_list):
    result = []
    for num in num_list:
        if num % 2 == 0:
            result.append(num)
    return result

pickup_even([3, 4, 5, 6, 7, 8])
Out[177]:
[4, 6, 8]

235 콤마가 포함된 문자열 숫자를 입력받아 정수로 변환하는 convert_int 함수를 정의하라.

In [180]:
def convert_int(num):
    new_num = int(num.replace())
    return new_num

convert_int("1,234,567")
Out[180]:
1234567

236 아래 코드의 실행 결과를 예측하라.

In [181]:
def 함수(num) :
    return num + 4

a = 함수(10)
b = 함수(a)
c = 함수(b)
print(c)
22

237 아래 코드의 실행 결과를 예측하라.

In [182]:
def 함수(num) :
    return num + 4

c = 함수(함수(함수(10)))
print(c)
22

238 아래 코드의 실행 결과를 예측하라.

In [183]:
def 함수1(num) :
    return num + 4

def 함수2(num) :
    return num * 10

a = 함수1(10)
c = 함수2(a)
print(c)
140

239 아래 코드의 실행 결과를 예측하라.

In [184]:
def 함수1(num) :
    return num + 4

def 함수2(num) :
    num = num + 2
    return 함수1(num)

c = 함수2(10)
print(c)
16

240 아래 코드의 실행 결과를 예측하라.

In [185]:
def 함수0(num) :
    return num * 2

def 함수1(num) :
    return 함수0(num + 2)

def 함수2(num) :
    num = num + 10
    return 함수1(num)

c = 함수2(2)
print(c)
28

파이썬 함수 241 ~ 300

 

241 현재시간 datetime 모듈을 사용해서 현재 시간을 화면에 출력해보세요.

In [2]:
import datetime

now = datetime.datetime.now()
print(now)
2022-05-24 09:40:59.774525

242 현재시간의 타입 datetime 모듈의 now 함수의 리턴 값의 타입을 화면에 출력해보세요.

In [5]:
import datetime

now = datetime.datetime.now()

def new_date():
    now = datetime.datetime.now()
    return type(now)

import datetime

now = datetime.datetime.now()
print(now, type(now))
2022-05-24 09:43:14.652993 <class 'datetime.datetime'>

242 현재시간의 타입 datetime 모듈의 now 함수의 리턴 값의 타입을 화면에 출력해보세요.

In [6]:
import datetime

now = datetime.datetime.now()
print(now, type(now))
2022-05-24 15:44:32.680656 <class 'datetime.datetime'>

243 timedelta datetime 모듈의 timedelta를 사용해서 오늘로부터 5일, 4일, 3일, 2일, 1일 전의 날짜를 화면에 출력해보세요.

In [7]:
import datetime

now = datetime.datetime.now()

for day in range(5, 0, -1):
    delta = datetime.timedelta(days=day)
    date = now - delta
    print(date)
2022-05-19 15:44:49.860705
2022-05-20 15:44:49.860705
2022-05-21 15:44:49.860705
2022-05-22 15:44:49.860705
2022-05-23 15:44:49.860705

244 strftime 현재시간을 얻어온 후 다음과 같은 포맷으로 시간을 출력해보세요. strftime 메서드를 사용하세요.

In [8]:
import datetime

now = datetime.datetime.now()
print(now.strftime("%H:%M:%S"))
15:45:02

245 strptime datetime.datetime.strptime 메서드를 사용하면 문자열 형식의 시간을 datetime.datetime 타입의 시간 값으로 만들어줍니다. "2020-05-04"의 문자열을 시간 타입으로 변환해보세요.

In [9]:
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'>

246 sleep 함수 time 모듈, datetime 모듈을 사용해서 1초에 한 번 현재 시간을 출력하는 코드를 작성하세요.

In [10]:
import time
import datetime

while True:
    now = datetime.datetime.now()
    print(now)
    time.sleep(1)
2022-05-24 15:46:14.646087
2022-05-24 15:46:15.659477
2022-05-24 15:46:16.671648
2022-05-24 15:46:17.680190
2022-05-24 15:46:18.691647
2022-05-24 15:46:19.704497
2022-05-24 15:46:20.705198
2022-05-24 15:46:21.718330
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
Input In [10], in <cell line: 5>()
      5 now = datetime.datetime.now()
      6 print(now)
----> 7 time.sleep(1)

KeyboardInterrupt: 

247 모듈 임포트 모듈을 임포트하는 4가지 방식에 대해 설명해보세요.

248 os 모듈 os 모듈의 getcwd 함수를 호출하여 현재 디렉터리의 경로를 화면에 출력해보세요.

In [1]:
import os
ret = os.getcwd()
print(ret, type(ret))
c:\ai\mj <class 'str'>

249 rename 함수 바탕화면에 텍스트 파일을 하나 생성한 후 os 모듈의 rename 함수를 호출하여 해당 파일의 이름을 변경해보세요.

In [ ]:
import os
os.rename("C:/Users/hyunh/Desktop/before.txt", "C:/Users/hyunh/Desktop/after.txt")

250 numpy numpy 모듈의 arange 함수를 사용해서 0.0 부터 5.0까지 0.1씩 증가하는 값을 화면에 출력해보세요.

In [4]:
import numpy
for i in numpy.arange(0, 2, 0.1):
    print(i)
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
1.1
1.2000000000000002
1.3
1.4000000000000001
1.5
1.6
1.7000000000000002
1.8
1.9000000000000001

251 클래스, 객체, 인스턴스 클래스, 객체, 인스턴스에 대해 설명해봅시다.

252 클래스 정의 비어있는 사람 (Human) 클래스를 "정의" 해보세요.

In [1]:
class Human:
    pass

253 인스턴스 생성 사람 (Human) 클래스의 인스턴스를 "생성" 하고 이를 areum 변수로 바인딩해보세요.

In [6]:
class Human:
    
    def __init__(slef):
        print("응애응애")

areum = Human()
응애응애

255 클래스 생성자-2 사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 생성자를 추가하세요.

In [11]:
class Human:
    
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
        
areum = Human("아름",25,"여자")
print(areum.name)
아름

256 인스턴스 속성에 접근 255에서 생성한 인스턴스의 이름, 나이, 성별을 출력하세요. 인스턴스 변수에 접근하여 값을 출력하면 됩니다.

In [12]:
class Human:
    
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

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

257 클래스 메소드 - 1 사람 (Human) 클래스에서 이름, 나이, 성별을 출력하는 who() 메소드를 추가하세요.

In [17]:
class Human:
    
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    def who(self):
        print(f"이름 : {self.name}, 나이 : {self.age}, 성별 : {self.sex}")
        
areum = Human("조아름", 25, "여자")
areum.who()
이름 : 조아름, 나이 : 25, 성별 : 여자

258 클래스 메소드 - 2 사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 setInfo 메소드를 추가하세요.

In [24]:
class Human:
    
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    def who(self):
        print(f"이름 : {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)
이름 : 불명, 나이 : 미상, 성별 : 모름
이름 : 아름, 나이 : 25, 성별 : 여자
In [29]:
class Human:
    
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    def who(self):
        print(f"이름 : {self.name}, 나이 : {self.age}, 성별 : {self.sex}")
    
    def setInfo(self,name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


    def __del__(self):
        print("나의 죽음을 알리지 말라")
        
areum = Human("아름", 25, "여자")
del(areum)
나의 죽음을 알리지 말라

260 에러의 원인 아래와 같은 에러가 발생한 원인에 대해 설명하세요.

In [32]:
class OMG : 
    def print() :
        print("Oh my god")
        
myStock = OMG()
myStock.print()


class OMG :
    def print() :
        print("Oh my god")


mystock = OMG()
mystock.print()      # OMG.print(mystock)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [32], in <cell line: 6>()
      3         print("Oh my god")
      5 myStock = OMG()
----> 6 myStock.print()

TypeError: print() takes 0 positional arguments but 1 was given

261 Stock 클래스 생성 주식 종목에 대한 정보를 저장하는 Stock 클래스를 정의해보세요. 클래스는 속성과 메서드를 갖고 있지 않습니다.

In [33]:
class Stock:
    pass

262 생성자 Stock 클래스의 객체가 생성될 때 종목명과 종목코드를 입력 받을 수 있도록 생성자를 정의해보세요.

In [38]:
class Stock:
    def __init__(self, 종목명, 종목코드):
        self.종목명 = 종목명
        self.종목코드 = 종목코드

Stock("삼성전자","05930")

삼성 = Stock("삼성전자","05930")
삼성.종목명
삼성.종목코드
Out[38]:
'05930'

263 메서드 객체에 종목명을 입력할 수 있는 set_name 메서드를 추가해보세요.

In [42]:
class Stock:
    def __init__(self, 종목명, 종목코드):
        self.종목명 = 종목명
        self.종목코드 = 종목코드
    def set_name(self, 종목명):
        self.종목명 = 종목명
        
a=Stock(None,None)
a.set_name("삼성전자")
a.종목명
Out[42]:
'삼성전자'

264 메서드 객체에 종목코드를 입력할 수 있는 set_code 메서드를 추가해보세요.

In [45]:
class Stock:
    def __init__(self, 종목명, 종목코드):
        self.종목명 = 종목명
        self.종목코드 = 종목코드
    def set_name(self, 종목명):
        self.종목명 = 종목명
    def set_code(self, 종목코드):
        self.종목코드 = 종목코드
        
a=Stock(None,None)
a.set_code("005930")
a.종목코드
Out[45]:
'005930'

265 메서드 종목명과 종목코드를 리턴하는 get_name, get_code 메서드를 추가하세요. 해당 메서드를 사용하여 종목명과 종목코드를 얻고 이를 출력해보세요.

In [49]:
class Stock:
    def __init__(self, 종목명, 종목코드):
        self.종목명 = 종목명
        self.종목코드 = 종목코드
    
    def set_name(self, 종목명):
        self.종목명 = 종목명
    
    def set_code(self, 종목코드):
        self.종목코드 = 종목코드
    
    def get_name(self):
        return self.종목명
    
    def get_code(self):
        return self.종목코드
    
삼성 = Stock("삼성전자", "005930")

삼성.get_code()
삼성.get_name()
Out[49]:
'삼성전자'

266 객체의 속성값 업데이트 생성자에서 종목명, 종목코드, PER, PBR, 배당수익률을 입력 받을 수 있도록 생성자를 수정하세요. PER, PBR, 배당수익률은 float 타입입니다.

In [58]:
class Stock:
    def __init__(self, 종목명, 종목코드, PER, PBR, 배당수익률):
        self.종목명 = 종목명
        self.종목코드 = 종목코드
        self.PER = PER
        self.PBR = PBR
        self.배당수익률 = 배당수익률
        
    def set_name(self, 종목명):
        self.종목명 = 종목명
    
    def set_code(self, 종목코드):
        self.종목코드 = 종목코드
    
    def get_name(self):
        return self.종목명
    
    def get_code(self):
        return self.종목코드

267 객체 생성 266번에서 정의한 생성자를 통해 다음 정보를 갖는 객체를 생성해보세요.

In [63]:
삼성 = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)
print(삼성.배당수익률)
2.83

268 객체의 속성 수정 PER, PBR, 배당수익률은 변경될 수 있는 값입니다. 이 값을 변경할 때 사용하는 set_per, set_pbr, set_dividend 메서드를 추가하세요.

In [64]:
class Stock:
    def __init__(self, 종목명, 종목코드, PER, PBR, 배당수익률):
        self.종목명 = 종목명
        self.종목코드 = 종목코드
        self.PER = PER
        self.PBR = PBR
        self.배당수익률 = 배당수익률
        
    def set_name(self, 종목명):
        self.종목명 = 종목명
    
    def set_code(self, 종목코드):
        self.종목코드 = 종목코드
    
    def get_name(self):
        return self.종목명
    
    def get_code(self):
        return self.종목코드
    
    def set_per(self,PER):
        self.PER = PER
    
    def set_pbr(self,PBR):
        self.PBR = PBR
    
    def set_dividend(self, dividend):
        self.dividend = dividend

269 객체의 속성 수정 267번에서 생성한 객체에 set_per 메서드를 호출하여 per 값을 12.75로 수정해보세요.

In [66]:
삼성.set_per(12.75)
print(삼성.PER)
12.75

270 여러 종목의 객체 생성 아래의 표를 참조하여 3종목에 대해 객체를 생성하고 이를 파이썬 리스트에 저장하세요. 파이썬 리스트에 저장된 각 종목에 대해 for 루프를 통해 종목코드와 PER을 출력해보세요.

In [67]:
삼성 = 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)
In [68]:
stock = [삼성, 현대차, LG전자]
for i in stock:
    print(i.종목코드, i.PER)

271 Account 클래스 은행에 가서 계좌를 개설하면 은행이름, 예금주, 계좌번호, 잔액이 설정됩니다. Account 클래스를 생성한 후 생성자를 구현해보세요. 생성자에서는 예금주와 초기 잔액만 입력 받습니다. 은행이름은 SC은행으로 계좌번호는 3자리-2자리-6자리 형태로 랜덤하게 생성됩니다.

은행이름: SC은행 계좌번호: 111-11-111111

In [80]:
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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
    
kim = Account("김민수",100)
print(kim.name)
print(kim.balance)
print(kim.bank)
print(kim.account_number)
김민수
100
SC은행
361-361-000361

272 클래스 변수 클래스 변수를 사용해서 Account 클래스로부터 생성된 계좌 객체의 개수를 저장하세요.

In [85]:
import random
class Account:
    #class variable
    account_count = 0
    
    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
        
kim = Account("김민수",100)
print(Account.account_count)
lee = Account("이민수",100)
print(Account.account_count)
1
2

273 클래스 변수 출력 Account 클래스로부터 생성된 계좌의 개수를 출력하는 get_account_num() 메서드를 추가하세요.

In [92]:
import random
class Account:
    #class variable
    account_count = 0
    
    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

        
kim = Account("김민수", 100)
lee = Account("이민수", 100)
Account.get_account_num()
2

274 입금 메서드 Account 클래스에 입금을 위한 deposit 메서드를 추가하세요. 입금은 최소 1원 이상만 가능합니다.

In [106]:
import random
class Account:
    #class variable
    account_count = 0
    money = 0
    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            
            
a = Account("김민수", 100)
a.deposit(5)
105

275 출금 메서드 Account 클래스에 출금을 위한 withdraw 메서드를 추가하세요. 출금은 계좌의 잔고 이상으로 출금할 수는 없습니다.

In [114]:
import random
class Account:
    #class variable
    account_count = 0

    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            
a = Account("김민수", 100)
a.deposit(5)
a.balance
a.withdraw(50)
a.balance
Out[114]:
55

276 정보 출력 메서드 Account 인스턴스에 저장된 정보를 출력하는 display_info() 메서드를 추가하세요. 잔고는 세자리마다 쉼표를 출력하세요.

In [123]:
import random
class Account:
    #class variable
    account_count = 0

    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            
    def display_info(self):
        print(f"이름은행 : {self.bank}\n 예금주: {self.name}\n 계좌번호 : {self.account_number} \n 잔고:{self.balance:,}원")
a = Account("김민수", 1000000)        
a.display_info()
이름은행 : SC은행
 예금주: 김민수
 계좌번호 : 136-136-000136 
 잔고:1,000,000원

277 이자 지급하기 입금 횟수가 5회가 될 때 잔고를 기준으로 1%의 이자가 잔고에 추가되도록 코드를 변경해보세요.

In [141]:
import random
class Account:
    #class variable
    account_count = 0

    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
        self.deposit_count = 0
    
    
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            self.deposit_count += 1
        
        if self.deposit_count >= 5:
            self.balance += self.balance*0.01
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            
    def display_info(self):
        print(f"이름은행 : {self.bank}\n 예금주: {self.name}\n 계좌번호 : {self.account_number} \n 잔고:{self.balance:,}원")
        
a = Account("김민수", 1000000)        
a.deposit(100)
a.deposit(100)
a.deposit(100)
a.deposit(100)
a.deposit(100)
a.deposit(100)

278 여러 객체 생성 Account 클래스로부터 3개 이상 인스턴스를 생성하고 생성된 인스턴스를 리스트에 저장해보세요.

In [145]:
import random
class Account:
    #class variable
    account_count = 0

    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
        self.deposit_count = 0
    
    
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            self.deposit_count += 1
        
        if self.deposit_count >= 5:
            self.balance += self.balance*0.01
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            
    def display_info(self):
        print(f"이름은행 : {self.bank}\n 예금주: {self.name}\n 계좌번호 : {self.account_number} \n 잔고:{self.balance:,}원")
        
        
data = []
k = Account("KIM", 10000000)
l = Account("LEE", 10000)
p = Account("PARK", 10000)

data.append(k)
data.append(l)
data.append(p)

print(data)
[<__main__.Account object at 0x0000023E0E8F1D00>, <__main__.Account object at 0x0000023E0F2B4A30>, <__main__.Account object at 0x0000023E0F2B48B0>]

279 객체 순회 반복문을 통해 리스트에 있는 객체를 순회하면서 잔고가 100만원 이상인 고객의 정보만 출력하세요.

In [146]:
import random
class Account:
    #class variable
    account_count = 0

    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)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
        self.deposit_count = 0
    
    
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        if amount >= 1:
            self.balance += amount
            self.deposit_count += 1
        
        if self.deposit_count >= 5:
            self.balance += self.balance*0.01
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            
    def display_info(self):
        print(f"이름은행 : {self.bank}\n 예금주: {self.name}\n 계좌번호 : {self.account_number} \n 잔고:{self.balance:,}원")
        
        
data = []
k = Account("KIM", 10000000)
l = Account("LEE", 10000)
p = Account("PARK", 10000)

data.append(k)
data.append(l)
data.append(p)

for i in data:
    if i.balance>= 1000000:
        print(i.display_info())
이름은행 : SC은행
 예금주: KIM
 계좌번호 : 185-185-000185 
 잔고:10,000,000원
None

280 입출금 내역 입금과 출금 내역이 기록되도록 코드를 업데이트 하세요. 입금 내역과 출금 내역을 출력하는 deposit_history와 withdraw_history 메서드를 추가하세요.

In [152]:
import random
class Account:
    #class variable
    account_count = 0

    def __init__(self, name, balance):
        self.name = name
        self.balance= balance
        self.bank = "SC은행"
        self.deposit_log = []
        self.withdraw_log = []
        num1 = random.randint(0, 999)
        num2 = random.randint(0, 99)
        num3 = random.randint(0, 999999)
        
        num1 = str(num1).zfill(3)
        num2 = str(num1).zfill(2)
        num3 = str(num1).zfill(6)
        self.account_number = num1 + "-" + num2 + "-" + num3
        
        Account.account_count += 1
        self.deposit_count = 0
    
    
    
    @classmethod
    def get_account_num(cls):
        print(Account.account_count)

    def deposit(self,amount):
        record_amount = 0
        if amount >= 1:
            self.deposit_log.append(amount)
            self.balance += amount
            self.deposit_count += 1
        
        if self.deposit_count >= 5:
            self.balance += self.balance*0.01
            
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            self.withdraw_log.append(amount)
    def display_info(self):
        print(f"이름은행 : {self.bank}\n 예금주: {self.name}\n 계좌번호 : {self.account_number} \n 잔고:{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)
print("입금내역",k.deposit_history())

k.withdraw(100)
k.withdraw(200)
k.withdraw_history()
print("출금내역",k.withdraw_history())
100
200
300
입금내역 None
100
200
100
200
출금내역 None

281 클래스 정의 다음 코드가 동작하도록 차 클래스를 정의하세요.

In [155]:
class 차:
    def __init__(self,바퀴,가격):
        self.바퀴 = 바퀴
        self.가격 = 가격
        
car = 차(2, 1000)
car.바퀴
car.가격
Out[155]:
1000

282 클래스 상속 차 클래스를 상속받은 자전차 클래스를 정의하세요.

In [157]:
class 자전차(차):
    pass

283 클래스 상속 다음 코드가 동작하도록 자전차 클래스를 정의하세요. 단 자전차 클래스는 차 클래스를 상속받습니다.

In [160]:
class 자전차(차):
    pass

bicycle = 자전차(2,100)
bicycle.가격
Out[160]:
100

284 클래스 상속 다음 코드가 동작하도록 자전차 클래스를 정의하세요. 단 자전차 클래스는 차 클래스를 상속받습니다.

In [166]:
class 자전차(차):
    def __init__(self,바퀴,가격,구동계):
        super().__init__(바퀴, 가격)
        self.구동계 = 구동계
        
bicycle = 자전차(2, 100, "시마노")
print(bicycle.구동계)
print(bicycle.바퀴)
시마노
2

285 클래스 상속 다음 코드가 동작하도록 차 클래스를 상속받는 자동차 클래스를 정의하세요.

In [171]:
class 자동차(차):
    def 정보(self):
        print("바퀴수",self.바퀴)
        print("가격",self.가격)        
car = 자동차(4, 1000)
car.정보()
바퀴수 4
가격 1000

286 부모 클래스 생성자 호출 다음 코드가 동작하도록 차 클래스를 수정하세요.

In [174]:
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.구동계 = 구동계

bicycle = 자전차(2, 100, "시마노")
bicycle.정보()
바퀴수  2
가격  100

287 부모 클래스 메서드 호출 자전차의 정보() 메서드로 구동계 정보까지 출력하도록 수정해보세요.

In [176]:
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.정보()
바퀴수  2
가격  100
구동계 시마노

288 메서드 오버라이딩 다음 코드의 실행 결과를 예상해보세요.

In [180]:
class 부모:
    def 호출(self):
        print("부모호출")

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


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

289 생성자 다음 코드의 실행 결과를 예상해보세요.

In [182]:
class 부모:
    def __init__(self):
        print("부모생성")

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

290 부모클래스 생성자 호출 다음 코드의 실행 결과를 예상해보세요.

In [184]:
class 부모:
      def __init__(self):
        print("부모생성")

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

나 = 자식()
자식생성
부모생성

 

291 파일 쓰기 바탕화면에 '매수종목1.txt' 파일을 생성한 후 다음과 같이 종목코드를 파일에 써보세요.

In [185]:
f = open("C:/Users/Admin/Desktop/매수종목1.txt", mode="wt", encoding="utf-8")
f.write("005930\n")
f.write("005380\n")
f.write("035420")
f.close()

292 파일 쓰기 바탕화면에 '매수종목2.txt' 파일을 생성한 후 다음과 같이 종목코드와 종목명을 파일에 써보세요.

In [196]:
f = open("C:/Users/Admin/Desktop/매수종목2.txt", mode="wt", encoding="utf-8")
f.write("005930 삼성전자\n")
f.write("005380 현대차\n")
f.write("035420 NAVER")
f.close()

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

In [199]:
import csv

f = open("C:/Users/Admin/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()

295 파일 읽기 바탕화면에 생성한 '매수종목2.txt' 파일을 읽은 후 종목코드와 종목명을 딕셔너리로 저장해보세요. 종목명을 key로 종목명을 value로 저장합니다.

In [201]:
f = open("C:/Users/Admin/Desktop/매수종목2.txt", encoding="utf-8")
lines = f.readlines()

data = {}
for line in lines:
    line = line.strip()     # '\n' 제거
    k, v = line.split()
    #print(k, v)
    data[k] = v

print(data)
f.close()
{'005930': '삼성전자', '005380': '현대차', '035420': 'NAVER'}

296 예외처리 문자열 PER (Price to Earning Ratio) 값을 실수로 변환할 때 에러가 발생합니다. 예외처리를 통해 에러가 발생하는 PER은 0으로 출력하세요.

In [204]:
per = ["10.31", "", "8.00"]

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

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

297 예외처리 및 리스트에 저장 문자열로 표현된 PER 값을 실수로 변환한 후 이를 새로운 리스트에 저장해보세요.

In [205]:
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)
[10.31, 0, 8.0]

298 특정 예외만 처리하기 어떤 값을 0으로 나누면 ZeroDivisionError 에러가 발생합니다. try ~ except로 모든 에러에 대해 예외처리하지 말고 ZeroDivisionError 에러만 예외처리해보세요.

In [206]:
try:
    b = 3 / 0
except ZeroDivisionError:
    print("0으로 나누면 안되요")
0으로 나누면 안되요

299 예외의 메시지 출력하기 다음과 같은 코드 구조를 사용하면 예외 발생 시 에러 메시지를 변수로 바인딩할 수 있습니다.

try: 실행코드 except 예외 as 변수: 예외처리코드 리스트의 인덱싱에 대해 에러를 출력해보세요.

In [208]:
data = [1, 2, 3]

for i in range(5):
    try:
        print(data[i])
    except IndexError as e:
        print(e)
1
2
3
list index out of range
list index out of range

300 try, except, else, finally 구조 사용해보기 파이썬 예외처리는 다음과 같은 구조를 가질 수 있습니다.

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

for i in per: print(float(per))

In [212]:
per = ["10.31", "", "8.00"]

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

'경기도 인공지능 개발 과정 > Python' 카테고리의 다른 글

[Django] 웹서버 란?  (0) 2022.06.09
Python Todolist 만들어보기  (0) 2022.05.29
Python 파이썬으로 TODOLIST 만들어보기  (0) 2022.05.28
Python pymysql 사용하기  (0) 2022.05.28
Python 예외처리  (0) 2022.05.28