CSV
콤마(,)로 구분된 값
JSON + XML
일반적인 데이터베이스
기본틀
from urllib import request
url = 'https://www.naver.com/'
data = request.urlopen(url)
print(data.read().decode('utf-8'))
urllib, request 기본틀
from urllib import parse,request
#https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%A0%9C%EC%A3%BC%EC%97%AC%ED%96%89
query = input('검색어 >>> ')
values = {
'where':'nexearch',
'sm':'top_hty',
'fbm':'1',
'ie':'utf8',
'query':query
}
params = parse.urlencode(values)
print(params)
url = 'https://search.naver.com/search.naver?'+params
data = request.urlopen(url).read().decode('utf-8')
print(data)
import re, sys
class Customer:
custlist=[{'name': '홍길동', 'gender': 'M', 'email': 'hong123@gmail.com', 'birthyear': '2000'},
{'name': '박철수', 'gender': 'M', 'email': 'park01@gmail.com', 'birthyear': '2002'},
{'name': '김나리', 'gender': 'F', 'email': 'kim123@gmail.com', 'birthyear': '1999'} ]
page = 2
#클래스 안에있는 메서드 중에서 인스턴스 메서드만 self 씀
def insertData(self):
customer = {'name':", 'gender':", 'email':", 'birthday':"}
customer['name'] = input('이름 >>>')
while True:
customer['gender'] = input('성별(M,F)>>>').upper()
#customer['gender'] =customer['gender'].upper()
if customer['gender'] in('M','F'):
break
while True:
email_p = re.compile('^[a-z][a-z0-9]{4,}@[a-z]{2,6}[.][a-z]{2,5}$')
while True:
customer['email'] = input('이메일>>>')
if email_p.match(customer['email']):
break
else:
print('이메일을 정확하게 입력해주세요')
check = 0
for i in Customer.custlist:
if i['email'] == customer['email']:
check = 1
if check==0:
break
print('중복되는 이메일이 있습니다.')
while True:
customer['birthyear'] = input('생년월일(4자리) >>> ')
if len(customer['birthyear']) == 4 and customer['birthyear'].isdigit():
break
Customer.custlist.append(customer)
Customer.page = len(Customer.custlist)-1
print(Customer.custlist)
def curSearch(self):
if Customer.page < 0:
print('입력된 정보가 없습니다.')
else :
print(f'현재 페이지는 {Customer.page}페이지 입니다.')
print(Customer.custlist[Customer.page])
return Customer.page
def preSearch(self):
if Customer.page <= 0:
print('첫번째 페이지')
print(Customer.page)
else:
Customer.page -= 1
print(f'현재 페이지는 {Customer.page}페이지 입니다.')
print(Customer.custlist[Customer.page])
def nextSearch(self):
if Customer.page >= len(Customer.custlist) -1:
print('마지막 페이지입니다.')
print(Customer.page)
else:
Customer.page += 1
print(f'현재 페이지는 {Customer.page}페이지 입니다.')
print(Customer.custlist[Customer.page])
def updateData(self):
while True:
choice1 = input('수정하려는 이메일 주소를 입력하세요 >>>')
idx = -1
for i in range(len(Customer.custlist)):
if Customer.custlist[i]['email'] == choice1:
idx = i
break
if idx == -1:
print('등록되지 않은 이메일입니다.')
break
choice2 = input('''
-----------------------------------------------
다음 중 수정할 항목을 선택하세요(수정할 정보가 없으면 exit 입력)
name, gender, birthyear 중 입력
-----------------------------------------------
''')
if choice2 in ('name', 'gender', 'birthyear'):
Customer.custlist[idx][choice2] = input('수정할 {}를 입력하세요 >>>'.format(choice2))
print(Customer.custlist[idx])
break
elif choice2 == 'exit':
break
else:
print('존재하지 않는 항목입니다.')
break
def deleteData(self):
choice1 = input('삭제하려는 이메일 주소를 입력하세요 >>>')
delok = 0
for i in range(len(Customer.custlist)):
if Customer.custlist[i]['email'] == choice1:
print('{} 고객님의 정보가 삭제되었습니다.'.format(Customer.custlist[i]['name']))
del Customer.custlist[i]
delok = 1
print(Customer.custlist)
break
def exe(self, choice):
if choice=='I':
self.insertData()
elif choice=='C':
self.curSearch()
elif choice=='P':
self.preSearch()
elif choice=='N':
self.nextSearch()
elif choice=='U':
self.updateData()
elif choice=='D':
self.deleteData()
elif choice=='Q':
sys.exit()
def display():
choice=input('''
다음 중에서 하실 일을 골라주세요 :
I - 고객 정보 입력
C - 현재 고객 정보 조회
P - 이전 고객 정보 조회
N - 다음 고객 정보 조회
U - 고객 정보 수정
D - 고객 정보 삭제
Q - 프로그램 종료
''').upper()
return choice
def __init__(self):
while True:
self.exe(self.display())
#프로그램 실행
Customer()
# 은행 계좌를 클래스로 작성하시오
# 클래스 변수를 이용하여 계좌가 개설된 건수를 체크하고 출력하는 클래스함수를 작성합니다.
# 아래의 내용은 인스턴스 함수와 변수로 작성합니다.
# 계좌는 이름과 금액을 입력받고, 계좌번호는 자동으로 생성합니다.
# 입금은 0보다 큰금액을 입력해야하며 로그에 입금내역을 기록합니다.
# 입금 횟수에 따라 1%의 이자가 지급됩니다.(5회마다)
# 출금은 잔액보다 작을경우에 처리됩니다. 로그에 출금 기록을 남깁니다.
# 계좌정보를 출력하는 함수는 은행이름,예금주,계좌번호,잔고를 출력합니다.
# 입금내역과 출금내역을 출력하는 함수
class Account:
account_count = 0
@classmethod
def get_account_count():
print('계좌수 : ',Account.account_count)
def __init__(self,name,balance):
Account.account_count += 1
self.name =name
self.balance = balance
self.deposit_count = 0
self.total_log = []
self.account_number = Account.account_count
def deposit(self,amount):
if amount >= 1:
self.total_log.append(('입금',amount))
self.balance += amount
print(f'{amount:,.1f}원이 입급처리되었습니다. 총 금액은 {self.balance:,}입니다.')
self.deposit_count += 1
if self.deposit_count % 5 == 0:
interest = self.balance * 0.01
self.balance += interest
self.total_log.append(('이자지급',interest))
print(interest,'원의 이자가 지급되었습니다.')
def withdraw(self,amount):
if self.balance >= amount:
self.balance -= amount
self.total_log.append(('출금',amount))
print(f'{amount:,}원이 출금되었습니다.')
else:
print('잔액이 부족합니다.')
def __str__(self):
return f'예금주 : {self.name}, 계좌번호 : {self.account_number}, 잔고 : {self.balance:,.0f} '
import pickle,os
account_list=[]
# account_list 불러오기
dir = os.path.dirname(__file__)+'/account.pickle'
with open(dir,'rb') as f:
account_list = pickle.load(f)
Account.account_count = account_list[-1].account_number
while True:
display = '''
----------------------------------------------------------------------
1. 계좌개설 2. 입금 3. 출금 4. 계좌로그 5. 계좌정보 6. 종료
----------------------------------------------------------------------
>>> '''
menu = input(display)
if menu == '1':
name=input('이름 >>> ')
balance=''
while not balance.isdecimal():
balance= input("입금금액 >>>")
balance = int(balance)
account_list.append( Account(name,balance))
print('-------------------')
for item in account_list:
print(item)
elif menu =='2':
account_num = int(input('계좌번호 입력하세요 >>> '))
check = 0
for acc in account_list:
if acc.account_number == account_num:
check = 1
amount =int(input('입금 금액 >>> '))
acc.deposit(amount)
if check == 0:
print('계좌번호가 없습니다.')
elif menu == '3':
account_num = int(input('계좌번호 입력하세요 >>> '))
check = 0
for acc in account_list:
if acc.account_number == account_num:
check = 1
amount =int(input('출금 금액 >>> '))
acc.withdraw(amount)
if check == 0:
print('계좌번호가 없습니다.')
elif menu == '4':
account_num = int(input('계좌번호를 입력하세요 >>> '))
check = 0
for acc in account_list:
if acc.account_number ==account_num:
check = 1
for data in acc.total_log:
print(data[0],' : ',data[1])
if check == 0:
print('계좌번호가 없습니다.')
elif menu == '5':
for acc in account_list:
print(acc)
account_num = int(input('계좌번호를 입력하세요 >>> '))
check = 0
for acc in account_list:
if acc.account_number ==account_num:
check = 1
print(acc)
if check == 0:
print('계좌번호가 없습니다.')
elif menu =='6':
## account_list 저장
with open(dir,'wb') as f:
pickle.dump(account_list,f)
print('프로그램 종료!')
break