'Code/Python'에 해당되는 글 12건
은행 계좌관리 프로그램.py
### 은행 계좌관리 프로그램
1. 클래스 구성
- Account : 한 명의 고객의 계좌정보를 담아 관리할 목적으로 구현된 클래스
멤버필드 : id(계좌번호), name(고객이름), balance(예금잔액)
멤버메소드 : 판단에 의해 구현할 것
- BankManager : 계좌정보를 이용하여 구현될 기능 담고있는 클래스
멤버필드: 판단에 의해 구현
멤버메소드: makeAccount() - 계좌개설 담당할 메서드
withdraw() - 출금처리 담당 메소드
deposit() - 입금처리를 담당할 메소드
check_id() - 계좌번호의 중복여부를 판단할 메소드
showAccount() - 전체고객의 계좌정보를 출력할 메소드
- BankingSystem : 사용자와의인터페이스를 담당할 목적의 클래스
메버필드와 메소드는 판단에 의해 기술
2. 계좌번호는 사용자가 임의로 번호를 입력할 수 있도록 구현하되, 중복된 값이 있을 경우 에러 메시지 출력
3. 입금 및 출금 처리 시 계좌번호 먼저 묻고 해당 계좌의 존재유무에 의해 에러메시지 출력 또는 처리로직을 구현하도록 기술
4. 기타 조건은 주어진 입출력 형식에 맞게 구현
5. 둘 이상의 고객에 대한 정보를 담아서 관리 할 수 있도록 적당한 자료구조 활용, 또는 파일을 통한 입출력 가능
6. 모듈화(py 확장자 가진 파일 형태로 구현)하여 명령처리 가능하도록 구현
7. 기반 클래스 Account 는 제공하는 것을 사용하여도 좋고 본인 판단에 의해 새롭게 구현해도 됨
class Account: # 개인 계좌 관리
def __init__(self):
self.user = input("계좌번호 = ")
self.name = input("고객이름 = ")
self.balance = input("예금금액 = ")
def disp(self):
print("{0} : {1} : {2}".format(self.user, self.name, self.balance))
def getid(self):
return self.user
def getBalance(self):
return self.balance
class BankManager(Account): # 여러 계좌 관리
def one_user(self,user): # 한 고객의 정보 얻기 위해
userlist = ""
count = -1
if self.check_user(user) == False: # 아이디 존재할 때
try :
f= open("account.txt","r")
except FileNotFoundError as e: #
pass
else:
for line in f:
count+=1
if user == line.split(",")[0]:
userlist= line
break
finally:
f.close()
return count,userlist # 유저 정보 리턴
def check_user(self,user): # - 계좌번호의 중복여부를 판단할 메소드
check=True
try :
f= open("account.txt","r")
except FileNotFoundError as e: #
pass
else:
for line in f:
if user == line.split(",")[0]: # 아이디 중복되면 break
check = False
break
finally:
f.close()
return check
def makeAccount(self):
print("\n==== 계좌등록 ====")
super().__init__()
super().disp()
result = self.check_user(super().getid())
if result: # 참일때 txt파일에 저장
try :
f= open("account.txt","a")
except FileNotFoundError as e: # 파일 존재하지 않을 때 새로 만들기
f= open("account.txt","w")
finally:
f.write(self.user+","+self.name+","+self.balance+"\n")
f.close()
else : # 거짓일 때 중복됬다고 알리기
print("id가 중복됩니다. 다시 입력해주세요")
print("===================")
def showAccount(self): # - 전체고객의 계좌정보를 출력할 메소드
userlist = []
try :
f= open("account.txt","r")
except FileNotFoundError as e: #
print("고객이 없습니다,")
else:
for line in f:
userlist.append(line)
finally:
f.close()
return userlist
class BankingSystem(BankManager):
num = 0
def __init__(self,num):
self.num=int(num)
def controler(self):
if self.num == 1:
super().makeAccount()
elif self.num == 2:
self.printdeposit()
elif self.num == 3:
self.printwithdraw()
elif self.num == 4:
self.printshow()
def printwithdraw(self):
print("==== 출금처리====") #- 출금처리 담당 메소드
user = input("계좌번호 = ")
count,userlist = self.one_user(user)
print("===================")
if userlist != "":
user,username,userbalance = userlist.split(',')
print("{0} : {1} : {2}".format(user,username,userbalance))
print("===================\n")
try:
price = int(input("출금금액 = "))
except ValueError as e:
print("잘못입력하셨습니다")
else :
if (int(userbalance)-int(price)) < 0:
print("고객님 계좌의 잔액이 부족합니다.")
else :
self.change_draw(user,username,int(userbalance)-price,count)
print("출금처리가 완료되었습니다.")
else :
print("일치하는 계좌번호가 존재하지 않습니다.")
print("===================")
def change_draw(self,user,username,userbalance,count):
f = open("account.txt","r+")
for i in range(0,count):
f.readline()
f.seek(f.tell(),0)
f.writelines(user+","+username+","+str(userbalance)+"\n")
f.close()
def change_deposit(self,user,username,userbalance,count):
f = open("account.txt","r+")
for i in range(0,count):
f.readline()
f.seek(f.tell(),0)
f.writelines(user+","+username+","+str(userbalance)+"\n")
f.close()
def printdeposit(self):
print("==== 입금처리====") #- 입금처리 담당 메소드
user = input("계좌번호 = ")
count,userlist = self.one_user(user)
print("===================")
if userlist != "":
user,username,userbalance = userlist.split(',')
print("{0} : {1} : {2}".format(user,username,userbalance))
price = 0
print("===================\n")
try:
price = int(input("입금금액 = "))
except ValueError as e:
print("잘못입력하셨습니다")
else :
self.change_deposit(user,username,int(userbalance)+price,count)
print("입금처리가 완료되었습니다.")
else :
print("일치하는 계좌번호가 존재하지 않습니다.")
print("===================")
def printshow(self):
print("==== 전체고객====") #- 전체고객 조회 메소드
userlist = super().showAccount()
for i in range(0,len(userlist)):
a,b,c = userlist[i].split(",")
print("{0} : {1} : {2}".format(a, b, c),end="")
print("===================")
if __name__ == "__main__":
while True:
print("==== Bank Menu ====")
print("1. 계좌개설")
print("2. 입금처리")
print("3. 출금처리")
print("4. 전체고객 잔액현황")
print("5. 프로그램 종료")
print("===================")
try:
num = int(input("선택 = "))
except ValueError as e:
print("잘못입력하셨습니다")
else :
if num == 5:
break
else :
b = BankingSystem(num)
b.controler()
급여관리.py
[급여관리] - python 상속관계 알기 위해
# 급여관리
# A 라는 회사 직원급여 관리를 목적으로 프로그램 구현
# 정규직(permament) : 이름, 급여(기본급)
# 영업직(Sales) : 이름, 급여(기본급 + 수당)
# 임시직(Temparary) : 이름, 급여(근무시간 * 시간당 급여)
class Employee():
def __init__(self, name=""):
self.name = name
def show(self):
pass
class Permament(Employee):
def __init__(self, name="", pay=0):
super().__init__(name)
self.pay = pay
def show(self):
print("정규직/",self.name,"/",self.pay)
class Sales(Employee):
def __init__(self, name="", pay=0,bonus=0):
super().__init__(name)
self.pay = pay
self.bonus=bonus
def show(self):
print("영업직/",self.name,"/",self.pay+self.bonus)
class Temparary(Employee):
def __init__(self, name="", time=0,timepay=0):
super().__init__(name)
self.time = time
self.timepay=timepay
def show(self):
print("임시직/",self.name,"/",self.time*self.timepay)'Code > Python' 카테고리의 다른 글
| 은행 계좌관리 프로그램.py (0) | 2019.07.25 |
|---|---|
| 숫자야구파일.py (0) | 2019.07.25 |
| 주소록 관리 프로그램.py (0) | 2019.07.24 |
| 슬라이스 (0) | 2019.07.10 |
| 시퀀스 자료형 (0) | 2019.07.10 |
숫자야구파일.py
[숫자야구게임]
# 숫자야구게임
import random
randomnum = []
a = random.randint(1, 9)
b = random.randint(1, 9)
while a==b:
b = random.randint(1, 9)
c = random.randint(1, 9)
while a==c or b==c:
c = random.randint(1, 9)
randomnum.append(a)
randomnum.append(b)
randomnum.append(c)
result = True
while result:
st = 0
ball = 0
lnputlist = []
a,b,c = map(int,input('숫자 세 개를 입력하세요: ').split())
lnputlist.append(a)
lnputlist.append(b)
lnputlist.append(c)
for i in range(0,len(lnputlist)) :
if lnputlist[i] in randomnum:
ball+=1
if lnputlist[i] == randomnum[i]:
st+=1
if ball > 0:
ball-=1
else :
ball = 0
print("스트라이크:",st, "볼:",ball)
if st == 3:
result=False'Code > Python' 카테고리의 다른 글
| 은행 계좌관리 프로그램.py (0) | 2019.07.25 |
|---|---|
| 급여관리.py (0) | 2019.07.25 |
| 주소록 관리 프로그램.py (0) | 2019.07.24 |
| 슬라이스 (0) | 2019.07.10 |
| 시퀀스 자료형 (0) | 2019.07.10 |
주소록 관리 프로그램.py
1. main menu
- 연락처 등록
- 연락처 조회
- 연락처 삭제 : 이름으로 검색 후 동일 이름 전화번호 출력시켜서 삭제할 이름의 번호 입력하면 삭제되도록
- 연락처 출력
- (연락처 변경도 해보자)
- 프로그램 종료
2. 등록
- 이름
- 연락처
- 이메일
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
user = []
def start():
while True:
num = int(input("\n연락처 메뉴 [1.등록 2.조회 3.삭제 4.출력 5.수정 6.종료] 선택 = "))
if num == 1:
print("\n================= 연락처 등록 ================")
elif num == 2:
name = input("조회할 이름을 입력하세요 : ")
print("\n================= 연락처 조회 ================")
if not user_print(name):
print("\n조회 결과가 없습니다.")
elif num == 3:
print("\n================= 연락처 삭제 ================")
name = input("\n삭제할 이름을 입력하세요 : ")
if user_print(name):
delnum = int(input("\n삭제할 번호를 입력하세요 :"))
del(user[delnum-1])
print("\n삭제되었습니다.")
elif num == 4:
print("\n================= 연락처 전체 조회 ================")
if len(user) != 0 :
user_print("all")
else :
print("\n조회 결과가 없습니다.")
elif num == 5:
print("\n================= 연락처 수정 ================")
name = input("\n변경할 이름을 입력하세요 : ")
if user_print(name):
delnum = int(input("\n변경할 번호를 입력하세요 :"))
chnum = int(input("\n변경할 항목 선택 (1. 이름, 2. 전화번호, 3.이메일) : "))
if chnum == 1:
user[delnum-1].setname(input("변경 이름 : "))
elif chnum == 2:
user[delnum-1].settell(input("변경 전화번호 : "))
elif chnum == 3:
user[delnum-1].setemail(input("변경 이메일 : "))
else:
print("\n잘못입력하셨습니다")
else:
print("\n변경할 이름이 없습니다.")
elif num == 6:
break
else:
print("다시 입력하세요")
def user_print(name):
if name == "all":
for i in range(0, len(user)):
print(i+1,end=" ")
user[i].disp()
return
else:
for i in range(0, len(user)):
if user[i].name == name :
print(i+1,end=" ")
user[i].disp()
return True
return False
class Address:
def __init__(self):
def setname(self, name):
self.name = name
def settell(self, tell):
self.tell = tell
def setemail(self, email):
self.email = email
def disp(self):
if __name__ == "__main__":
start()
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
슬라이스
전 게시글과 이어지는 작업으로 시퀀스 자료형 사용함
- 슬라이스(slice) : 무엇인가의 일부를 잘라낸다는 뜻으로 시퀀스 일부를 잘라냄
ex ) 시퀀스객체 [ 시작인덱스 : 끝 인덱스]
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:4] #0에서 3까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30]
- 리스트 중간부분 가져오기
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[4:7] # 4에서 6까지 잘라서 새 시퀀스 만듦
#결과 [40,50,60]
>>> a[4:-1] # 4에서 -1(마지막값)이므로 -2까지만 뽑아서 새 시퀀스 만듦
#결과 [40,50,60,70,80]
- 인덱스 증가폭 사용 : 인덱스의 증가폭을 지정하여 범위 내에서 인덱스를 건너뛰며 요소를 가져올 수 있음
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[2:8:3] # 2부터 7까지 값 가져오는데 인덱스가 3씩 증가
#결과 [20,50]
- 인덱스 생략하기 : 시작 인덱스 혹은 끝 인덱스를 생략하면 맨 처음부터 / 맨 끝까지 돌아갈 때 사용
객체 길이 몰라도 사용할 수 있음
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7] #0에서 6까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30,40,50,60]
>>> a[7:] # 7에서 끝까지 요소 가져옴
#결과 [70,80,90]
- 인덱스 생략하면서 증가폭 사용
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7:2] #0에서 6까지 인덱스는 2씩 증가하여 0,2,4,6
#결과 [0,20,40,60]
>>> a[7::2] # 7부터 끝까지 2씩 증가
#결과 [70,90]
>>> a[::2] #0부터 끝까지 2씩 증가
# [0,20,40,60,80]
>>> a[:::] #0부터 끝까지 출력
# [0,10,20,30,40,50,60,70,80,90]
- len 응용하기
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:len(a)] #0에서 a의 길이까지 -> -1 이 되기때문에 마지막 인덱스 가르킴
#결과 [0,10,20,30,40,50,60,70,80,90]
- 리스트, 튜플, range, 문자열에 모두 사용 가능
- 수정, 삭제는 리스트만 가능하며, 삭제 시 리스트는 새로 시퀀스를 생성하는 것이 아니라 기존 객체에 저장됨
시퀀스 자료형
시퀀스 자료형 : 연속적으로 이어진 자료형 (리스트, 튜플, range, 문자열 등)
- 특정 값 존재 여부 : 값 in 시퀀스 객체 or 값 not in 시퀀스 객체
>>> a = [1,10,20,30,40,50,60,70,80,90]
>>> 30 in a
#결과 True
>>> 1 in range(10)
#결과 True
- 시퀀스 객체 연결하기 : 변수를 만들지 않고 직접 연결 가능하여, 서로 연결하여 새 객체 생성
대신, range는 + 연산자를 통하여 객체르 생성 할 수 없음 -> range를 리스트 혹은 튜플로 만들어서 연결
>>> a = [1,10,20,30]
>>> b = [40,50,60,70,80,90]
>>> a+b
#결과 [1,10,20,30,40,50,60,70,80,90]
- 시퀀스 객체 반복하기 : * 연산자는 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 만든다.
(0 혹은 음수를 곱하면 빈 객체 만들고, 실수는 곱할 수 없음)
>>> [0,1,2] * 2
#결과 [0,1,2,0,1,2,0,1,2]
- 시퀀스 객체의 요소 개수 구하기 : len() 함수를 이용하여 개수 구할 수 있음
>>> len(a)
>>> len(range(0,10,2))
>>> len('hello,world')
- 인덱스 사용하기 : 시퀀스의 객체의 각 요소는 순서가 정해져있음 -> 이 순서를 인덱스라고 함
[]를 사용하여 [] 안에 인덱스 지정하면 해당 요소에 접근 가능 ex) 시퀀스객체 [ 인덱스 ]
>>> a = [1,2,3]
>>> a[0]
#결과 1
>>> a[-1]
#결과 3
- range, 리스트 , 튜플, 문자열 모두에 사용 가능
- 인덱스는 0부터 사용
- 음수는 뒤에서부터 요소 접근하여 마지막 값이 -1, 그 전 값이 -2 .. 이런 형태로 됨
- 인덱스 범위 벗어나면 IndexError 뜸
- 요소 수정하기 : 시퀀스객체[인덱스] = 값
- 튜플과 range 문자열 변경 불가
- del 요소 삭제 : 시퀀스 객체 요소를 삭제함 ex) del 시퀀스개개체[인덱스]
- 튜플과 range와 문자열 삭제 불가
'Code > Python' 카테고리의 다른 글
| 주소록 관리 프로그램.py (0) | 2019.07.24 |
|---|---|
| 슬라이스 (0) | 2019.07.10 |
| 리스트, 튜플 (0) | 2019.07.10 |
| 문자열 사용하기 (0) | 2019.07.10 |
| 불과 비교, 논리 연산자 (0) | 2019.07.10 |
리스트, 튜플
리스트 (List) : 목록이란 뜻으로 값들을 일렬로 저장한 것
리스트 이름 = [값, 값, 값]
- 여러 가지 자료형 저장 가능 : [문자열, 숫자, 정수, 불] 을 리스트 하나에 생성 가능
- range() : 연속된 숫자를 생성하는데 사용. 지정한 횟수 숫자는 생성되는 숫자에 포함되지 않음
>>> a = list(range(10))
>>> a
#결과 [0,1,2,3,4,5,6,7,8,9]
range(10) : 0 ~ 9까지의 값을 순차적으로 출력
>>> c = list(range(-4, 10, 2))
>>> c
#결과 [-4,-2,0,2,4,6,8]
range(시작, 끝. 증가폭) : 처음 시작 값부터 (끝 - 1 ) 까지의 수를 2씩 증가하는 인덱스로 뽑아옴
- 튜플(tuple) : 리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경 , 추가, 삭제를 할 수 없다.
튜플 = (값, 값, 값)
>>> a = (1,2,3,4,5)
>>> a
#결과 (1,2,3,4,5)
* 리스트와 차이점 : 리스트는 []를 사용하며 안에 요소 변경 추가 삭제 가능, 튜플은 ()사용하며, 안에 요소 변경 불가
- range 사용하여 튜플 만들기
>>> a = tuple(range(10))
>>> a
#결과 (0,1,2,3,4,5,6,7,8,9)
- 튜플을 리스트로 만들고 리스트를 튜플로 만들기
>>> a = [1,2,3] #리스트
>>> tuple(a) #튜플
#결과 (1,2,3)
>>> b = (4,5,6) #튜플
>>> list(b) #리스트
#결과 [4,5,6]
tuple() 과 list()를 사용하며, 튜플은 값을 변경할 수 없어 그래도 사용해야 함
문자열 사용하기
- print를 통해 문자 혹은 문자열을 출력한다.
- 문자열 사용하기
>>> hello = '안녕하세요'
>>> hello
#결과 안녕하세요
- 여러줄의 문자열 출력하기 ''' ''' 혹은 """ """
hello = '''hello,world
python
입니다.'''
#결과
hello,word
python
입니다.
-> 줄 띄움을 \n으로 인식하여 출력함
-문자열 안에 작은 따옴표 혹은 큰 따옴표 포함하기 ' " " ' 혹은 " ' ' "
>>> s = 'He said "python is easy"'
>>> s
#결과 He said "python is easy"
불과 비교, 논리 연산자
- boolean : 참(true)와 거짓(false)
비교 연산자와 논리 연산자의 판단 결과로 True, False를 사용함 -> 연산 결과 맞으면 True 아니면 False 반환
>>> 10 == 10
#결과 True
>>> 'Python' == 'python'
#결과 False
>>> 1 == 1.0
#결과 True
#-> 값 자체를 비료
>>> 1 is 1.0
#결과 False
#->객체를 비교하여 정수와 실수가 다르기 때문에 False 반환
- 논리 연산자 : and, or, not (부정) 사용
>>> 10 == 10 and 10 != 5
#결과 True
>>> 10 > 5 or 10 < 3
#결과 True
>>> not 10>5
#결과 False
>>> not 1 is 1.0
#결과 True
변수와 입력 사용
- 인터프리터 언어로 한줄 쓰고 엔터치면 결과 화면에 출력됨
변수 : 데이터 타입이 필요 없이 변수 명만 선언하고 값을 입력할 수 있다.
변수이름 = 값 ex) x = 10
x라는 변수 이름에 10이라는 숫자형태의 값을 넣는다는 의미
- 명명 규칙
: 영문자와 숫자 사용가능, 대소문자 구분함, 문자로 시작하며 숫자로 시작 불가, _로 시작 가능, 특수문자 사용 불가, 파이썬 키워드 사용 불가
- 변수 여러 개를 한 번에 만들기
ex) x, y, z = 10, 20, 30 or x = y = z = 10 (같은 값 입력 할 때)
- 두 변수 값 바꾸기 : 기본 프로그래밍에서는 임시변수를 만들어 저장하고 값을 바꾸어 주었다.
파이썬은 x, y = y, x 을 통하여 변경 가능
>>> a = 10
>>> b = 10
>>> c = a+b
>>> c
-> a 와 b가 더해진 c가 출력이 된다.
- 입력 사용 : input() 함수를 사용하여 사용자에게 입력 값 받음
x = input() -> 사용자에게 입력받은 값을 x에 넣는 의미
x = input('숫자를 입력하세요 ; ') -> 사용자에게 숫자를 입력하세요 : 커서로 보여지며 입력할 수 있도도록 함
하지만 사용자가 숫자를 입력하더라도 x에는 문자형태로 들어가기 때문에 타입변환이 필요하다.
- 숫자로 타입변환
x = int( input('숫자를 입력하세요 ; ') ) -> 입력 되는 값이 숫자로 저장됨
a = map(int, input('숫자를 두개 입력하세요').split() -> map()을 통하여 int 혹은 float로 변환 가능
- 입력 값을 두 변수에 저장
x, y = input().split('기준 문자열') -> 사용자에게 입력 받은 값을 기준 문자열로 나누어 x, y 에 저장
>>> a , b = input('문자열 두개 입력하세요 :').split()
>>> print(a)
>>> print(b)
#출력 화면
문자열 두개 입력하세요 : hello python
hello
python
- 출력 : 변수 여러개 넣을 시 , 를 통하여 구분
>>> print(1,2,3)
1 2 3
>>> print('hello', 'python')
hello python
- sep을 통하여 값 사이에 문자 넣기
print(값1, 값2, sep = '문자 또는 문자열')
>>> print(1,2,3, sep=',')
#출력 결과
1,2,3
출력할 문자 1 2 3 사이에 , 구분자를 넣어준다는 뜻으로 안에 \n, - , x 등등을 넣을 수 있음
- end를 통하여 print 로 출력한 문자 끝에 들어갈 문자를 정의합니다.
>>> print(1,end='')
>>> print(2,end='')
>>> print(3)
#출력 화면
123
원래 print를 사용하면
1
2
3
이렇게 줄이 띄어져서 출력되는 것을 end = '' 을 통하여 한줄로 묶어줌
'Code > Python' 카테고리의 다른 글
| 리스트, 튜플 (0) | 2019.07.10 |
|---|---|
| 문자열 사용하기 (0) | 2019.07.10 |
| 불과 비교, 논리 연산자 (0) | 2019.07.10 |
| 기본 문법 (0) | 2019.07.09 |
| Python 설치하기 (0) | 2019.07.09 |