본문 바로가기
자바과정/스터디

파이썬 기초 다지기

by Parkej 2021. 2. 27.

파이썬에 대한 기초 익히기

 

// 기본 정리

 

출처 : includestdio.tistory.com/16

 

[Python] 사칙연산을 위한 7가지 연산자

1. 파이썬(Python) 사칙연산을 위한 7가지 연산자 + 덧셈 - 뺄셈 * 곱하기 ** 거듭 제곱 / 나누기 // 나누기 연산 후 소수점 이하의 수를 버리고, 정수 부분의 수만 구함 % 나누기 연산 후 몫이 아닌 나

includestdio.tistory.com

# +, -, *, **, /, //, %

# ** 거듭제곱, // 나누기 연산 후 소수점 이하의 수를 버리고 정수 부분의 수만 구함
# % 나머지만 구함

# 파이썬 출력문 print
# 파이썬 끝 구분자가 없음 ;

print(2 ** 4)
print(4 / 6)
print(4 // 6)
print(4 % 6)

# 파이썬의 변수와 객체의 개념, 네이밍 컨벤션
# 1. 변수와 
#  - 변수는 임시 혹은 영구적으로 값을 저장해두기 위한 저장소를 뜻함.
#  - 변수사용의 예

total = 0
price = 100
total += price
print(total)

# 파이썬은 모든것이 객체(object)이다
# 자바의 레퍼런스 및 static 과는 다른 개념 ?

# - 19행의 코드를 실행하면 변수(total)와 객체(0)가 만들어진다.
# - 메모리 내부적으로는 0이라는 객체가 가지고 있는 주소를 total 변수가 참조하고 있다.
# - 변수는 객체가 저장된 공간을 가리키는 역할을 한다. 
# - 0의 주소 02x2123650번지 > total이 가리키고 있음, total은 0이 저장된 공간을 가리킴
# - 야 '0' 어딨어, total : 야 0 어딨는지 내가알어 ㅋ 일로와

# x = 3
# y = 5
# z = 5
# print(id(x), id(y), id(z),id(3),id(5))

# id() 함수는 해당 객체의 주소를 반환한다.
# 결과를 보면 변수 x는 3을 가리키고 변수 y와 z는 5를 가리킨다는 것을 알 수 있다.


x = 3
y = 300
z = 400
print(id(x),id(y),id(z),id(3),id(300),id(400))

# 3. 변수 이름 작성 규칙(네이밍 컨벤션)
#  - 영문자나 언더바(_)로 시작한다.(대, 소문자를 구분한다.)
#  - 첫 자리 이후에는 영문자와 숫자를 모두 사용할 수 있다.
#  - 한글이 들어간 변수명도 가능함.
#  - 아래의 키워드는 변수명으로 사용할 수 없다.(예약어)
# 'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'

 

 

 

출처 : blog.daum.net/sualchi/13720356

 

 

// 연산자 예제

 

# 파이썬 연산자
print('-'*50)
# Bit 단위 연산자
a = 15
b = 4
# print(a ^ b) # XOR 
# print(a & b) # AND
# print(a | b) # OR
# print(~a) # 보수
# print(~b) # 보수
# print(a >> b) # right 시프트
# print(a << b) # left 시프트

print('-'*50)
data = [1,2,3,4,5] # 파이썬은 배열이 리스트구조로 되어있음
# 집합형(컨테이너)에 포함되어 있는지 검사
print(b in data) # 멤버 연산자 포함되어 있는가?
print(b not in data) # 멤버 연산자 포함되지 않았는가?

print('-'*50)

# 동일한 개체인지 검사
print(a is b) # 같은 개체인가 (identity) : 값 비교가 아님
# is는 무엇인가
print('-'*50)
# 값 비교
print(a == b) # 같은가
print(a != b) # 다른가
print(a >= b) 
print(a <= b)
print(a > b)
print(a < b)

 

 

// 사칙연산계산기(함수 사용 x)

 

# 파이썬 사칙연산 계산기
import sys
input = lambda:sys.stdin.readline().rstrip()

data = input().split(' ')
# input 함수의 리턴값은 문자열이다 문자열을 배열로도 출력가능함.

if data[1] == '+':
  print(int(data[0]) + int(data[2]))
elif data[1] == '-':
  print(int(data[0]) - int(data[2]))
elif data[1] == '*':
  print(int(data[0]) * int(data[2]))
elif data[1] == '/':
  print(int(data[0]) / int(data[2]))
  
  
  # 파이썬 사칙연산 계산기(반복)
import sys
input = lambda:sys.stdin.readline().rstrip()

while 1:
  data = input().split(' ')
  
  if(data[0] == 'exit'):
    break

  if data[1] == '+':
    print(int(data[0]) + int(data[2]))
  elif data[1] == '-':
    print(int(data[0]) - int(data[2]))
  elif data[1] == '*':
    print(int(data[0]) * int(data[2]))
  elif data[1] == '/':
    print(int(data[0]) // int(data[2]))

 

 

// 파이썬 구구단

 

# 파이썬 구구단
# for 문 (2~9단 출력)


# 파이썬의 구분자는 : 를 사용 들여쓰기를 잘해야함.
 for i in range(2,10): # 포문은 변수 in range로 함.
   for j in range(1,10):
     print(i,"*",j,"=",(i*j))


# format 써보기
temp = [[i,j,i*j] for i in range(2,10) for j in range(1,10)]

# temp안에 저장된 한줄의 문자열들을 출력함.
for i in temp:
  print("{0} * {1} = {2}".format(i[0],i[1],i[2]))

 

// 파이썬 별찍기

 

# str.format()이라고도 한다. {}를 사용하고 .format() 괄호안에 중괄호에 대입할 문자나 숫자를 입력한다.
print('{} X {} = {}'.format(2,3,2*3))

# 출력 : 2 X 3 = 6

print('{1} X {0} = {2}'.format(2,3,2*3))

# 출력 : 3 X 2 = 6
# 순서도 정할 수 있음.

# 별찍기 예제중
for i in range(5):
  print('{}'.format('*'*(i+1)))
  
# {}에 대입할 문자나 숫자를 포맷함수 사용해서 출력함.
# i가 0 일때 {}에는 * X 1을 통해 1개만 출력되고 개행을 한다. (총 5번)

print('{:<5}'.format('*'*(i+1)))

# {:<5} '<' 은 왼쪽부터 문자열 정렬을 나타내고 숫자 5는 출력되는 문자열의 인덱스
# 길이는 5로 지정한다는 얘기다 만약 {}안에 문자나 숫자가 인덱스 길이 5를 넘지않고
# 3까지만 출력된다면 나머지 2개의 인덱스는 공백으로 채워진다.

# 파이썬 별찍기
# {:<10} 문자열 정리 설명, 포맷함수 설명
for i in range(5):
  print('{}'.format('*'*(i+1)))
  
print('-'*50)
for i in range(6,1,-1):
  print('{:<5}'.format('*'*(i-1)))
  
print('-'*50)
for i in range(6,1,-1):
  print('{:>5}'.format('*'*(i-1)))
  
print('-'*50)
for i in range(5):
  print('{:>5}'.format('*'*(i+1)))
  
print('-'*50)
for i in range(1,11,2):
  print('{:0^9}'.format('*'*(i)))
  
print('-'*50)
for i in range(1,11,2):
  print('{:^9}'.format('*'*(i)))
for i in range(7,0,-2):
  print('{:^9}'.format('*'*(i)))
  
print('-'*50)
for i in range(9,0,-2):
  print('{:^9}'.format('*'*(i)))
for i in range(3,11,2):
  print('{:^9}'.format('*'*(i)))

# ^는 가운데 정렬이 가능함
# {:} 로 인덱스 길이 설정

# for i in range(10):
# print('{0:>10}'.format('---'))

# 출력결과 : nnnnnnn---  n은 공백

5, 6, 7

 

 

// 파이썬의 스택과 힙 메모리영역에 관한 내용 정리

 

# 출처 : https://leemoney93.tistory.com/25
# Everything is object의 개념

x = 10
print(type(x))

y = x
if(id(x)==id(y)):
  print("x and y refer to the same object")

# c언어에서 x = 10 이런식으로 변수를 할당하면 메모리에 해당 값이 바로 만들어지지만 파이썬에서는 10이라는 int object를 만들어 놓고 변수 x가 그것을 가리크는 형태이다 (보통 레퍼런스라고 하며 Pointer의 개념 이것이 바로 Everything is object in Python의 핵심 개념임)

# y = x 라고 하면 x에 의해서 이미 만들어진 10이라는 int object를 y는 그냥 가르키기만 한다. 그래서 x와 y는 같은 object를 가르킨다라고 말한다. 결국 10 인 int object를 가르키는건 x,y 2개


x = x + 1
if(id(x) != id(y)):
  print("x and y refer to DIFFERENT objects!")
z = 10
if(id(y) == id(z)):
  print("y and z point to the SAME memory!!")
else:
  print("y and z point DIFFERENT objects!")

# x = x + 1 은 11(10+1)이라는 새로운 int object를 생성한다. 그리고 x는 새롭게 만들어진 int object를 가르킨다.
# 그리고 z = 10은 10이라는 int object를 가르키는데 10 int object는 이미 생성되어 있으니 만들 필요 없고 그냥 가르키기만 한다.

z = Car()
print(type(z))
# z = Car()는 Car라는 object를 생성하고 z는 car object를 가르킨다.


# 메모리 할당 (Stack, Heap)
def f2(x): # 10 들어옴
  x = x + 1 # 11
  return x # f2의 x는 x = 11

def f1(x):
  x = x * 2 # x = 5 * 2 -> 10 int object 생성 및 가르키기 
  y = f2(x) # f2(10), y = 10 ->f2()함수 호출
  return y # f2(x)의 리턴값인 11이 호출
# main
y = 5
z = f1(y) # z는 11이 됨

# Stack Memory : main[y,z], f1()[y,z], f2()[x]
# Heap Memory : y = 5, f1():x=10, f1():y&f2():x = 11

# main 함수
# main 함수에서 y=5(5 int object 생성 and 가르키기)와 f1(y)함수를 call 한다 f1(y)를 호출하면 Stack 영역에 f1()영역이 생성 된다.
# f1 함수 : f1 함수에서 x = x * 2(5*2)로 10 int object 생성 및 가르키기를 하고 f2(x)를 호출하면 stack 영역에 f2() 영역이 생성된다.
# f2 함수 : x = x + 1(10 + 1)로 11 int object 생성 및 가르키기를 한다.

# 메모리 할당 해제
# 우선 Stack의 가장 위에 있는 f2함수가 해제 된다. (LIFO)
# 그 다음 f1함수가 해제 되는데 f1함수의 변수 x가 없어짐에 따라 10 int object도 없어진다. (10 int object를 아무도 가르키지 않기 때문) 이것이 바로 reference counting이 0이 됨에 따라 object가 없어지는 가비지 컬렉터이다. 
# 파이썬은 '레퍼런스 카운팅'을 이용해 메모리를 관리한다. 원리는 f1함수가 해제될떄 10 int object가 사라지는 것이 대표적인 예이다.
# 마지막으로 main 함수의 변수 z는 11을 가르킨다.

# Class instance 메모리 관리(self는 정확히 무엇인가)

class Car:
  def __init__(self,w): # 생성자 함수
    # self는 Car instance(object)의 주소(reference) 값이다.
    self.wheels = w # w = 4(int object)

  def getWheels(self):
    return self.wheels

# main
c = Car(4) # 생성자 함수 __init__ 호출
n = c.getWheels() # print(n) = 4출력/ c.getWheels(self)
# 메소드 실행 Stack n 생성
# c.getWheels()를 실행하면 Stack 영역이 만들어지고 매개변수로 self가 생성된다. self는 instance의 주소 값을 가지고 있는 변수이니 self를 통해 Heap영역의 wheels 변수에 접근한다. 접근 값은 4이고 main함수의 n 값은 Heap 영역의 4를 가르킨다. 


# Stack Memory : main = c, __init__ = w/self
# Heap Memoey : c & self => Car.wheels, Car.wheels & __init__.w => 4

# 할당 해제
# main에서 c = Car(4)는 class instance를 생성하는데 처음에 생성자 함수 __init__이 호출된다.
# 여기서 self, w 2개를 매개변수로 받는데 이는 매개변수 즉 지역변수 이기 때문에 Stack 영역에 생성된다.
# w는 당연히 4인데, self는 정확히 무엇일까 ? 
# Car instance(object)의 주소(reference) 값이다. 한마디로 모든 class 메소드는 self를 매개변수로 가지는데 self는 자신의 Class instance의 주소 값이다. 너무나 중요한 말이고 너무나 당연한 말이다. self를 매개변수로 받지 않으면 어떻게 instance값을 참조 할 것인가? 찾지를 못한다.

# 그리고 self.wheels는 instance의 변수 즉 속성(attribute)이다. attribute는 Heap 영역에 할당된다. 왜냐면 __init__함수가 없어지고 Stack 영역이 사라져도 self.wheels는 존재해야 하니까 !!
# self.wheels는 w가 가리키는 4를 가르킨다.

# 참조 영상 : http://www.youtube.com/watch?v=arxWaw-E8QQ

 

// 성적처리프로그램

 

# 성적처리프로그램(1사람 처리)
# 입력 : 이름, 국, 영, 수
# 연산 : 총점, 평균
# 출력 : 이름, 국, 영, 수, 총, 평
import sys
input = lambda:sys.stdin.readline().rstrip()

print("이름입력과 국어, 영어, 수학 점수를 입력하세요")
print("한줄에 입력(이름 : 국 영 수)")
data = input().split(' ')
print('*'*20)
tot = int(data[1]) + int(data[2]) + int(data[3])

print("{:<5}{:<5}{:<5}{:<5}".format("이름","국어","영어","수학"))
print ("     ".join(data))
print('*'*20)
print("총점 : ",int(tot))
print("평균 : ",int(tot)//3)





# 성적처리프로그램(여러사람 처리, 배열[리스트] 사용)
# 입력 : 이름, 국, 영, 수
# 연산 : 총점, 평균
# 출력 : 이름, 국, 영, 수, 총, 평
import sys
input = lambda:sys.stdin.readline().rstrip()
arr = []
print("성적 입력할 학생 수를 입력")
num = int(input())
print('*'*20)
print("이름입력과 국어, 영어, 수학 점수를 입력하세요")
print("한줄에 입력(이름 : 국 영 수)")
while 1:
  if(num == 0):
    break;
  data = input().split(' ')
  tot = int(data[1]) + int(data[2]) + int(data[3])
  data.append(tot)
  data.append(int(tot)//3)
  arr.append(data) # 이름 국 영 수 총점 평균이 들어감
  num -= 1

print('*'*20)
print("{:<3}{:<3}{:<3}{:<3}{:<3}{:<3}".format("이름","국어","영어","수학","총점","평균"))
for i in range(len(arr)):
  print("{:<5}{:<5}{:<5}{:<5}{:<5}{:<5}".format(arr[i][0],arr[i][1],arr[i][2],arr[i][3],arr[i][4],arr[i][5]))
  
  
  
  
 # 성적처리프로그램(1사람 처리 , 함수 이용)
# 입력 : 이름, 국, 영, 수
# 연산 : 총점, 평균
# 출력 : 이름, 국, 영, 수, 총, 평
import sys
input = lambda:sys.stdin.readline().rstrip()
def inp():
  print("이름과 국영수 점수를 입력하세요")
  return input().split(' ')
  
def op(d):
  d.append(int(d[1]) + int(d[2]) + int(d[3]))
  d.append(int(d[4])//3)
  return map(str,d)

def disp(b):
  data = b
  print("{:<3}{:<3}{:<3}{:<3}{:<3}{:<3}".format("이름","국어","영어","수학","총점","평균"))
  print("   ".join(data))

a = inp()
b = op(a)
disp(b)




# 성적처리프로그램(반과 여러사람 처리 , 리스트 이용)
# 입력1 : 반 
# 입력2 : 학생 수 
# 입력3 : 각 학생의 이름, 국, 영, 수
# 연산 : 총점, 평균
# 출력 : 반의 각 학생 이름, 국, 영, 수, 총, 평
import sys
input = lambda:sys.stdin.readline().rstrip()

print("생성할 반의 수를 입력하세요")
classNum = []


for i in range(int(input())):
  print(i+1,"반의 학생수는 몇명입니까?")
  peopleNum = []
  for j in range(int(input())):
    print(j+1,"번 학생의 이름, 국어, 영어, 수학을 입력하세요")
    data = input().split(' ')
    peopleNum.append(data)
  classNum.append(peopleNum)

print(classNum)





# 성적처리프로그램(반과 여러사람 처리 , 3차원 리스트 이용)
# 입력1 : 반 
# 입력2 : 학생 수 
# 입력3 : 각 학생의 이름, 국, 영, 수
# 연산 : 총점, 평균
# 출력 : 반의 각 학생 이름, 국, 영, 수, 총, 평
# import sys
# input = lambda:sys.stdin.readline().rstrip()

print("생성할 반의 수를 입력하세요")
classNum = []

for i in range(int(input())):
  print(i+1,"반의 학생수는 몇명입니까?")
  peopleNum = []
  for j in range(int(input())):
    print(j+1,"번 학생의 이름, 국어, 영어, 수학을 입력하세요")
    data = input().split(' ') # split을 이용해 공백을 기준으로 문자열을 나눔
    data.append(int(data[1]) + int(data[2]) + int(data[3]))
    data.append(int(data[4])//3)
    peopleNum.append(data)
  classNum.append(peopleNum)


for i in range(len(classNum)):
  print('{:-^10}'.format(i+1))
  print("{:<3}{:<3}{:<3}{:<3}{:<3}{:<3}".format("이름","국어","영어","수학","총점","평균"))
  for j in range(len(peopleNum)):
    print('{:<5}{:<5}{:<5}{:<5}{:<5}{:<5}'.format(classNum[i][j][0],classNum[i][j][2],classNum[i][j][3],classNum[i][j][3],classNum[i][j][4],classNum[i][j][5]))






# 성적처리(클래스)
#  성적처리프로그램
#  입력 : 이름, 국, 영, 수
#  연산 : 총점, 평균
#  출력 : 이름, 국, 영, 수, 총, 평

class Student:
# 학생 클래스 생성
  def __init__(self, name, kor, eng, math): 
    # Student 클래스의 생성자 생성
    self.name = name
    self.kor = kor
    self.eng = eng
    self.math = math

    self.total = self.kor+self.eng+self.math
    self.avg = self.total/3.0

    print(self.name,'\t', self.kor,'\t', self.eng, '\t',self.math,'\t', self.total, '\t',self.avg)
    print('*'*30)


data = []
  
while 1:
  name = input("학생 이름 : ")
  if name == 'end':
    break
  kor = int(input("국어 점수 : "))
  eng = int(input("영어 점수 : "))
  math = int(input("수학 점수 : "))
  print('*'*30)
  s = Student(name,kor,eng,math)
  data.append([s.name,s.kor,s.eng,s.math,s.total,s.avg])

print("이름",'\t',"국어",'\t',"영어",'\t',"수학",'\t',"총점",'\t',"평균")
for i in data:
  print('\t'.join(map(str,i)))


# Student("박의진",90,100,95)
# Student("pej",90,100,95)








# 성적처리프로그램(1인처리, n개 과목 수)

class Student:
  def __init__(self,name):
    self.name = name
    self.subject = []
    self.tot = 0

  def setSubject(self,num):
    self.subject.append(num)

  def getSubject(self):
    return self.subject

  def getTotal(self):
    for i in range(len(self.getSubject())):
      self.tot += self.getSubject()[i]
    return self.tot

  def getAvg(self):
    return (self.tot/len(self.getSubject()))

  def disp(self):
    print(self.name, self.getSubject(), self.getTotal(),self.getAvg())



name = input("이름 입력 : ")
S = Student(name)
for i in range(int(input("입력할 과묵 수 : "))):
  S.setSubject(int(input("해당 과목 점수 입력 : ")))

S.disp()

 

// 사칙연산계싼기 (함수 사용)

 

# 사칙연산계산기(함수)
# 연산 

# 더하기

def disp():
  print("계산할 수와 연산기호를 입력")
  return input().split(' ')

def chk(c):
  if c[0] == 'end':
    return c[0]
  elif c[1] == '+':
    add(c)
  elif c[1] == '-':
    sub(c)
  elif c[1] == '*':
    mul(c)
  elif c[1] == '/':
    div(c)

def add(c): 
  return print(int(c[0]) + int(c[2]))
# 빼기
def sub(c):
  return print(int(c[0]) - int(c[2]))
# 곱하기
def mul(c):
  return print(int(c[0]) * int(c[2]))
# 빼기
def div(c):
  return print(int(c[0]) / int(c[2]))

while 1:
  o = disp()
  if chk(o) == 'end':
    break


 

 

// 스택

 

# 파이썬의 내장 리스트로 구현
# 동적스택으로 만들어보기
class St:
  def __init__(self):
    self.arr = []
    
  def _pop(self):
    if len(self.arr) != 0:
      print(self.arr[-1])
      del self.arr[-1]
      # return self.arr
    else:
      print("비어있음.")
      pass

  def _push(self,num):
    return self.arr.append(num)

  def _size(self):
    print(len(self.arr))

  def _empty(self):
    if len(self.arr) == 0:
      return 0
    else:
      return 1

  def _disp(self):
    print(self.arr)


s = St()

s._push(3)
print(s.arr)
s._pop()
print(s.arr)
s._size()
print(s._empty())
s._push(3)
s._push(4)
s._push(5)
s._push(6)
s._disp()
s._pop() # 6
s._pop() # 5
s._disp()

 

 

// 큐

 

# 일반적으로 원형 큐가 되어야 한다. (나중에 해보기)

class Qu:
  def __init__(self):
    self.arr = []
    
  def _pop(self):
    if len(self.arr) != 0:
      print(self.arr[0])
      del self.arr[0]
      # return self.arr
    else:
      print("비어있음.")
      pass

  def _push(self,num):
    return self.arr.append(num)

  def _size(self):
    print(len(self.arr))

  def _empty(self):
    if len(self.arr) == 0:
      return 0
    else:
      return 1

  def _disp(self):
    print(self.arr)


q = Qu()

q._push(3)
print(q.arr)
q._pop()
print(q.arr)
q._size()
print(q._empty())
q._push(3)
q._push(4)
q._push(5)
q._push(6)
q._disp()
q._pop() # 
q._pop() # 
q._disp()
q._size()

 

 

// 컬렉션 사용 큐(양방향)

 

# 파이썬 스택 collecntions 모듈로 구현

# from pythonds.basic.stack import stack
# 참고 : https://velog.io/@gillog/Python-Stack-Queue-%EA%B8%B0%EB%B3%B8-module-%EC%82%AC%EC%9A%A9-%EC%A0%95%EB%A6%AC

# from collections import stack
from collections import deque
# s = stack()
d = deque() # 양방향 연결리스트(Doubly Linked List)

# 일반적인 값 넣기
d.append(3)
d.append(4)
d.append(5)
d.append(6)
print(d)

# 왼쪽에 데이터 삽입
d.appendleft(7)
d.appendleft(6)
print(d)

# 중간에 데이터 삽입
d.insert(4, 10)
print(d)

# 큐 오른쪽 왼쪽에 인터레이블 객체 append 연장
d.extend([0,0,0])
print(d)
d.extendleft([1,1,1])
print(d)

# 왼쪽 오른쪽 제거
print(d.popleft())
print(d)

print(d.pop())
print(d)

# 데크를 list로 사용

list(d)

print(d)

 

// 급여관리 프로그램

 

# 참고 사이트 : https://davinci-ai.tistory.com/16

# 급여관리프로그램
class Employee: # 정규직
    def __init__(self):
      self.empNo = 0
      self.name = ""
      self.sal = 0
      self.cf = ""
    
    # def getEmpno(self): # 자동
    #   return self.empNo
    # def setEmpno(self,num):
    #   self.empNo = num

    # def getName(self):
    #   return self.name
    # def setName(self,name):
    #   self.name = name

    # def getSal(self):
    #   return self.sal
    # def setSal(self,num):
    #   self.sal = num

    # def getCf(self): # 자동
    #   return self.cf
    # def setCf(self,cf):
    #   self.cf = cf



class Permanent(Employee):
  def __init__(self):
    self.dept = ""
    self.incentive = 0
    self.position = ""

  def disp(self):
    return "정규직"

  # def getDept(self):
  #   return self.dept
  # def setDept(self,dept):
  #   self.dept = dept

  # def getIncentive(self):
  #   return self.incentive
  # def setIncentive(self,num):
  #   self.incentive = num

  # def getPosition(self):
  #   return self.position
  # def setPosition(self,posi):
  #   self.position = posi

class Irregular(Employee):
  def __init__(self):
    self.extraSal = 0 # 추가 수당
    self.workTerm = 0 # 일한 기간
    self.workTime = 0 # 일한 시간
  
  def disp(self):
    return "비정규"
  
  # def getExtrasal(self):
  #   return self.extraSal
  # def setExtrasal(self,num):
  #   self.extraSal = num

  # def getWorkTerm(self):
  #   return self.workTerm
  # def setWorkTerm(self,num):
  #   self.workTerm = num

  # def getWorkTime(self):
  #   return self.workTime
  # def setWorkTime(self,num):
  #   self.workTime = num
    

class Management:
  def __init__(self):
    # i = Irregular()
    # self.em = []
    self.per = [] # 정규직
    self.irr = [] # 비정규직

  def menuPrint(self):
    print("--- 급여관리 프로그램 ---")
    print("1. 전체 조회")
    print("2. 사원 조회")
    print("3. 사원 추가")
    print("4. 사원 수정")
    print("5. 사원 삭제")
    print("6. 종료")
    print('*'*20)

  def selectMenu(self):
    st = input("메뉴 입력 : ")
    if st == '1':
      self.allSelect()
      
    elif st == '2':
      self.empSelect()
      
    elif st == '3':
      self.empCreate()
      
    elif st == '4':
      self.empUpdate()
      
    elif st == '5':
      self.empDelete()

    elif st == '6':
      return 0

  def allSelect(self):
    print(self.per[0].cf)
    print(self.irr)


  def empSelect(self):
    pass
  def empCreate(self): # 사원 추가
    num = int(input("1. 정규직 2. 비정규 => 숫자입력 : "))
    if num == 1: # 정규직 추가
      self.p = Permanent()
      self.p.cf = "A"
      self.p.empNo = "1"
      self.p.dept = input("부서 입력 : ")
      self.p.name = input("이름 입력 : ")
      self.p.position = input("직급 입력 : ")
      self.p.sal = int(input("급여 입력 : "))
      self.p.incentive = int(input("보너스 입력 : "))
      

      # self.p.cf("A")
      # self.p.empNo(len(self.per)+1)
      # self.p.dept(input("부서 입력 : "))
      # self.p.name(input("이름 입력 : "))
      # self.p.setPosition(input("직급 입력 : "))
      # self.p.setSal(int(input("급여 입력 : ")))
      # self.p.setIncentive(input("보너스 입력 : "))
      

      self.per.append(self.p)
      
    elif num == 2:
      pass


  def empUpdate(self):
    pass

  def empDelete(self):
    pass

m = Management()
while 1:
  m.menuPrint()
  s = m.selectMenu()
  if(s == 0):
    break
반응형

'자바과정 > 스터디' 카테고리의 다른 글

Java 기초 - 6일차  (0) 2021.02.04
스터디 3일차(this, 클래스, 실습추가)  (0) 2021.02.03
스터디 2일차(실습 코드 보완)  (0) 2021.02.02
스터디 2일차  (0) 2021.02.02
스터디 1일차  (0) 2021.02.02

댓글