Python 기초06

Doya·2025년 2월 10일

ESTSOFT_AI개발7기

목록 보기
7/43

개요

  • 딕셔너리, 튜플, 집합에 대한 실습 내용 정리

간단한 AI예제로 보는 딕셔너리

import ollama
def ask_question(question):
    response = ollama.chat(
        model="llava:7b",
        # 리스트 안에 dic을 사용 
        messages=[
            {
                'role': 'user',
                'content': question
            }
        ]
    )
    return response['message']['content']
data = input("커피종류 알려줘")
result = ask_question("커피종류 알려줘")
result = ask_question("대한민국 서울의 한강 정보를 알려줘")
result = ask_question("AI시대 챗GPT 장점과 단점을 알려줘")
print(result)
  • 코드 개요
    Ollma의 llava:7b 모델을 사용해서 사용자 입력한 질문에 대한 AI응답을 반환하는 코드
  • 딕셔너리, 리스트 혼용 사용
  • 딕셔너리와 리스트를 통해 구조적인 데이터 관리 가능
  • 코드를 간결하게 작성 가능

dictionary 실습

  • 딕셔너리 생성, 추가(갱신), 출력, 삭제
  • 딕셔너리에 이미 있는 키에 새로운 값을 넣으면 원래 있던 값에서 새로 넣은 값으로 바뀜
mysite = dict() # 좀더 직관적
mysite['naver'] = 'www.naver.org'
mysite['kakao'] = 'www.kakao.org'
mysite['python'] = 'www.python.org'

# 새로운 항목 추가하기  add, insert, append 지원안됨
mysite['Google'] = 'www.google.com'

# 기존 키값을 사용하면 어떻게 되는지 
mysite['naver'] = 'www.naver.com'

# 키값을 이용하여 출력
print(mysite['kakao']) # 딕트는 키값을 쓸때 리스트처럼 씀 

# get함수 사용하기 
print(mysite.get('kakao'))
print(mysite.get('kakeo')) # None이 출력됨 

# in함수로 키값 확인하기 
print('naver' in mysite) #True, False

# 삭제하기 
del mysite['kakao']

mysite.pop('python')

# 전체 삭제 
mysite.clear()

딕셔너리의 다양한 출력법

  • key값과 value값 따로 출력 가능
mysite = {
    'naver' : 'www.naver.org',
    'kakao' : 'www.kakao.org',
    'python' : 'www.python.org'
} 
# 반복문을 이용해서 출력하기 
# 1번째 방법
for k in mysite:
  print(k, '|', mysite[k])

# 2번째 방법
print('for (i,e) in enumerate(mysite)')
for (i,e) in enumerate(mysite): # i제거시 에러 발생 
  print(i, e, '|', mysite[e]) # i가 순서의 역할을 함 

# 3번째 방법
print('for k,v in mysite.items()')
for k,v in mysite.items():
  print(k , '|', v)

enumerate()

  • Python의 내장 함수
  • 리스트, 튜플 등 반복 가능한 객체를 순회 할 때, 요소의 인덱스와 값을 동시에 가져올 수 있음
  • 코드를 간결하게 작성 가능함
  • 기본 문법
# iterable: 리스트, 튜플 등 반복 가능한 객체 
# start: 인덱스 시작 번호 
enumerate(iterable, start=0)

딕셔너리를 이용한 예제

  • 메뉴 및 가격에 대한 CRUD 구현하기
import sys
menu = dict()
flag = True
num = 0

