자료구조_Dic() 문제풀이

jaam._.mini·2023년 11월 19일
0

📒Python 기초 수학

목록 보기
40/46
post-thumbnail

그동안 열심히 학습한 Dictionary() 예제를 풀어보자!




(1) Dic() 저장


Q >
사용자가 입력하면 딕셔너리에 저장하고 출력하는 프로그램을 만들어보자

subject = ['국어', '영어', '수학',  '과학', '국사']
scores = {}

# for()을 이용해 과목의 성적을 받음
# s(과목명) : key값
for s in subject:

    #사용자에게 점수 입력 받기
    score = int(input(s + '점수입력: '))

    #scores라는 Dic()에 저장하는 단계
    #Dic문장[key] = value
    scores[s] = score

print(f'과목별 점수: {scores}')

국어점수입력: 81
영어점수입력: 88
수학점수입력: 70
과학점수입력: 90
국사점수입력: 55
과목별 점수: {'국어': '81', '영어': '88', '수학': '70', '과학': '90', '국사': '55'}




(2) id(key), pw(value) 조회


Q >
사용자의 아이디, 비밀번호를 이용해 로그인 프로그램 제작

members = {'urkpo':'0928^7$',
           'xxayv':'%2*9$91',
           'lsqvx':'!0%)&&4',
           'heums':'%@3^0%3',
           'uwcmc':'85236(&',
           'iemwv':')8!36^&',
           'sqblx':')^2)9!(',
           'jbbpy':'67269*3',
           'hjkwu':'$&@@#64',
           'fvwwy':'82$%)31'}

#사용자에게 입력 받음
memID = input('ID 입력: ')
memPW = input('PW 입력: ')

#id(key)가 members에 있다면
if memID in members:
    #비밀번호는 key값인 [memID]이 있는 members와 비교헸을 때 동일하다
    if members[memID] == memPW:
        print('로그인 성공!!') # 성공
    else:
        print('비밀번호 확인!!') # 비밀번호가 틀림
else:
    print('아이디 확인!!') # 딕셔너리(members)에 아이디가 없음




(3) dic = {}


Q >
삼각형 ~ 심각형까지 내각의 합과 내각을 딕셔너리에 저장하는 프로그램을 만들어보자

  • n각형 내각의 합 : 180 x (n-2)
dic = {}

for n in range(3,11):
    hap = 180 * (n - 2)
    ang = int(hap / n) # 내각 구하기.
    dic[n] = [hap, ang] # 저장방법 : dic[key] = [합, 내각]

print(dic)

{3: [180, 60], 4: [360, 90], 5: [540, 108], 6: [720, 120], 7: [900, 128], 8: [1080, 135], 9: [1260, 140], 10: [1440, 144]}




(4) 약수_if n1 % n2 == 0:


Q >
1~10 까지 각각의 정수에 대한 약수를 저장하는 딕셔너리를 만들고 출력하는 프로그램 제작

dic = {}

for n1 in range(2,11):
    tempList = []
    for n2 in range(1, n1+1): # 1~n1 까지 반복을 다시 돌린다
        if n1 % n2 == 0: # = 나머지가 0이면, n2는 n1의약수다
            tempList.append(n2)
    dic[n1] = tempList # n1이라는 키워드로 tempList에 저장

print(dic)

{2: [1, 2], 3: [1, 3], 4: [1, 2, 4], 5: [1, 5], 6: [1, 2, 3, 6], 7: [1, 7], 8: [1, 2, 4, 8], 9: [1, 3, 9], 10: [1, 2, 5, 10]}




(5) replace()함수


Q >
비속어를 찾고 표준어로 변경하는 프로그램을 만들자.

words = {'꺼지다':'가다',
         '쩔다':'엄청나다',
         '짭새':'경찰관',
         '꼽사리':'중간에 낀 사람',
         '먹튀':'먹고 도망',
         '지린다':'겁을 먹다',
         '쪼개다':'웃다',
         '뒷담 까다':'험담하다'}

