
배웠던 내용들을 활용하여 아래와 같은 프로그램 코딩하기
컨셉 : 제품명
빈 리스트 생성 > 리스트 사용 필요
print 메뉴 설정 > 함수 사용 필요
1) 2) 에서 name을 추가하고 변경시키기 위해서 > input 필요
1) Add name
2) Change name
3) Delete name
4) Print
5) Quit
1 입력
Enter action to do : 1
Enter name to add to names list : aaa
name = [] # name 을 받을 리스트 생성
def add_name(): # 1) add_name의 함수 설정
ask_name = str(input('Enter name to add to names list :')) # 입력값을 문자열로 받음
name.append(ask_name) # name 리스트 뒤에 입력받은 문자열을 추가
def change_name(): # 2) change_name 함수 설정
print_names() # 이름 목록 호출하는 함수 호출
row_ask = int(input('Enter row number to change name :')) # 변경할 인덱스 번호 입력받음
ask_name = str(input('Enter name : ')) # 변경할 이름을 입력받음
name[row_ask] = ask_name # 입력받은 index의 이름을 변경
print_name()
def delete_name(): # 3) delets_name 함수 설정
print_names() # 이름 목록 호출하는 함수 호출
row_ask = int(input('Enter row number to delete name :'))
name.pop(row_ask) # name 리스트에서 입력받은 숫자 인덱스에 위치한 요소를 제거하고 반환
def print_name(): # 특정 기능 후 리스트의 상태를 출력, 2)번 함수 호출 이후 리스트 상태 출력
count_row = 0 # 초기 변수 0으로 설정
for row in name: # name 리스트의 각 항목을 반복
print('Row' + str(count_row) + ':' + str(row)) # Row 1 : (name의 1번 인덱스 호출)
def print_names(): # 4) print 함수 설정, 리스트에 있는 전체 이름을 보여줄 때 사용
count_row = 0 # 초기 변수 0으로 설정, 해당 함수 내에서만 활용되기에 변수명 겹쳐도 괜찮음
for row in name:
print('Row' + str(count_row) + ' : ' + str(row))
count_row += 1
def main() : # 항목을 보여주는 메인 함수 생성
while True: # 반복문을 통해 각 항목 반복하며 프린트
print('1) Add name')
print('2) Change name')
print('3) Delete name')
print('4) Print')
print('5) Quit')
ask = int(input('Enter action to do :')) # ask 변수를 통해 정수 입력받음
if ask == 1: # ask 가 1이라면 add_name 함수로 보냄
add_name()
elif ask ==2: # ask 가 2이라면 change_name 함수로 보냄
change_name()
elif ask ==3: # ask 가 3이라면 delete_name 함수로 보냄
delete_name()
elif ask ==4: # ask 가 4이라면 print_names 함수로 보냄
print_names()
elif ask ==5: # ask 가 5라면 good bye 출력
print('Good bye')
else: # 그 외에는 재시도 문구 출력
print('Invalid input, please try again')
main()





5번 quit 동작 입력 시에도 또 메뉴가 노출되는게 어색한 것 같아서
break 문을 추가해서 main이 노출되지 않도록 수정했다.
elif ask ==5:
print('Good bye')
break

점수 입력 받아야함 > input 사용
빈 리스트 생성 > 리스트 사용 필요
1) 2) 에서 name을 추가하고 변경시키기 위해서 > input 필요
score = [] # 값을 저장시킬 빈 리스트 생성
while True: # while True 무한루프 반복문, 특정 조건 입력 시 까지 반복
kor = int(input("국어 점수를 넣어주세요. : ")) # 값을 입력받고 int(정수형)으로 저장
eng = int(input("영어 점수를 넣어주세요. : "))
math = int(input("수학 점수를 넣어주세요. : "))
if kor == 0 and eng == 0 and math == 0: # 만약 변수들의 입력 값이 0 이면
break # 종료시킴
my_sum = kor + eng + math # 총점
my_avg = my_sum / 3.0 # 평균
score.append((kor, eng, math, my_sum, my_avg)) # () 튜플 형태로 리스트 뒤에서부터 추가함
# 튜플 : 값을 변경할 수 없음
# score.append([kor, eng, math, my_sum, my_avg]) # 리스트 : 값을 변경 할 수 있음
print() # print가 없으면 국어/영어/수학 점수 input문이 구분없이 반복됨
# 구분을 위해 print 사용
"""
현재 추가되고 있는 방식 (튜플)
socre = [
(kor1, eng1, math1, my_sum1, my_avg1),
(kor2, eng2, math2, my_sum2, my_avg2),
]
그 외 추가 방식 (리스트)
socre = [
[kor1, eng1, math1, my_sum1, my_avg1],
[kor2, eng2, math2, my_sum2, my_avg2],
]
"""
j = 1 # j : 순서
for i in score: # score 내 i(인덱스) 각 항목을 순회
print(j, "국어 : %3d, 영어 : %3d, 수학 : %3d, 총점 : %3d, 평균 : %2f" % (i[0],i[1],i[2],i[3],i[4]))
# 튜플의 i요소에 접근하여 값을 참조
# i번째 튜플 항목의 0번째 인덱스, 1번째 인덱스..
# % : 변수를 문자열 안에 삽입
j += 1 # %3d : 자리수 3자리
# %2f : 소수점 둘째 자리
print("총 %d 명 처리하였습니다." % (j-1))

지금 상태로도 동작되지만, 아래와 같이 3개의 과목을 나누라고 직접 숫자를 지정해놨다.
my_sum = kor + eng + math
my_avg = my_sum / 3.0
만약 입력받은 갯수만큼 나누기를 해 평균을 구하고 싶으면 리스트를 하나 더 추가해 수정 가능하다.
subjects = [kor,eng,math] # 과목 점수를 리스트에 먼저 저장
my_sum = sum(subjects) # 합계를 리스트와 sum을 통해 합계 계산
my_avg = my_sum / len(subjects) # 합계를 len(길이)를 통해 나눔