DATA --> 변수에 담아서 사용.
데이터가 많아지면 변수를 그만큼 생성해야하기 때문에 관리적으로 힘들어짐
이를 해결하기위해서 배열과 같은 객체형 데이터타임.
사실상 하나의 변수가 객체를 가리키고 그 객체는 여러개의 인덱스를 가지게 되면서 인덱스마다 주소를 저장 할 수 있다는 것이 특징
데이터의 초기화 --> 개발자가 진행
input() --> 데이터의 초기화를 사용자가 진행.
프로그램이 실행 될 때마다 초기화가 이루어져야함.
==> 계속해서 데이터를 저장하기 위해 파일의 입출력을 사용
open() : 로컬 컴퓨터의 파일을 열어준다.
close() : 열린 파일을 닫는다.
read() : r 모드일경우 파일을 읽는다.
write() : a 모드일경우 파일 끝부분에 내용을 추가, w모드일경우 파일을 덮어씌워 생성하고 내용을 입력
경로
./ : 현재 디렉터리
../ : 상위 디렉터리
~ : 접속중인 계정의 홈 디렉터리
/ : 최상위 디렉터리
절대경로 : /etc 루트 기준 디렉터리
상대경로 : ../etc 자신 기준 디렉터리
file = open("../../test.txt", "r", encoding="UTF-8")
print(file) # 객체명과 정보를 출력.
#<_io.TextIOWrapper name='../../test.txt' mode='r' encoding='UTF-8'>
file = open("../test.txt", "r+", encoding="UTF-8")
# file.write("adf")
print(file.read())
file = open("../../test.txt", "r", encoding="UTF-8")
data = file.read()
list = data.split("\n")
print(list)
f = input("파일명")
m = input("모드")
file = open(f ,m , encoding="UTF-8")
if "r" == m:
print(file.read())
elif "w" == m:
data = input("입력값 : ")
file.write(data)
elif "a" == m:
data = input("입력값 : ")
file.write(data)
file.close()
ex)
성적처리 프로그램
학생 3명.
각 학생 이름을 INPUT으로 입력받음
과목은 3개이며 학생의 성적은 별개의 파일에 저장됨
단, 반복문 사용불가.
-----------------------
이름 국어 영어 수학 총점 평균 학점환산
학생1
학생2
학생3
----------------------
st_1 = input("첫번째 학생의 이름을 작성하세요")
st_2 = input("두번째 학생의 이름을 작성하세요")
st_3 = input("세번째 학생의 이름을 작성하세요")
rank_1 = ""
rank_2 = ""
rank_3 = ""
st_1_arr = []
st_2_arr = []
st_3_arr = []
st_1_sum = 0
st_1_avg = 0
st_1_div = 0
st_1_cul = 0
st_2_sum = 0
st_2_avg = 0
st_2_div = 0
st_2_cul = 0
st_3_sum = 0
st_3_avg = 0
st_3_div = 0
st_3_cul = 0
# 점수 불러오기 및 list 요소 int 캐스팅
score_st_1 = open("../../student_1.txt","r" , encoding = "UTF-8")
st_1_arr = score_st_1.read().split(" ")
score_st_1.close()
st_1_arr[0] = int(st_1_arr[0])
st_1_arr[1] = int(st_1_arr[1])
st_1_arr[2] = int(st_1_arr[2])
score_st_2 = open("../../student_2.txt","r" , encoding = "UTF-8")
st_2_arr = score_st_2.read().split(" ")
score_st_2.close()
st_2_arr[0] = int(st_2_arr[0])
st_2_arr[1] = int(st_2_arr[1])
st_2_arr[2] = int(st_2_arr[2])
score_st_3 = open("../../student_3.txt","r" , encoding = "UTF-8")
st_3_arr = score_st_3.read().split(" ")
score_st_3.close()
st_3_arr[0] = int(st_3_arr[0])
st_3_arr[1] = int(st_3_arr[1])
st_3_arr[2] = int(st_3_arr[2])
# 총점 및 평균 구하기
st_1_sum = sum(st_1_arr)
st_1_avg = st_1_sum/len(st_1_arr)
st_2_sum = sum(st_2_arr)
st_2_avg = st_2_sum/len(st_2_arr)
st_3_sum = sum(st_3_arr)
st_3_avg = st_3_sum/len(st_3_arr)
# 학점계산기
st_1_div = int(st_1_avg/10)
st_1_cul = int(abs(10 - st_1_div) + 64)
if st_1_avg == 100:
rank1 = "A"
elif (st_1_avg >= 60):
rank_1 = chr(st_1_cul)
else:
rank_1 = "F"
if st_1_avg % 10 >= 5 and rank_1 != "F":
rank_1 = rank_1 + "+"
st_2_div = int(st_2_avg/10)
st_2_cul = int(abs(10 - st_2_div) + 64)
if st_2_avg == 100:
rank_2 = "A"
elif (st_2_avg >= 60):
rank_2 = chr(st_2_cul)
else:
rank_2 = "F"
if st_2_avg % 10 >= 5 and rank_2 != "F":
rank_2 = rank_2 + "+"
st_3_div = int(st_3_avg/10)
st_3_cul = int(abs(10 - st_3_div) + 64)
if st_3_avg == 100:
rank_3 = "A"
elif (st_3_avg >= 60):
rank_3 = chr(st_3_cul)
else:
rank_3 = "F"
if st_3_avg % 10 >= 5 and rank_3 != "F":
rank_3 = rank_3 + "+"
print("%s \t%s \t%s \t%s \t%s \t%s \t%s"%("이름","국어", "수학", "영어", "총점", "평균", "학점환산"))
print("%s \t%d \t%d \t%d \t%d \t%d \t%s"%(st_1, st_1_arr[0], st_1_arr[1], st_1_arr[2], st_1_sum, st_1_avg, rank_1))
print("%s \t%d \t%d \t%d \t%d \t%d \t%s"%(st_2, st_2_arr[0], st_2_arr[1], st_2_arr[2], st_2_sum, st_2_avg, rank_2))
print("%s \t%d \t%d \t%d \t%d \t%d \t%s"%(st_3, st_3_arr[0], st_3_arr[1], st_3_arr[2], st_3_sum, st_3_avg, rank_3))