while flag:
  print('1.메뉴추가  2.전체메뉴  3.메뉴수정 4.메뉴삭제  5.메뉴검색   9.시스템종료')
  try:
    num=int(input('원하시는 작업 번호를 입력해주세요: '))
  except ValueError:  # 숫자가 아닌 값 입력 시 예외 처리
        print('올바른 숫자를 입력하세요.')
  print("=" *35)
  print()      
  # 신규 등록
  if(num == 1):
    name=input('메뉴입력: ')
    if(name in menu.keys()):
      print(f'{name}은 이미 있습니다')
      print("=" *35) 
      continue
    while True:
      try:
        price=int(input('가격입력?:'))
        if(price <= 0):
          print('가격이 음수로 입력되었습니다. 다시입력해 주세요.')
          print("=" *35) 
          continue
        break
      except ValueError:  # 숫자가 아닌 값 입력 시 예외 처리
        print('올바른 숫자를 입력하세요.')
        print("=" *35) 
    menu[name]=price
    print('등록성공했습니다')
    print("=" *35) 
  #전체 메뉴 
  elif(num ==2):
    for (i, key) in enumerate(menu):
      print(f'{key}의 가격은 {menu[key]}원 입니다')
      print("=" *35) 
  # 메뉴 수정 
  elif(num == 3):
    key_menu = input('수정 메뉴: ')
    if(key_menu not in menu.keys()):
      print(f'{key_menu}를 찾을 수 없습니다')
      print("=" *35) 
      continue
    while True:  # 가격이 올바르게 입력될 때까지 반복
        try:
            val_price = int(input('수정 가격: '))
            if val_price < 0:
                print('가격이 음수로 입력되었습니다. 다시 입력해 주세요')
                print("=" *35) 
                continue
            break  # 올바른 입력이면 반복문 종료
        except ValueError:  # 숫자가 아닌 값 입력 시 예외 처리
            print('올바른 숫자를 입력하세요.')
            print("=" *35) 
    menu[key_menu] = val_price
    print(f'{key_menu}의 가격이 {val_price}원으로 수정되었습니다')
    print("=" *35) 
  #메뉴 삭제 
  elif(num == 4):
    key_menu = input('삭제할 메뉴: ')
    if(key_menu not in menu.keys()):
      print(f'{key_menu}를 찾을 수 없습니다')
      print("=" *35) 
      continue
    menu.pop(key_menu)
    print(f'{key_menu}가 삭제되었습니다')
    print("=" *35)   
  #메뉴 검색
  elif(num == 5):
    key_menu = input('메뉴 검색: ')
    if(key_menu not in menu.keys()):
      print(f'{key_menu}를 찾을 수 없습니다')
      print("=" *35) 
      continue
    print(f'{key_menu}의 가격은 {menu[key_menu]}원 입니다')
    print("=" *35) 
  #프로그램 종료 
  elif num == 9:
    print('프로그램을 종료합니다')
    print("=" *35) 
    sys.exit()
  else :
    print('번호를 잘못 입력 했습니다\n')
    print("=" *35) 

tuple 실습

  • 튜플의 생성, 출력
mytuple = ('제주', 37.75148, 126.34136, '시청', 36.73982, 127.92851)
# 1번 방법
for i in mytuple:
  print(i , end = ' ')
print()
# 2번 방법 
for (i,v) in enumerate(mytuple):
  print(v)
# 3번 방법 
for i in range(len(mytuple)):
  print(mytuple[i], end = ' ')

tuple 내부의 값 갱신, 삭제 하는법

  • 튜플은 내부의 객체를 변경, 삭제가 불가능함
  • 튜플을 리스트로 변환하면 값을 갱신하거나 삭제가 가능함
mytuple = ('제주', 37.75148, 126.34136, '시청', 36.73982, 127.92851)
mylist = list(mytuple)
# append 이외 list 메소드 사용 가능 
mylist.append('수원')
mytuple = tuple(mylist)
for i in mytuple:
  print(i , end = ' ')
print()

set 실습

  • set()은 순서가 없음
  • 중복이 허용 되지 않음
  • 예제 코드
# 로또 번호 뽑기 
import random

print('lotto난수 복합set')
set_lotto = set()
list_lotto = list()
num = 0
while len(set_lotto) < 6:
  num = random.randrange(1, 45)
  set_lotto.add(num)

# 집합은 순서가 없기 때문에 정렬하기 위해서는 list로 변환
list_lotto = list(set_lotto)
list_lotto.sort()
print(list_lotto)

Work

  • dictionary + list 사용해 보기
  • 문제

    score_dict = { 'kim':[100,60], 'lee':[90,77], 'goo':[82,34] }
    위의 값을 이용해서 전체 국어점수, 영어점수의 총점과 평균 구하기
    (# 리스트에서 [국어점서 : 영어점수]라 가정 )

score_dict = { 'kim':[100,60], 'lee':[90,77], 'goo':[82,34] } 

kor_tot, eng_tot  = 0 , 0
kor_avg , eng_avg = 0 , 0

#전체 총점
for(i,y) in score_dict.items():
  kor_tot += y[0]
  eng_tot += y[1]

#전체 평균
kor_avg = kor_tot // len(score_dict)
eng_avg = eng_tot // len(score_dict)

# 출력
print(f'시험본 인원: {len(score_dict)}명')
print(f'전체 국어점수 = {kor_tot}, 전체 국어평균 = {kor_avg}')
print(f'전체 영어점수 = {eng_tot}, 전체 영어평균 = {eng_avg}')
print('='*35)

# 개인 총점 및 평균 
for(name,value) in score_dict.items():
  print(f'{name}님 총점{sum(value)}, 평균: {sum(value)//len(value)}')
profile
안녕하세요. 도야입니다

0개의 댓글