파이썬 유치원 (영아반)

10.178.0.28 (토론)님의 2020년 5월 30일 (토) 13:44 판 (→‎댓글)

1 파이썬 유치원

파이썬 유치원은 유튜브 채널 김왼손의 왼손코딩에서 구독자와 함께 진행하는 프로젝트입니다. 프로젝트 기간 동안 스스로 학습하면서 나만의 프로그램을 만들어 봅니다. 파이썬 유치원 1기는 2020년 5월 1일부터 31일까지 한달 동안 진행합니다.

파이썬 유치원에는 강의가 없습니다. 사실 강의만 들어서는 머리에 남는 게 없습니다. 직접 만들어 봐야 합니다. 모든 분야가 그렇겠지만 코딩은 더욱 그렇습니다. 이제 강의는 그만 듣고 직접 만들어 봅시다. 모든 정보는 유튜브와 구글에 있으니까요. 파이썬 유치원에서는 방향과 방법을 함께 고민합니다. 유치원 선생님은 아이가 하고 싶은 대로 자유롭게 두면서 아이가 흥미를 잃지 않게, 다치지 않게 옆에서 도와줍니다. 파이썬 유치원에서의 김왼손은 그런 역할입니다.

파이썬 유치원의 모든 진행 상황은 유튜브 채널 김왼손의 왼손코딩에서 공유합니다. 매주 토요일 저녁 유튜브 라이브에서 어떻게 하고 있는지 함께 살펴보고 어려움이 있다면 함께 고민합니다. 각자의 진행 내용은 제타위키의 파이썬 유치원 문서에서 공유합니다. 진행 내용을 공유하고 서로 의견을 나눌 수 있습니다.

파이썬 유치원 영아반은 파이썬은 물론 코딩을 한번도 해보지 못한 분들을 대상으로 합니다.

2 제타위키 사용법

3 영아반 친구들

3.1 고양이

3.1.1 제목

함께 쓰고 만드는 한글 입력기

3.1.2 설명

저는 간단한 여러 기능들을 수행할 수 있는 프로그램을 만들고 싶어요.

3.1.3 실행화면

실행화면을 넣어주세요.

3.1.4 log

+5/9, 약 9:45 나눗셈 기능 추가 +5/23, 약 9:5 김왼손님 정보 출력장치 추가 & 지신의 이름 출력 기능 추가

3.1.5 코드

