# 파이썬 자료구조
# 자료구조는 대량의 효율적으로 저장, 조회, 수정,삭제를
# 요구되는 기능과 기법을 의미
# 대표적 자료구조 : 리스트, 튜플, 셋, 딕셔너리
# 성적프로그램 v1
# 이름, 국어, 영어, 수학을 입력하면
# 총점, 평균, 학점을 처리해서 결과 출력
# 성적자료입력
name = input('이름은?')
kor = int(input('국어는?'))
eng = int(input('영어는?'))
mat = int(input('수학은?'))
# 성적처리
tot = kor + eng + mat
avg = tot / 3
grd = '가'
if avg >= 90: grd = '수'
elif avg >=80: grd= '우'
elif avg >=70: grd= '미'
elif avg >=60: grd= '양'
# 성적처리 결과출력
print(f'{name},{kor},{eng},{mat}')
print(f'{tot},{avg:.1f},{grd}')
# 성적프로그램 v2
# 이름, 국어, 영어, 수학을 입력하면
# 총점, 평균, 학점을 처리해서 결과 출력
# 단, 3명의 학생에 대해 성적처리
# 성적자료 초기화
names = ['지은', '수지', '리나', '홍철', '형돈']
kors = [90,80,70,99,99]
engs = [90,80,70,88,88]
mats = [90,80,70,77,77]
tots= [0,0,0]
tots[0] = kors[0] + engs[0] + mats[0]
tots[1] = kors[1] + engs[1] + mats[1]
tots[2] = kors[2] + engs[2] + mats[2]
avgs= [0, 0, 0]
avgs[0] = tots[0] / 3
avgs[1] = tots[1] / 3
avgs[2] = tots[2] / 3
tots=[]
avgs=[]
grds=[]
for i in range(5):
tots.append(kors[i] + engs[i] + mats[i])
avgs.append(tots[i] / 3)
if avgs[i] >= 90 : grds.append('수')
elif avgs[i] >=80: grds.append('우')
elif avgs[i] >=70: grds.append('미')
elif avgs[i] >=60: grds.append('양')
else: grds.append('가')
for i in range(5):
print(f'{names[i]},{kors[i]},{engs[i]},{mats[i]}')
print(f'{tots[i]},{avgs[i]},{grds[i]}')
name1: '혜교'
name2: '수지'
name3: '지현'
kor1=99
kor2=65
kor3=77
#데이터 개수에 따라 일일이 변수선언은 불편함
#이런문제 해결위해 자료구조에 사용하는 기술 적용
#리스트
# 다른 프로그래밍 언어에서는 배열과 유사
# 동일한 형식의 데이터를 1차원 형태로 순차적으로 저장하는 자료구조
# 선언방법은 값을 대괄호 [ ]안에 정의하고 사용
#ex) 점심메뉴 리스트
menus = ['라면', '돈까스', '짜장면', '뚝배기불고기', '냉면']
print(menus)
# 리스트 각 요소에 접근하려면 변수[인덱스]
print(menus [0], menus[2], menus[4])
# 반복문으로 리스트 다루기
for i in range(5):
print(menus[i], end=' ')
for menu in menus: # 리스트의 요소를 하나씩 훑어가며 출력
print(menu)
# 리스트 다루기
menus = []
menus.append('라면') # 리스트에 새로운 요소 추가
menus.append('돈까스') # 새로 추가되는 요소는 맨 뒤에 추가
menus.append('짜장면')
menus.append('뚝배기불고기')
menus.append('냉면')
menus.insert(1, '냉면') # 지정한 인덱스에 요소 추가 (이미 있는놈은 뒤로밀림)
print(menus[2]) # 리스트의 특정요소 출력
menus.remove('라면') # 리스트의 특정요소 제거
menus.pop() # 리스트의 마지막 요소 제거
menus.pop(0) # 지정한 인덱스로 요소 제거
# ex 연습문제 p110 문제1
lst = [10, 1, 5, 2] #list생성
result = lst*2
print(result)
lst[0]*2
result.append(lst[0]*2)
print(result)
result2 = result[1::2] # 2번째 인덱스부터 2의 간격으로 추출
print(result2)
#문제2
size = int(input('vector 수'))
lst = []
for i in range(size):
lst.append(int(input()))
print(len(lst))
size = int(input('vector 수'))
lst = []
for i in range(size):
lst.append(int(input('임의 숫자를 추가하시오')))
if int(input('찾을 값')) in lst:
print('yes')
else : print('no')
print(len(lst))
# employees.csv를 이용하여 사원정보를 입력하면
# list에 각각 저장하는 코드를 작성하세요.
# 사번empmno, 이름fname, 성lname, 이메일email,
# 입사일hdate, 직책jobid, 급여sal, 부서번호deptid
empno = []
fname = []
lname = []
email = []
hdate = []
jobid = []
sal = []
deptid = []
for i in range(3) :
empno.append(input('사원번호를 입력하시오'))
for i in range(3) :
fname.append(input('성(fname) 을 입력하시오'))
for i in range(3) :
lname.append(input('이름을 입력하시오'))
for i in range(3) :
email.append(input('이메일을 입력하시오'))
for i in range(3) :
hdate.append(input('입사날짜를 입력하시오'))
for i in range(3) :
jobid.append(input('직책을 입력하시오'))
for i in range(3):
sal.append(input('급여를 입력하시오'))
for i in range(3):
deptid.append(input('부서번호를 입력하시오'))
lst = [empno, fname, lname, email, hdate, jobid, sal, deptid]
for j in range(int(input('직원의 수는 몇명인가?'))):
for i in range(j) :
empno.append(input('사원번호를 입력하시오'))
for i in range(j) :
fname.append(input('성(fname) 을 입력하시오'))
for i in range(j) :
lst = [empno, fname, lname, email, hdate, jobid, sal, deptid]
################################################################
empnos = []
fnames = []
lnames = []
emails = []
hdates = []
jobids = []
sals = []
deptids = []
#사원정보 입력
empnos = input('사원번호는?')
fnames = input('이름은?')
lnames = input('성은?')
emails = input('이메일은?')
hdates = input('입사일은?')
jobids = input('직책은?')
sals = input('급여는?')
deptids = input('부서는?')
#입력한 사원정보를 리스트에 추가
empnos.append(empno)
fnames.append(fname)
lnames.append(lname)
emails.append(email)
hdates.append(hdate)
jobids.append(jobid)
sals.append(sal)
deptids.append(deptid)
for i in range(len(empnos)):
print(f'{empnos[i]},{fnames[i]},{lnames[i]},'
f'{emails[i]},{hdates[i]},{jobids[i]},'
f'{sals[i]},{deptids[i]}')
# 다루어야 하는 데이터의 항목수가 많아질수록 일일이 리스트로 선언해서 저장하는건 불편
# 딕셔너리를 사용하면 편함
lname.append(input('이름을 입력하시오'))
for i in range(j) :
email.append(input('이메일을 입력하시오'))
for i in range(j) :
hdate.append(input('입사날짜를 입력하시오'))
for i in range(j) :
jobid.append(input('직책을 입력하시오'))
for i in range(j):
sal.append(input('급여를 입력하시오'))
for i in range(j):
deptid.append(input('부서번호를 입력하시오'))