오늘은 Python 기초 마지막 내용입니다. file과 class에 대해서 배워보겠습니다.
목차 | |
1. | file |
2. | class |
3. | 예제 문제 풀이 |
4. | 느낀점 |
1. file
◎ r : 읽기
◎ w : 쓰기
◎ a : 추가
◎ encoding = 'UTF - 8' : 한글 깨짐 방지 모드
- 예시 :
f1 = open(r"D:\pythonfile\newFile.txt, "w")
f1 = open("D:/pythonfile//newFile.txt, "w")
f1.close()
◎ readline : 한 줄만 읽음
◎ read : 다 읽음
◎ readlines : 명령어도 무시하고 다 읽음
- 예시 :
# 파이썬 경로: 슬래시(/) + 역슬래시(\\) (= 키보드의 돈(money) 기호) or r역슬래시(\)
f = open("newFile.txt", 'w', encoding = 'UTF-8')
for i in range(0,10):
data = "%d new File Writer ~!! \n" % i
f.write(data)
f.close()
# strip() : 마지막 \n(enter) 제거
f1 = open("newFile.txt", "r", encoding = 'UTF-8')
line = f1.readlines()
for i in line:
print(i.strip())
# while True:
# line = f1.readline()
# if not line: break
# print(line)
f1.close()
f2 = open("newFile.txt", 'a', encoding = 'UTF-8')
for i in range(10,20):
data = ("%d번째 내용입니다.\n" % i)
f2.write(data)
f2.close
# with문 : close를 알아서 해줌.
with open("newFile.txt", 'w') as f:
f.write("test")
그러면 문제 하나를 풀어보겠습니다.
- 딕셔너리를 이용하여 학생 5명의 이름과 점수를 입력받고, 학생들의 점수 합계와 평균을 성적표 파일로 따로 출력하시오.
딕셔너리의 dic.key()와 dic.get()을 활용하고 데이터를 누적하는 방법을 이용하면 간단하게 해결할 수 있습니다.
dic = {}
n = 5
num = 0
while num < n:
name = input("이름: ")
score = int(input("점수: "))
dic[name] = score
num += 1
data = ''
f = open("성적표.txt", 'w')
for i in dic.key():
# get(key) value return
data += '%s : %d\n' %(i, dic.get(i)) # 데이터 누적
sum += dic.get(i)
data += 'sum : %d\n' % sum
data += 'avg : %.2f\n' % (sum/n)
print(data)
f.write(data)
f.close()
2. class
: 객체를 만드는 틀이라고 생각하시면 됩니다.(객체 지향 언어)
class의 경우에는 이해하기 힘들 수 있는 개념인데요 init 아래에 있는 self.변수는 class에서 사용된다고 보시면 됩니다.
나머지 부분은 함수랑 거의 비슷합니다.
class Calc:
def __init__(self): # init - 초기화, 괄호 안에 있는 self 뒤에 넣는 변수들은 클래스의 이름에 쓰일 변수
self.result = 0 # __init__(self, name, number) => c = Calc('A'(=name),'B'(=number)) => 즉 클래스의 이름 달아주기임(굳이 필요하지 않음)
def add(self, num): # add - 함수, num - 외부에서 사용되는 변수
data = "%d+%d=%d" % (self.result, num, (self.result + num))
self.result += num
return data
def sub(self, num):
data = "%d-%d=%d" % (self.result, num, (self.result - num))
self.result -= num
return data
def mul(self, num):
data = "%d*%d=%d" % (self.result, num, (self.result * num))
self.result *= num
return data
def div(self, num):
if num == 0:
return "error"
data = "%d/%d=%d" % (self.result, num, (self.result / num))
self.result /= num
return data
객체 생성을 할 때는 변수의 이름이 다르다면 개별적으로 운영된다고 생각하시면 됩니다.
# 객체 생성
c1 = Calc()
print(c1.add(5))
print(c1.add(5))
print(c1.add(5))
print(c1.add(5))
# 5 10 15 20
print("---------------------")
# 객체 생성 - c1과 c2는 개별적으로 운영됨!!
c2 = Calc()
print(c2.add(10))
c3 = Calc()
print(c3.add(70))
print(c3.sub(20))
print(c3.mul(2))
print(c3.div(0))
그렇다면 class를 이용해서 계산기를 한 번 만들어보겠습니다.
class Calc2:
def __init__(self):
self.result = 0
self.num = 0
self.op = 0
def res(self, num, op):
if op == '+':
self.result += num
elif op == '-':
self.result -= num
elif op == '*':
self.result *= num
elif op == '/':
if num == 0:
return "error"
self.result /= num
else:
return "error"
return self.result
def calc2Print(self, num, op):
i = self.result
self.op = op
self.num = num
resResult = self.res(num, op)
if resResult == 'error':
return resResult
data = "%d%s%d=%d" % (i, op, num, self.res(num, op))
return data
c1 = Calc2()
print(c1.res(10,'+'))
print(c1.res(3,'-'))
print(c1.res(3,'*'))
print(c1.res(0,'*/'))
print(c1.calc2Print(10,'+'))
print(c1.calc2Print(5,'-'))
print(c1.calc2Print(7,'*'))
print(c1.calc2Print(0,'/'))
계산기의 원리 자체는 저번에 해본 적이 있으니 계산 함수를 class로 옮기고 정리했다고 생각하시면 될 거 같습니다.
class로 한 번 만들면 다른 파일에서도 불러올 수 있습니다.
- 예시 :
# from class02 import Calc2
# c1 = Calc2()
# print(c1.calc2Print(10,'+'))
3. 예제 문제 풀이
◎ 문제 1번
- 자동차 시스템 만들기
1. class 이용하기
2. power = 시동, speed = 속도라고 하자
3. 시동은 On /Off로 하며 시동을 바꿀 때마다 출력
4. 시동이 꺼져 있을 때 속도를 증감할 수 없음
5. 속도는 10씩 증가, 감소하고 출력
6. 속도가 0이 아닐 때는 시동을 못 끄고 경고를 출력
7. 속도는 0 ~ 200까지로 제한, 범위를 초과하거나 미만이 될 때 각각 200, 0으로 고정하며 경고를 출력
◎ 문제 2번
- TV 리모컨 시스템 만들기
1. name = LG
2. power = 전원 (True / False)
3. ch = 채널
4. vol = 소리
5. 전원이 켜져야 동작하며 전원이 켜지거나 꺼질 때 출력
6. 채널은 0 ~ 20 순환 구조 (ex: 채널 0번에서 내려가면 -1번으로 갈 수 있는 것이 아닌 10번으로 이동함)
7. 소리는 0~10 단일 구조 (ex: 볼륨의 max : 10, min: 0)
8. 채널, 소리가 변동을 할 때마다 출력
◎ 문제 1번 정답
class Car:
def __init__(self, name, num) -> None: # '-> None' 유무 상관없음
self.num = num
self.name = name
self.power = False
self.speed = 0
def powerOnOff(self):
if self.speed == 0:
self.power = not self.power
if self.power :
print("시동이 켜졌습니다.")
else:
print("시동이 꺼졌습니다.")
else:
print("오류 속도를 줄이세요")
def speedUp(self):
if self.power:
if self.speed >= 200:
self.speed = 200
else:
self.speed += 10
print(self.speed)
def speedDown(self):
if self.power:
if self.speed <= 0:
self.speed == 0
else:
self.speed -= 10
print(self.speed)
def carPrint(self):
print(self.name + "("+self.num+")") # "+ +" (= 숫자를 출력하고 싶을 때)
c = Car('Benz', '1234')
c.carPrint()
c.powerOnOff()
c.speedUp()
c.powerOnOff()
c.speedDown()
c.powerOnOff()
◎ 문제 2번 정답
class TV:
def __init__(self, name) -> None: # self 뒤에 변수를 넣으면 나중에도 변수의 이름을 바꿀 거라는 뜻(없다면 변수의 이름을 고정하겠다.)
self.name = name
self.power = False
self.ch = 0
self.vol = 0
def powerOnOff(self):
self.power = not self.power
if self.power:
print("전원이 켜졌습니다.")
print("현재 채널은 %d입니다." % self.ch)
else:
print("전원이 꺼졌습니다.")
def chUp(self):
if self.power:
if self.ch == 10:
self.ch = 0
print("채널: %d" % self.ch)
else:
self.ch += 1
print("채널: %d" % self.ch)
def chDown(self):
if self.power:
if self.ch == 0:
self.ch = 10
print("채널: %d" % self.ch)
else:
self.ch -= 1
print("채널: %d" % self.ch)
def volUp(self):
if self.power:
if self.vol > 9:
print("최대 볼륨입니다.")
else:
self.vol += 1
print("볼륨: %d" % self.vol)
def volDown(self):
if self.power:
if self.vol < 1:
print("최소 볼륨입니다.")
else:
self.vol -= 1
print("볼륨: %d" % self.vol)
def tvPrint(self):
print(self.name + "리모컨")
4. 느낀점
마지막에 배운 클래스의 개념이 너무 이해하기 힘들었지만 문제를 계속 풀다 보니 class를 왜 이용하는 지, 어떻게 이용하는지 어느 정도 알게 되었다. 다음 주부터 Java를 배우면서 Python과 어떤 부분이 다른지 같은지 비슷한지 궁금해지기도 했으며, class를 어떤 식으로 배울 지 궁금해지면서 너무 어려울 것 같아 두렵기도 하지만 잘 배울 수 있도록 복습을 틈틈히 해야겠다고 생각하게 되었다.
'Python' 카테고리의 다른 글
Python 기초(Set, Function) - AWS 풀스택 과정 (예습) 4일차 (0) | 2024.07.04 |
---|---|
Python 기초(List, Dictionary) - AWS 풀스택 과정 (예습) 3일차 (0) | 2024.07.04 |
Python 기초(For, While) - AWS 풀스택 과정 (예습) 2일차 (0) | 2024.07.02 |
Python 설정 및 기초(변수, 문자열, IF) - AWS 풀스택 과정 (예습) 1일차 (0) | 2024.07.02 |