코딩하는 해달이

[Python] numpy를 이용해서 전화번호부 만들기 본문

개인 공부/Python

[Python] numpy를 이용해서 전화번호부 만들기

코딩하는 해달 2022. 10. 1. 19:08

Version & 참고 링크

더보기

Version

 -운영체제 : Window 11

 -PYTHON : python 3.10.6 64-bit

 -Visual Studio Code : Visual Studio Code 1.70.1(user setup)

오늘은 다른 과의 친구가 파이썬으로 전화번호부를 생성하는 프로그램을 짜는걸 도와달라고 해서 아는대로 짜 보았습니다.

 

전화번호부의 구성은 전화번호와 성이 한쌍을 이룹니다.

총 메뉴는 7개이고 각 메뉴의 기능은 아래와 같습니다.

1번 전화번호 랜덤으로 입력받은 숫자만큼 생성

2번 랜덤으로 생성한 전화번호를 csv파일에 저장

3번 전화번호가 들어있는 csv파일을 로드함 (출력 X)

4번 로드한 전화번호 출력

5번 전화번호와 성을 입력받아 csv에 추가

6번 전화번호 뒷자리 4자리를 입력받아 csv파일에서 같은 전화번호와 성 출력

7번 종료

 

이 기능들을 바탕으로 파이썬을 가지고 전화번호부를 만들어보았습니다.

from asyncio.windows_events import NULL
from logging import exception
from re import T
from xml.etree.ElementTree import tostring
import numpy as np
import csv

def print_menu():  # 메뉴 생성 함수
    print("="*20)
    print("1. Generate Number")
    print("2. Save Number")
    print("3. Load Number")
    print("4. Print Number")
    print("5. Add Number")
    print("6. Find Number")
    print("7. Exit")
    print("="*20)

def generate_number() : # 인원수를 입력 받아 랜덤 전화번호 생성 후 numpyList 변수에 대입
    global my_arr

    n = int(input("Number of people = "))

    fName_arr = [ "KIM", "LEE", "PARK", "JANG", "CHOI"]

    try : 
        for i in range(n) :
            number = '010-'
            fName = np.random.choice(fName_arr) # list 중 랜덤으로 하나 고르기
            for j in range(4) : 
                number += str(np.random.randint(10)) # (0 ~ 9 사이의 숫자 하나 생성)*4

            number += "-"
            
            for j in range(4) : 
                number += str(np.random.randint(10)) # (0 ~ 9 사이의 숫자 하나 생성)*4
        
            my_list = np.array([[number,fName.upper()]])
            my_arr = np.append(my_arr, my_list, axis=0)
        print("Generation completed...")
    except exception as e :
        print("Generation failed...")

def Save_number() : # numpyList 에 대입되어 있는 랜덤 전화번호를 csv파일에 저장 
    global my_arr
    try :
        np.savetxt('test.csv', my_arr, fmt = '%s', delimiter=',', header='Phone Book')
        print("Save completed...")
    except exception as e :
        print("Save failed...")

def Load_number() : # 저장한 csv파일에 있는 전화번호를 numpyList 변수로 Load
    try :
        my_arr = np.genfromtxt("test.csv", delimiter=',', skip_header = 1, dtype=np.string_)
        print("Load completed...")
    except exception as e :
        print("Load failed...")
    return my_arr

def Print_number(my_arr) : # numpyList 에 대입되어있는 전화번호 출력
    print(my_arr)

def Add_number() : # 전화번호와 성을 입력받아 csv파일에 추가 입력
    number = str(input("Phone Number XXX-XXXX-XXXX = ?"))
    name = str(input("Name = ?"))
    my_list = np.array([number,name.upper()])
    f = open('test.csv','a', newline='')
    wr = csv.writer(f)
    wr.writerow(my_list)

def Find_number() : # 전화번호 뒤 4자리를 입력받아 csv파일에서 같은 전화번호와 성 출력
    bnum = str(input("Last 4 number, XXXX = ?"))
    file = open("test.csv", 'r')
    rdr = csv.reader(file)

    next(rdr) # 첫 줄 건너뛰기

    for line in rdr :
        spnum = line[0].split('-')
        if spnum[2] == bnum :
            print(line)
            print("Find complited...")
            file.close()
            break
        else :
            continue

my_arr = np.empty((0,2), dtype=np.string_)

while True :
    print_menu()
    id_case = int(input("Choose Menu(1~7) = "))

    if( id_case == 1 ) :
        generate_number()
    elif( id_case == 2 ) :
        Save_number()
    elif( id_case == 3 ) :
        my_arr = Load_number()
    elif( id_case == 4 ) :
        Print_number(my_arr)
    elif( id_case == 5 ) :
        Add_number()
    elif( id_case == 6 ) :
        Find_number()
    else:
        print("Good Bye!") # 종료
        break
반응형
Comments