orders = ['출력', '덧셈', '뺄셈', '곱셈', '나눗셈, '이름', '김왼손']
print('안녕하세요? 한글 코드 입력기에 오신 것을 환영합니다.')
print('-----------------------------------------------')
user = input('사용자 이름을 입력해 주세요.')
print('-------------------main------------------------')
while True:
    order: str = input('원하시는 명령어를 입력해 주세요.')
    print('-----------------------------------------------')
    if order in orders:
        if order == '출력':
            printy = input('출력하실 것을 적어주세요.')
            print('-----------------------------------------------')
            print(printy)
            print('-----------------------------------------------')

        elif order == '덧셈':
            x = int(input('첫 번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            y = int(input('두번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            print(x + y)

        elif order == '뺄셈':
            x = int(input('첫 번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            y = int(input('두번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')

            if x >= y:
                print(x - y)
                print('-----------------------------------------------')

            else:
                print(y - x)
                print('-----------------------------------------------')

        elif order == '곱셈':
            x = int(input('첫 번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            y = int(input('두 번째 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            print(x * y)
            print('-----------------------------------------------')

        elif order == '나눗셈':
            x = int(input('나누어지는 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            y = int(input('나누는 수를 입력해 주세요.'))
            print('-----------------------------------------------')
            if x % y > 0:
             print('몫은', x // y, ',나머지는', x % y, '입니다.')
            else:
                print('몫은', x // y, '입니다')
        elif order =='이름':
            print(user)
            print('-----------------------------------------------')
        elif order =='김왼손':
            print('1 김왼손/n
                    자동차에 세상을 보여주는 연구원. 좋아하는 일만 하며 재미있게 살고 싶은 요즘 젊은이./n
                    가르치는  좋아 공부하는 선생이자, 배우는  좋아 가르치는 학생. 프로그래밍이라면 치를 떨던 프포자./n
                    였지만 지금은 김왼손의 왼손코딩을 운영하는 인기 유튜버./n

                     저서: Hello Coding 한입에  파이썬 (한빛미디어)/n
                     유튜브 채널: 김왼손의 왼손 코딩/n
                     인스타그램: 김왼손 (@lefty_khim)/n
                     Lefty Khim/n
                     인기 유튜버/n
                     -강의 실력 만점
                     -목소리 좋음/n
                     -기타 연주 좋음/n
                    
                    2 왼손코딩/n
                    유튜브 코딩 교육 채널 김왼손의 왼손코딩을 운영한다./n
                    Python을 주로 강의하고 Vim, 통기타, 프레지 같은 것들도 강의한다./n
                    
                    3 같이 보기/n
                    미운코딩새끼/n
                    유기농냠냠파이썬/n
                    Hello Coding 한입에  파이썬')    
    else:
        print('제대로된 명령어를 입력해 주세요.')
        print('-----------------------------------------------')

김왼손의 왼손코딩

3.1.6 댓글

  • 큐벨리아: 안녕하세요 ^^
  • 김왼손: 나중에는 GUI도 적용해 보면 좋을것 같네요. :)


3.2 Projects.Kinder

3.2.1 제목

코린이 달력

3.2.2 설명

파이썬유치원을 졸업하고, 파이썬 초/중/고/대 까지 졸업하고 싶어요!!

  • 1) 구구단 : 숫자 입력시 1~9까지 구구단 계산하여 프린트 / 문자 입력시 숫자 입력 안내 문구 프린트
  • 2) 달력
    • 1차(2020.05.00) : 단순 프린트
    • 2차(2020.05.00) : 원하는 년도,월 입력시 출력
    • 3차(2020.05.18) : 년도 전체 달력 또는 원하는 년도, 월 출력 선택
    • 4차(2020.05.19) : 메뉴 생성, 종료 기능 추가, 문자 입력시 안내 추가
    • 5차(2020.05.20) : 메뉴 화면 GUI 로 생성, 버튼을 통해 실행, 일정입력/일정조회(부분, 전체) 추가
    • 6차(2020.05.21) : 메뉴에 입력창 생성, 입력 값을 활용하여 실행
    • 7차(2020.05.22) : 연도/월 입력 창을 콤보 박스로 변경(for 입력오류 제한), 달력/일정 출력창 생성, 입력창(일/시간/일정) 추가, 메시지 박스를 통해 실행 내용 안내 추가 ** 동일한 일자(key)에 여러 값(value)을 추가할 수 있도록 수정 필요 → 시간을 입력해서 해결
    • 8차(2020.05.25) : 일정삭제 기능 추가, 일정조회(전체) 실행시 정렬 후에 출력 & textbox 에 출력 & + 새로운 창에 출력
    • 9차(2020.05.28) : SQlite DB 적용 완료(*프로그램이 종료 후 재실행되어도 기존 데이터가 지속적으로 관리될 필요성을 느끼게됨)
    • 10차(예정) : **일정조회(부분) else 구문 오류 해결 필요 **일정조회(전체) 실행시 줄바꿈하여 출력 필요 & date 정렬 후에 출력 필요(DB 화 하면서 기존 기능 삭제됨)

3.2.3 실행화면

실행화면을 넣어주세요.

3.2.4 코드

# 1) 구구단
while True: #무한반복
    num = input('please input a number for multiplication : ')
    if num.isdigit() == True: #isdigt() 사용하여 숫자 확인 <-> isalpha()
        for y in range(1, 10): #range() 사용하여, y 에 1-9 까지 입력
            print(num, 'X', y, '=', int(num) * y)
    else:
        print('Only input a number!')
# 2) 달력
import calendar
import tkinter as tk
import operator
from tkinter import*
from tkinter import ttk
from tkinter import scrolledtext
from tkinter import messagebox
import sqlite3

# Function 정의 

def create_table():
    
    conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
    cursor = conn.cursor()

    cursor.execute("create table events( date char(20), event char(20))")

    cursor.close()
    conn.close()

def mm(): #'월' 버튼
    yyyy = eval(combx_1.get())
    mm = int(combx_2.get())

    month = calendar.month(yyyy, mm, w = 2, l = 2) #월 출력

    txt.delete(0.0, END)
    txt.insert(INSERT, month)

def yyyy(): #'년' 버튼
    yyyy = eval(combx_1.get())

    year = calendar.calendar(yyyy, w = 1, l = 1) #년도 출력

    txt.delete(0.0, END)
    txt.insert(INSERT, year)

def create_1(): #'일정입력' 버튼 = YYYY/MM/DD/HH
    if bool(combx_1.get()) and bool(combx_2.get()) and bool(combx_3.get()) and bool(combx_4.get())== True:

        conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
        cursor = conn.cursor()

        date = combx_1.get() + '/' + combx_2.get() + '/' + combx_3.get() + '/' + combx_4.get()
        event = entry_1.get()
     
        cursor.execute("insert into events(date, event) values(?, ?)", (date, event))

        conn.commit()

        cursor.execute("SELECT * FROM events")

        rows = cursor.fetchall()


        print(" 날짜            일정               ")
        print("===================================")
        for row in rows:
            print(" {0}  {1} ".format(row[0], row[1]))

        cursor.close()
        conn.close()

        messagebox.showinfo(date, date + " 의 일정이 입력/수정 되었습니다.")


    else:
        messagebox.showinfo("Alert", "미입력 칸이 있습니다. 모두 입력해주세요.")


def update_1(): #'일정수정' 버튼 = YYYY/MM/DD/HH
    if bool(combx_1.get()) and bool(combx_2.get()) and bool(combx_3.get()) and bool(combx_4.get())== True:

        conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
        cursor = conn.cursor()

        date = combx_1.get() + '/' + combx_2.get() + '/' + combx_3.get() + '/' + combx_4.get()
        event = entry_1.get()

        sql = 'update events set event = ? where date = ?'
        cursor.execute(sql,(event, date))

        conn.commit()

        cursor.execute("SELECT * FROM events")

        rows = cursor.fetchall()


        print(" 날짜            일정               ")
        print("===================================")
        for row in rows:
            print(" {0}  {1} ".format(row[0], row[1]))

        cursor.close()
        conn.close()

        messagebox.showinfo(date, date + " 의 일정이 입력/수정 되었습니다.")

    else:
        messagebox.showinfo("Alert", "미입력 칸이 있습니다. 모두 입력해주세요.")
        

def delete_1(): #'일정삭제' 버튼
    date = combx_1.get() + '/' + combx_2.get() + '/' + combx_3.get() + '/' + combx_4.get()
    conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
    cursor = conn.cursor()

    del_sql = 'delete from events where date = ?'
    cursor.execute(del_sql,(date,))

    conn.commit()
    conn.close()
    messagebox.showinfo(date, date + " 의 일정이 삭제 되었습니다.")


def find_1(): #'일정조회(부분)' 버튼
    conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
    cursor = conn.cursor()

    date_1 = combx_1.get() + '/' + combx_2.get() + '/' + combx_3.get() + '/' + combx_4.get()

    if bool(cursor.execute('select * from events WHERE date = "{}"'.format(date_1))) == True:
        for row in cursor.execute('select * from events WHERE date = "{}"'.format(date_1)):
            print(row)
            txt_1.delete(0.0, END)
            txt_1.insert(INSERT, row)
 
    else:
        txt_1.delete(0.0, END)
        txt_1.insert(INSERT, '일정이 없습니다.')
        messagebox.showinfo(date_1, date_1 + "일정이 없습니다.")
    
    conn.close()


def find_2(): #'일정조회(전체)' 버튼
    conn = sqlite3.connect('C:\\Users\\XXXX\\Documents\\DB\\testdb.db')
    cursor = conn.cursor()

    cursor.execute("SELECT * FROM events")

    rows = cursor.fetchall()

    print(" 날짜            일정               ")
    print("===================================")
    for row in rows:
        print(" {0}  {1} ".format(row[0], row[1]))

    txt_1.delete(0.0, END)
    txt_1.insert(INSERT, rows)

    cursor.close()
    conn.close()



#화면 프레임 구

window = Tk()
window.title('Projects.Kinder')
window.geometry("680x850")
window.resizable(1, 1)


label = Label(window, text = '달력 프로그램', width=80, height=50, fg='blue', relief="solid", bitmap="info", compound="top").grid(row = 0, columnspan = 5)

#년도/월 입력 

label_1 = Label(window, text = '연도 입력(yyyy)', width = 12)
label_1.grid(row=1, column=0)


combx_1 = ttk.Combobox(window, textvariable = str, values = (2019, 2020, 2021), width = 12)
combx_1.grid(row=1, column=1)


label_2 = Label(window, text = '월 입력(mm)', width = 12)
label_2.grid(row=2, column=0)

combx_2 = ttk.Combobox(window, textvariable = str, values = (1,2,3,4,5,6,7,8,9,10,11,12), width = 12)
combx_2.grid(row=2, column=1)


label_3 = Label(window, text = '일 입력(dd)', width = 12)
label_3.grid(row=3, column=0)

combx_3 = ttk.Combobox(window, textvariable = str, values = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31), width = 12)
combx_3.grid(row=3, column=1)


label_4 = Label(window, text = '시간 입력(24h)', width = 12)
label_4.grid(row=4, column=0)

combx_4 = ttk.Combobox(window, textvariable = str, values = ('AM 00','AM 1','AM 2','AM 3','AM 4','AM 5','AM 6','AM 7','AM 8','AM 9','AM 10','AM 11','PM 12','PM 1','PM 2','PM 3','PM 4','PM 5','PM 6','PM 7','PM 8','PM 9','PM 10','PM 11'), width = 12)
combx_4.grid(row=4, column=1)


label_5 = Label(window, text = '일정내용', width = 12)
label_5.grid(row=5, column=0)

entry_1 = Entry(window, width = 15)
entry_1.grid(row=5, column=1)


#버튼정렬

b1 = Button(window, text = '월 출력', width=12, command = mm)
b1.grid(row=6, column=0)

b2 = Button(window, text = '년 출력', width=12, command = yyyy)
b2.grid(row=6, column=1)

b3 = Button(window, text = '일정입력', width=12, command = create_1)
b3.grid(row=7, column=0)

b4 = Button(window, text = '일정수정', width=12, command = update_1)
b4.grid(row=8, column=0)

b5 = Button(window, text = '일정삭제', width=12, command = delete_1)
b5.grid(row=8, column=1)

b6 = Button(window, text = '일정조회(부분)', width=12, command = find_1)
b6.grid(row=9, column=0)

b7 = Button(window, text = '일정조회(전체)', width=12, command = find_2)
b7.grid(row=9, column=1)



# 달력 표시 디스플레이

txt = scrolledtext.ScrolledText(window, width = 80, height = 35)
txt.place(x = 10, y = 270)

txt_1 = scrolledtext.ScrolledText(window, width = 55, height = 12)
txt_1.place(x = 210, y = 54)

window.mainloop()

3.2.5 댓글

  • 큐벨리아 : 참고하기에는 너무 허접한 코드입니다 ㅠㅠ
  • 김왼손: 프로그램을 두개나 만들다니.. 훌륭합니다. :)
  • 김민재: 참고하면서 많은 도움 되었습니다!!! 감사합니다!!!

3.3 큐벨리아

3.3.1 제목

딕셔너리에 리스트을 넣을수있다는것을 만들고 알아버린 비밀번호 관리 프로그램

3.3.2 설명

비밀번호 관리 프로그램

  • 현재 기능 :
    • 등록, 조회, 수정, 삭제, 종료
  • 추가 기능 :
    • 수정(예정 -> 완료), 삭제(예정 -> 완료), 등록한 회사명, 비밀번호를 메모장으로 저장 및 불러오기(예정 -> 개선필요 -> 완료)
    • GUI 제작, 예외 처리
  • 개선 사항 :
    • 입력 기능을 함수로 만들어, 추가로 입력할것인지, 입력 기능을 종료할것인지 묻는 선택문 기능 추가(예정 -> 완료)
  • 작성 기록
    • 2020-04-30 기능설명
    • 2020-05-10 기본적인 기능 구현, 개선사항 수정완료
    • 2020-05-11 수정, 삭제 기능 추가
    • 2020-05-12 메뉴에서 문자를 입력하였을경우 출력 추가
    • 2020-05-19 파일에서 딕셔너리로 저장, 딕셔너리에서 파일로 저장 추가(개선필요)
    • 2020-05-20 파일에서 딕셔너리로 저장, 딕셔너리에서 파일로 저장 추가(완료)

3.3.3 실행화면

실행화면을 넣어주세요.

3.3.4 코드

file = open('TEST.txt',mode = 'a', encoding = 'UTF-8')

Dict = {}
Temp = {}

#파일에서 가져와 딕셔너리로 저장(Temp로 저장하고 개행문자를 제거후 Dic에 저장)
def FileToDictSave() :
   
   file = open('TEST.txt',mode = 'r+', encoding = 'UTF-8')
   
   for i in file :
        Temp[i] = file.readline()
    
   for i, j in Temp.items() :
        a = i.rstrip('\n')
        b = j.rstrip('\n')
        Dict[a] = b

#딕셔너리에서 파일로 저장
def DictToFileSave() :

    file = open('TEST.txt',mode = 'w+', encoding = 'UTF-8')

    file.truncate() #메모장 내용 삭제

    for i, j in Dict.items() :
        file.write(i)
        file.write('\n')
        file.write(j)
        file.write('\n')

# 입력
def Create() :

    print('')  
    print('')
    Company = input('            회사 : ') 
    print('')
    
    if Company in Dict.keys() :
        print('            중복되는 내용이있습니다.')
        return

    PW = input('            비밀번호 : ')
 
    Dict[Company] = PW

    return

# 조회
def Join() :

    print('') 
    print('')
    Company = input('            회사 : ')
    print('')

    if Company in Dict : 
        print('            비밀번호 : ', Dict[Company])
    else :
        print('            자료가 존재하지않습니다.')

# 수정
def Updata() :

    print('') 
    print('')
    Company = input('            회사 : ')
    print('')
    PW = input('            비밀번호 : ')
    print('')
    
    if(Dict[Company] == PW) :
        del Dict[Company]
        print('            새로운 비밀번호를 입력하세요.')
        print('')
        PW = input('            ')
        Dict[Company] = PW
    else : 
        print('            비밀번호가 틀렸습니다.')
        print('')
        print('            * 다시 하시겠습니까? = 1 돌아가시겠습니까? = 2')
        print('')
        if(input('            ') == '1') :
           Updata()
        else :
           return

# 삭제
def Delete() :

    print('') 
    print('')
    Company = input('            회사 : ')
    print('')
    PW = input('            비밀번호 : ')
    print('')
    if(Dict[Company] == PW) :
        del Dict[Company]
        print('            삭제되었습니다.')
    else :
        print('            비밀번호가 틀렸습니다.')
        print('')
        
while(1) :

    #초기화
    FileToDictSave()

    # 메뉴
    print('')
    print('            ***************')
    print('            *    메 뉴    *')
    print('            ***************')
    print('')
    print('            ***************')
    print('            *             *')
    print('            *   1. 입력   *')
    print('            *             *')
    print('            *   2. 조회   *')
    print('            *             *')
    print('            *   3. 수정   *')
    print('            *             *')
    print('            *   4. 삭제   *')
    print('            *             *')
    print('            *   5. 종료   *')
    print('            *             *')
    print('            ***************')
    print('')

    print('            * Select = ', end =' ')
    Select = input()

    # 1. 입력
    if Select == '1' :
        Create()
    
    # 2. 조회
    if Select == '2' :
        Join()

    # 3. 수정
    if Select == '3' :
        Updata()

    # 4. 수정
    if Select == '4' :
        Delete()

    # 4. 종료
    if Select == '5' : 
        print('')
        print('            프로그램을 종료합니다.')
        print('')
        break
    
     # 문자입력시 안내사항
    if (Select.isdigit() == False) or int(Select) > int(5) :
        print('')
        print('            잘못입력하셨습니다.')

    DictToFileSave()

3.3.5 참고자료

3.3.6 지식인

#질문
#작성자 : 큐벨리아
#메모장에 있는 내용을 키, 값을 가져와 개행문자 제거후 dic에 저장하고 싶은데 아래로 실행해보니 값만 개행문자 지워지네요 혹시 키도 지울수있는 방법아시는분 계신가요???

file = open('password.txt', 'r', encoding='utf-8')
dic = {}

for i in file :
   PW = file.readline().strip('\n')
   dic[i] = PW

print(dic)

#답변
#작성자 : 큐벨리아
#파일에서 가져와 딕셔너리로 저장(Temp로 저장하고 개행문자를 제거후 Dic에 저장)

def FileToDictSave() :
   
   file = open('TEST.txt',mode = 'r+', encoding = 'UTF-8')
   
   for i in file :
        Temp[i] = file.readline()
    
   for i, j in Temp.items() :
        a = i.rstrip('\n')
        b = j.rstrip('\n')
        Dict[a] = b

3.3.7 댓글

  • 고양이: 안녕하세요? 반가워요.
  • Projects.Kinder : 안녕하세요. 큐벨리아님 코드 참고해서 업글해봐야겠어요 :)
  • 김왼손: 자문자답이군요ㅋㅋㅋ 훌륭합니다. :)

3.4 중3메이커

3.4.1 제목

제목을 정해주세요.

3.4.2 설명

암호와해킹2판 책에서 배운내용을 가지고 코드를작성하였습니다. 수정된것은 if__name__=='__main__':에 기존에있던것을 지우고 다른것을 썻습니다. d:드라이브에 파이썬 파일에 text.txt를 추가하고 그 text.txt를 암호화시켜서 d:드라이브 에 파이썬2파일안에 encryption.txt파일을 추가하고 그 파일에 text.txt의 글자를 암호화시켜서 encryption.txt에 암호화시킨글자를 넣습니다.

3.4.3 실행화면

실행화면을 넣어주세요.

3.4.4 코드

로그인/회원가입기능+예기할수있는데 편지장

import time
def makecodebook():#암호화 사전,복호화 사전
    encbook={'a':'5','b':'1','c':'3','d':'2','e':'!',\
             'f':'@','g':'*','h':'%','i':'(','j':')','k':'&',\
             'l':'_','m':'-','n':'=','o':'+','p':'0',\
             'q':']','r':'{','s':'}','t':'/','u':'~','v':'$','w':'6','s':'7','y':'9'\
             ,'z':''}
    decbook={}
    for i in encbook:
        val=encbook[i]
        decbook[val]=i
    return encbook,decbook
        
def encrypt(msg,encbook):#암호화시키는 함수
    for i in msg:
        if i in encbook:
            msg=msg.replace(i,encbook[i])
        
    return msg
def decrypt(enc_code,decbook):#복호화시키는 함수
    for i in enc_code:
        if i in decbook:
            enc_code=enc_code.replace(i.decbook[i])
        
    return enc_code
def 왼손_지우개():#엔터40번치는 함수(이거쓰면 IDLE화면 깨끗해짐)
    print('\n'*40)    
if __name__=='__main__':#여기서부터 실행
    encbook,decbook=makecodebook()
    while 1:
        왼손_지우개()
        print('     편지프로그램      ')
        print('-----선택하세요------\n')
        print('회원가입.1\n')
        print('로그인.2\n')
        print('---------------------')
        time.sleep(0.2)
        choice=int(input('숫자만 입력:'))
        if choice==1:#회원가입
            
            왼손_지우개()
            print('회원가입을 시작합니다')
            ID=input('아이디:')
            print('비밀번호는 영어만')
            password=input('비밀번호:')
            f=open('d:\\ID\\%s'%ID,'w')
            f.write(encrypt(password,encbook))
            f.close()
            print('잠시만 기다려주세요')
            time.sleep(1)
            print('회원가입 완료')
            time.sleep(0.2)
            왼손_지우개()
            continue
           
        elif choice==2:#로그인
            왼손_지우개()
            print('-----아이디,비밀번호 잘못입력시 오류가 날수있습니다-----')
            print('오류가 뜨면 프로그램을 다시 실행시켜주세요  ')
            ID=input('아이디:')
            password=input('비밀번호:')
            print('--------------------------------------------------------')
            dd=open('d:\\ID\\%s'%ID,'r')
            d=dd.read()
            dd.close
            enc_password=encrypt(password,encbook)
            if enc_password==d:
                mode=1
                왼손_지우개()
                if ID=='관리자':#관리자 권한실행                        
                    if d==enc_password:
                        ok='ok'                              
                        while ok=='ok':
                            f=open('d:\\편지프로그램\\편지장.txt','r')
                            f_read=f.read()
                            f.close
                            print('관리자권한')
                            time.sleep(1)
                            왼손_지우개()
                            print('로딩중..')
                            time.sleep(2)
                            왼손_지우개()
                            print('---채팅창 내용---')
                            print(f_read)
                            print('-----------------')
                            time.sleep(2)
                            print('----관리자 권한 선택-----\n')
                            print('편지장 초기화.1\n')
                            print('해당아이디 비밀번호변경.2\n')
                            print('관리자권한off.3')
                            print('-------------------------')
                            choice=int(input('입력:'))
                            if choice==1:
                                왼손_지우개()
                                f=open('d:\\편지프로그램\\편지장.txt','w')
                                f.write('편지프로그램\n**이편지는 관리자가\
지우기전까지 사라지지않습니다**')
                                f.close()
                                print('처리중..')
                                time.sleep(0.5)
                                왼손_지우개()
                                print('완료')
                                time.sleep(1)
                                
                                
                            elif choice==2:
                                왼손_지우개()
                                ID2=input('비밀번호를 변경할 아이디')
                                password_change=input('변경할 비밀번호')
                                f=open('d:\\ID\\%s'%ID2,'w')
                                f.write(encrypt(password_change,encbook))
                                f.close()
                                print('처리중..')
                                time.sleep(0.5)
                                print('완료')
                                time.sleep(1)

                            else:
                                ok=1
                            
            else:
                왼손_지우개()
                print('로그인실패')
                time.sleep(2)
                왼손_지우개()
                mode=2
                pass

           
        if mode==1:#로그인 성공시 다음실행
            h=''
            while h=='':
                왼손_지우개()
                f=open('d:\\편지프로그램\\편지장.txt','r')
                f_read=f.read()
                f.close
                print('-----선택 ------')
                print('홈으로.1')
                print('작성.2')
                print('편지읽기.3')
                if ok==1:
                    print('관리자권한on.4')
                choice=int(input('숫자만입력:'))                     
                if choice==2:
                    왼손_지우개()
                    a=input('편지작성:')
                    f=open('d:\\편지프로그램\\편지장.txt','a')
                    f.write('\n%s:'%ID)
                    f.write(a)
                    f.close
                elif choice==3:
                    왼손_지우개()
                    print('----몇초동안 보실건가요---')
                    시간=int(input('숫자만 입력'))
                    왼손_지우개()
                    print(f_read)
                    time.sleep(시간)
                    왼손_지우개()
                elif choice==1:
                    왼손_지우개()
                    h=1
                elif ok==1:
                    if choice==4:
                        manager_on='ok'
                        왼손_지우개()
                        print('관리자권한 on')
                        time.sleep(1)
                        왼손_지우개()

3.4.5 댓글

3.5 전민관

3.5.1 제목

영단어 공부하기

3.5.2 설명

영어 단어 암기 프로그램을 만들고 싶습니다.

  • 영어단어 및 뜻 입력
    • 파일 불러오기(완료)
    • 영어와 한글 나누기(완료)
    • 영어와 한글을 제외한 숫자와 특수문자 제거(완료)
    • 영어와 한글을 묶어서 표시(완료)
    • 영어 이후에 한글 나오게 하기(완료)
  • 간단한 테스트를 통한 복습하기
    • 테스트 기능 추가(진행완료)
    • 5번 연속으로 맞출 시 단어 제거 기능 추가(연속이 아닌 그냥 5번 맞출시 단어 제거)
  • 영어단어에 따른 발음 듣기(적용불가)
파일:실행화면
실행화면입니다

3.5.3 실행화면

실행화면을 위해 코드를 변경하여 랜덤으로 나오지 않고 한글이 아닌 영어 그대로 써야 정답으로 처리되게 바꿨습니다. 실제 파일은 제대로 실행이 됩니다. 영단어장.png

3.5.4 기록

  • 1일차
    • 인터넷에서 영단어 모음 파일을 가져와 파이썬에 입력 시도함.
      • 영단어 모음 파일을 가져오는 중 (UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence)에러 발생으로 인터넷 검색하여 수정 완료
    • 영어와 한글을 split으로 나누려고 시도.
      • 먼저 파일에 있는 영어와 한글안 뺴고 나머지는 지우려고 시도 하는데 계속 에러 발생(숫자와 .을 제거해야함)
  • 2일차
    • 제대로 파일을 읽어오는지 확인을 위해 다른 코드는제거하고 open과 close만 놔두고 그 사이에 print를 넣어 봤으나 에러는 안나왔지만 제대로 읽지 못하는거 같음.
  • 3일차
    • for in으로 읽는데 성공 했으나 한줄씩 읽히는게 아니고 한번에 읽혀서 while로 변경하여 한줄씩불러오기 성공. 그러나 계속 나는 에러를 잡지 못하겠음. 대체 왜 안되는지.....답답해 죽겠네....
      • ValueError: too many values to unpack (expected 2)
    • 검색을 해보니 기준이 2번 들어가 있어서 에러난다고 해서 (e, k) = voca.split('(',1)로도 해보고 소괄호가 특수문자라 앞에 역슬래쉬도 넣어 봤는데 오히려 에러가 증가 하기만 하고 해결이 안됨...
      • ValueError: not enough values to unpack (expected 2, got 1)
    • Break 위치를 잘못 넣어서 계속 에러 발생함. 수정후 print 확인완료.
      • while 맨 하단에 break를 넣어서 이미 Read를 다 했는데도 split코드로 넘어가서 에러 발생
   voca = text.readline()                         voca = text.readline()
   (e, k) = voca.split(' (')                         if not voca : break    
   en.append(e)                                   (e, k) = voca.split(' (')
   kr.append(k)                                    en.append(e) 
   if not voca : break                            kr.append(k)
  • 4일차
    • re.sub을 이용하여 숫자와 특수문자를 지우려고 했는데 계속 error 발생. 인터넷에 검색해도 입력 방법만 나와서 계속 찾다가
  list와 문자열의 차이를 알게됨(re모듈을 사용하려면 문자열이어야 하는데 append를 사용할 경우 리스트로 저장됨
      • join으로 list 상태를 문자열 상태로 변경(아....정말 뿌듯하다........별거 아닌거 같으면서도 이걸로 고생한걸 생각하면.....)
  • 5일차
    • 엔터를 누르면 랜덤하게 영어와 뜻이 한번에 프린트 되도록 설정 함.
      • 테스트를 하다보니 계속 엉뚱하게 되어서 찾아보니 list와 문자열 변경(join, split)를 사용할 때 기준을 하나 정하지 않고 진행하여 공백(" ") 기준으로 나뉘어서 꼬임. 특정 문자를 추가하여 수정 완료
  • 6일차
    • 처음에 엔터를 누르면 영어 단어가 나오고 또 엔터를 치면 한글 뜻이 나옴. 처음에 했던 목표 달성.
    • 무엇을 더 추가 할지 생각 해봐야겠다......
  • 7일차
    • 휴식
  • 5/18
    • 새로운 목표를 가지고 다시 시작.
    • 추가 기능을 넣으려다가 싹 다 갈아엎는중....
  • 5/19
    • 초기화면 > '0, 1'번 입력하여 공부, 테스트 선택이동(테스트 섹션 미적용) > 영어출력 > 엔터 입력 > 한글 출력 and "엔터" = 새로운 영어 출력, "0" = 종료
      • 단어가 잘 보이지 않아 []를 추가 하던 중 앞, 뒤에 공백을 없애려고 하는 중
  • 5/20
    • 앞뒤 공백 제거 완료(list, 문자열 변환 할떄 추가로 공백제거 실행)
    • TEST 기능 업데이트 완료
      • 추가기능을 넣을까 말까.......................
  • 5/21
    • 5번 연속으로 맞출 시 단어 제거 기능 추가 기능을 추가 하려고 알아보는데 아직 방법을 모르겠음.....
  • last
    • 5번 연속 맞출시 단어 제거는 포기. 그냥 5번 맞출시 제거 기능 추가.
    • GUI 적용해보려 하였으나 시간이 부족하여 포기

3.5.5 코드

#window.mainloop()
en = []                         # 영어 저장할 예정
kr = []                         # 한글 저장할 예정

text = open("영단어.txt", 'rt', encoding = 'UTF8')     # 영단어 파일 불러오기
                                                       # cp949 코덱으로 인코딩 된 파일 문제
while True:

    voca = text.readline()      # 한줄씩 불러오기
    if not voca : break         # voca 로딩할게 없을 때 정지
    (e, k) = voca.split(' (')
    en.append(e)        # en에 영어 추가하기
    kr.append(k)        # kr에 한글 추가하기
text.close()            # 영단어 파일 닫기
en = 'ㄱ'.join(en)        # list를 문자열로 변경
kr = 'a'.join(kr) 
en = re.sub('[.0-9]','',en)     # 영어를 제외하고 지우기
kr = re.sub('[)]','',kr)        # 한글을 제외하고 지우기
kr = re.sub('\n', '', kr)       # \n가 사라지지 않아서 추가 함
en = en.split('ㄱ ')         # 다시 list로 변환
kr = kr.split(' a')
a = en

print(' 공부를 하시려면 0번\n 시험을 보시려면 1번을 입력하세요')

select = input()
g = "1"
if select == "0":
    while True :
        if g != "0" :
            g = randint(1, 503)
            print([en[g]], "\n\n\n\n뜻 = enter, End = 0\n\n\n")
            select = input()
            if select != "0" :
                print([kr[g]], "\n\n\n다음 단어 = enter, End = 0\n")
                select = input()
                if select == "0" :
                    print("수고하셨습니다")
                    break
                else : 
                    print()
                
            else :
                print("수고하셨습니다")
                break


        else :
            print("수고하셨습니다")
            break
        
elif select == "1":

    while True :
        if g != "0" :
            g = randint(1, 503)
            test = input([en[g]])
            
            if test == "0" :
                print("수고하셨습니다")
                break
            elif kr[g] == test :
                print("\n\n정답      end = 0\n\n")
                en.append(en[g])
                if en.count(en[g]) == 6 :
                    del (en[g], kr[g])   
                    print(en[g])
                
            else :
                print("\n\n오답      end = 0\n\n")
                    
                     
        else :
            print("수고하셨습니다")

3.5.6 댓글

  • 김왼손: 차근차근 기능이 늘어가는게 멋지네요. :)


3.6 saha

3.6.1 제목

제목을 정해주세요.

3.6.2 설명

초 분 시 변환기

3.6.3 실행화면

실행화면을 넣어주세요.

3.6.4 코드

class Convert:
    def __init__(self, num):
        self.num = num

    def second(self):            #초를 시/분으로 변환
        secs = self.num % 60
        min0 = self.num // 60
        hour0 = min0 // 60
        min1 = min0 % 60
        print(f'{hour0}시간 {min1}{secs}초 입니다.')

    def minute(self):                 #분을 시로 변환
        hour1 = self.num // 60
        min2 = self.num % 60
        print(f'{hour1}시간 {min2}분 입니다.')

----------------------------------------------------------------
from sec_convert import *
while True:
    convert_type = input('변환시킬 타입을 정해 주세요 1.초 2.분')
    if convert_type == '1':
        num0 = int(input('시간을 입력해 주세요.'))
        time = Convert(num0)
        time.second()
    elif convert_type == '2':
        num1 = int(input('시간을 입력해 주세요.'))
        time = Convert(num1)
        time.minute()

3.6.5 댓글

  • 김왼손: 오.. class까지.. 멋집니다. :)


3.7 타박상꼬리뼈

3.7.1 제목

제목을 정해주세요.

3.7.2 설명

전에도 한번은 했었다가 잘 이해가 안돼서 진도가 안나갔는데 그래도 이때 까지 배운 코드가지고 코딩을 해보고 싶습니다.

3.7.3 실행화면

실행화면을 넣어주세요.

3.7.4 코드

def Time(name, number):
    if number <= 6:
        print(name + "문장")
    elif 6 <  number <= 7:
        print(name + "문장")
    elif 7 < number <= 8:
        print(name + "문장")
    elif 8 < number <= 9:
        print(name + "문장")
    else: print(name + "문장")

Time(Guido Van Rossum, 8)
#참고로 Guido van Rossum 이분이 파이썬 창시자라네요

3.7.5 설명

동물 키우기 식으로 코딩을 할려고 합니다.

3.7.6 코드

cat = {
    "name" : "이름",
    "age" : 5,
    "weight" : 5,
    "hungry" : True
}

def feed(pet):
    if pet["hungry"] = True:
        pet["hungry"] = False
        pet["weight"] += 1
        pet["age"] += 0.5
         if pet["age"] == 12:
            print("The pet is death")
        else:
    else: print("The pet is full")

def exercise(pet):
    if pet["hungry"] = False:
        pet['hungry"] = True
        pet["weight"] -= 1
        pet["age"] += 0.5
        if pet["age"] == 12:
            print("The pet is death")
        else:
    else: print("The pet is tired")

def minus_age(pet):
    if pet["age"] > 1:
        pet["age"] -= 1
    else:
        print("It's too young")

def plus_age(pet)
    if pet["age"] < 11:
        pet["age"] += 1
    else:
        print("It can be die")

feed(cat)
print(cat)
exercise(cat)
print(cat)
for i in range(2):
    feed(cat)

3.7.7 설명

다시올려여

3.7.8 코드

a = int(input("값을 입력하시오"))

def plus(c):
    b = a + c
    print(a,"+",c,"=",b)

def minus(c):
    b = a - c
    print(a,"-",c,"=",b)

def division(c):
    b = a // c
    d = a % c
    print(a,"%",c,"=",b,"+",d)

def multiply(c):
    b = a * c
    print(a,"*",c,"="b)

def squared(c):
    b = a ** c
    print(a,"^",c,"=",b)

plus(5) #a에 5를 넣으면 "5 + 5 = 10"이 출력됨

3.7.9 설명

한국어를 명령어로 만들었어요

3.7.10 코드

출력 = print
 = True
거짓 = False

a = 4
a += 1

if a == 5:
    출력()
else:
    출력(거짓)

3.7.11 댓글

  • 김왼손: 여러 프로그램을 작성하고 있군요. 대단합니다. :)


3.8 raina

3.8.1 제목

제목을 정해주세요.

3.8.2 설명

하루 권장 칼로리 안에서 자취생을 위한 다이어트 식단 만드는 프로그램을 만들고 싶습니다. 텍스트 중심의 하루치 식단편성 프로그램으로 먼저 시작하고 부족한 부분들은 하나씩 추가하여 업그레이드 시키려고 합니다.

1. 여성 or 남성 선택
-남여 권장칼로리 구분해서 입력하기
2. 아침/ 점심/ 저녁 선택
-음식메뉴선택 : 한식 / 중식 / 양식 / 일식 (칼로리 표시)
3. 권장칼로리 판단
-미만: pass
-적정: pass
-초과: 운동옵션 추가
4.운동옵션
-초과 칼로리만큼 운동옵션 추가하기
5. 위의 선택들을 잘 정리해서 출력하기

3.8.3 실행화면

실행화면을 넣어주세요.

3.8.4 코드

input("당신은 여성입니까? 남성입니까?")
a = "여성"
b = "남성"

if a:
    print("하루권장 칼로리는 1800Kcal입니다.")
elif b:
    print("하루권장 칼로리는 2500Kcal입니다.")

3.8.5 댓글

  • 김왼손: 완성되면 실용적일 것 같아요. :)


3.9 람오 LAMO

3.9.1 제목

제목을 정해주세요.

3.9.2 설명

고등학생입니다. 그림 그리기가 취미고, 언젠가 게임회사에 들어가거나 제대로 된 인디게임 만드는 것이 꿈입니다.
- 작년 여름, 학교에서 방과후 웹디자인으로 처음 코딩을 접했습니다. 세 달정도 하다가 죽는줄 알았습니다....

  • 만들고 싶은 프로그램

스토리 위주의 간단한 게임 (머드 게임을 만드려 했지만.. 실력 부족이라 렌파이를 이용해서 해보려 합니다.)

3.9.3 실행화면

실행화면을 넣어주세요.

3.9.4 진행 상황

5/25 -

22.png

넣을 그림은 이번주 내로 그리려고 합니다..ㅠ


  • 엔딩 분기점
   * 점수에 따라 달라지는 엔딩을 구현한다. (무슨 점수인지는 미정)
  • 퍼즐? 전투?
   (전투는 추가하기 힘들것 같으니 보류..)
  • 추가 예정

3.9.5 코드

(전체적으로 제가 한 건 거의 없습니다ㅠㅠ 아마 조금 손 봐서 다른거 추가해봐야 될거 같네요.

scrypt.rpy의 일부입니다.

define ch_viola = Character("비올라")
define ch_hyde = Character("하이드")

image bg_forest = "bg/forest-1.jpg"
image scg_viola :
    im.FactorScale("scg/viola.png",0.5,)
    yalign 0.0 

define cetner = Position(xalig = 0.5, yalign = 0.0)


image scg_hyde = "scg/hyde.png"


label start:
    scene bg_forest
    
    "나래이션"

    show scg_viola
    ch_viola "...??"

    
    ch_hyde "(대사)"

    return

gui (바꾼거 이것밖에 없어서 얘만 올려요)

## The font used for in-game text.
define gui.text_font = "MapoGoldenPier.ttf"

## The font used for character names.
define gui.name_text_font = "MapoGoldenPier.ttf"

## The font used for out-of-game text.
define gui.interface_text_font = "MapoGoldenPier.ttf"

3.9.6 댓글

  • 김왼손: 텍스트 기반으로 먼저 만들어 보는건 어떨까요? :)

3.10 ken-ni

3.10.1 제목

제목을 정해주세요.

3.10.2 설명

구매대행 프로그램을 만들고 싶습니다.

3.10.3 실행화면

실행화면을 넣어주세요.

3.10.4 코드

print('Hello Python!')

import matplotlib.pyplot as plt
%matpkotkib inkine

from wordcloud import wordCloud

text = open('condtitution.txt').read( )

wordcloud = wordCloud( ).generate(text)

wordcloud.words_

plt. figure(figsize=(12,12))
pit. imshow(wordcloud, interpolation='bilinear')
plt. axis("off")
plt. show( )

3.10.5 댓글

  • 김왼손: 어떤 프로그램이 나올지 기대됩니다. :)


3.11 파이싼

3.11.1 제목

제목을 정해주세요.

3.11.2 설명

타 프로그램과의 연계 및 3rd 파티로 이용하고 싶습니다.

3.11.3 실행화면

실행화면을 넣어주세요.

3.11.4 코드

print('Hello Python!')

import pandas as pd
Function1 = pd.Series([1, 2, 3])
print(Function1)

3.11.5 댓글

  • 김왼손: 어떤 프로그램과의 연계일까요? :)

3.12 타박상꼬리뼈

3.12.1 설명

만약에 온라인으로 시험을 친다면 이렇게 칠 것 같아서 만들어 봤습니다. (아직 미왕성이예요!)

3.12.2 코드

#다음 문제를 푸시오
#1. 316 + 824
#2. 13 * 4
#3. 75 % 15
#4, 1132 - 296
#5. 13 ^ 2
#6. 5 + 4 * 13
#7. 15 * 12
#8. {9(3 - 4)} ^ 2
#9. (2 ^ 0)
#10. 19 ^ 19

a = 316 + 824
b = 13 * 4
c = 75 // 15
d = 1132 - 296
e = 13 ** 2
f = 5 + 4 * 13
g = 15 * 12
h = (9 * 3 - 4 * 9) ** 2
i = 2 ** 0
j = 19 ** 2

k = 0

def prblm(number, answer): #문제번호, 답
    if number == 1:
        if answer == a:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 2:
        if answer == b:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 3:
        if answer == c:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 4:
        if answer == d:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 5:
        if answer == e:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 6:
        if answer == f:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 7:
        if answer == g:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 8:
        if answer == h:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 9:
        if answer == i:
            return("O")
            return k += 10
        else:
            return("X")
    if number == 10:
        if answer == j:
            return("O")
            return k += 10
        else:
            return("X")
for i in range(1, 11):
    print(prblm(i, int(input())

print("점수: " + str(k))

3.13 타박상꼬리뼈

3.13.1 설명

로또 추첨기를 만들었는데 floor랑 ceil을 응용해서 만들었어요.

3.14 코드

from math import*
from random import*

x = ["floor", "ceil", "int"]

y = input()

if y in x:
    for i in x:
        if y == i:
            a = int(random() * 45)
            b = int(random() * 45)
            c = int(random() * 45)
            d = int(random() * 45)
            e = int(random() * 45)
            f = int(random() * 45)
            
            print("값:",i)

            print(a)

            while a == b:
                b = i(random() * 45)
                continue
            while b == 0:
                b = i(random() * 45)
                continue

            print(b)

            while b == c:
                c = i(random() * 45)
                continue
            while c == 0:
                c = i(random() * 45)
                continue

            print(c)

            while c == d:
                d = i(random() * 45)
                continue
            while d == 0:
                d = i(random() * 45)
                continue

            print(d)

            while d == e:
                e = i(random() * 45)
                continue
            while e == 0:
                e = i(random() * 45)
                continue

            print(e)

            while e == f:
                f = i(random() * 45)
                continue
            while f == 0:
                f = i(random() * 45)
                continue

            print(f)
else:
    print("제대로된 값을 입력하시오")