# txt : 문장
txt = '강도는 서로 쪼개다, 짭새를 보고 빠르게 따돌리며 먹튀했다.'

# key값 꺼내는 방법 : words.keys()
# list와 비슷한 구조니까, list로 타입 변경
# => words의 key값만 뽑은 상태
keys = list(words.keys())

txtMod = ''
for key in keys: # keys(비속어들)에서 key(비속어)를 한개씩 뽑아오기
    if key in txt: # 만약에 문장(txt)에 key값(비속어)가 있다면
        print('key: {}'.format(key)) #일단 key를 출력하고
        print('words[{}]: {}'.format(key, words[key])) # 비속어와 표준어 출력

        # replace() 함수 활용
        # 변수.replace(바뀔것, 바뀐것)
        # 문장.replace(비속어, 표준어)
        txt = txt.replace(key, words[key])

print(txt)

key: 짭새
words[짭새]: 경찰관
key: 먹튀
words[먹튀]: 먹고 도망
key: 쪼개다
words[쪼개다]: 웃다
강도는 서로 웃다, 경찰관를 보고 빠르게 따돌리며 먹고 도망했다.




(6) while() if()


Q >
딕셔너리를 이용해서 5명의 회원을 가입받고 전체 회원 정보를 출력 + 삭제

members = {}

n = 1
while n < 3:
    mail = input('메일 입력: ')
    pw = input('비번 입력: ')

    if mail in members:
        print('이미 사용 중인 메일 계정입니다.')
        continue
    else:
        members[mail] = pw # mail을 키로, pw를 밸류로
        n+= 1

for key in members.keys():
    print(f'{key} : {members[key]}')


#회원 삭제
while True:
    delMail = input('삭제할 계정 입력: ')

    if delMail in members:
        delPw = input('비번 입력: ')
        if members[delMail] == delPw:
            del members[delMail]
            print(f'{delMail}님 삭제 완료!')
            break # 삭제 되면 빠져나옴
        else:
            print('비번 확인 요망!') # pw가 동일하지 않은 경우
    else:
        print('계정 확인 요망!') # 저장되어 있는 메일 계정 자체가 없는 경우


for key in members.keys():
    print(f'{key} : {members[key]}')

메일 입력: jmoh@nana.com
비번 입력: 123456
메일 입력: ojm@nono.com
비번 입력: 23456
jmoh@nana.com : 123456
ojm@nono.com : 23456
삭제할 계정 입력: ojm@nono.com
비번 입력: 23456
ojm@nono.com님 삭제 완료!
jmoh@nana.com : 123456




(7) 정보 입력, 조회


Q >
가장 효율적으로 학생 정보를 저장하고 관리할 수 있는 자료구조를 선택, 컨테이너 자료형으로 만들기

students = {'S21-0001':{'이름':'최성훈',
                        '성구분':'M',
                        '전공':'디자인',
                        '연락처':'010-1234-5678',
                        '메일':'hun@gmail.com',
                        '취미':['농구', '음악']},
            'S21-0002': {'이름': '탁영우',
                         '성구분': 'M',
                         '전공': '바리스타',
                         '연락처': '010-5678-9012',
                         '메일': 'yeong@gmail.com',
                         '취미': ['축구']},
            'S21-0003': {'이름': '황진영',
                         '성구분': 'W',
                         '전공': '음악',
                         '연락처': '010-9012-3456',
                         '메일': 'jin@gmail.com',
                         '취미': ['수영', '코딩']}
            }

#딕셔너리 정보 조회
for k1 in students.keys():
    print('-' * 40)
    print('회원번호 : {}'.format(k1))

    # 학생 1명 = student
    student = students[k1]
    for k2 in student.keys():
        print('{} : {}'.format(k2, student[k2]))

memNo = input('조회할 회원번호를 입력하세요.: ')
print('{} : {}'.format(memNo, students[memNo]))

출처/참고 : 제로베이스 데이터 스쿨
profile
비전공자의 데이터 공부법

0개의 댓글