파이썬 유치원 (영아반)

큐벨리아 (토론 | 기여)님의 2020년 5월 11일 (월) 21:58 판 (→‎코드)

1 파이썬 유치원

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

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

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

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

2 제타위키 사용법

3 영아반 친구들

3.1 고양이

3.1.1 설명

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

3.1.2 log

+5/9, 약 9:45 나눗셈 기능 추가

3.1.3 코드

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, '입니다')
    else:
        print('제대로된 명령어를 입력해 주세요.')
        print('-----------------------------------------------')

3.2 Projects.Kinder

3.2.1 설명

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

  • 1) 구구단 : 숫자 입력시 1~9까지 구구단 계산하여 프린트 / 문자 입력시 숫자 입력 안내 문구 프린트
  • 2) 달력(1차 : 단순 프린트 / 2차 : 원하는 년도,월 입력시 출력 / 3차 : 년도 전체 달력 또는 원하는 년도, 월 출력 선택)

3.2.2 코드

# 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 # Calendar Module

yyyy = int(input('year(yyyy) :' ))
mm = int(input('month(mm) :' ))

print(calendar.month(yyyy, mm)) #월 출력
print(calendar.calendar(yyyy, mm)) #년도 출력

3.3 큐벨리아

3.3.1 설명

사이트 계정 비밀번호 추가, 검색, 출력하는 프로그램(ID는 통일되어있어 제외)

  • 현재 기능 :
    • 입력, 출력, 종료, 수정
  • 추가 기능 :
    • 수정(예정 -> 완료),삭제(예정 -> 완료),등록한 회사명, 비밀번호를 메모장으로 저장 및 불러오기
  • 개선 사항 :
    • 1. 입력 기능을 함수로 만들어, 추가로 입력할것인지, 입력 기능을 종료할것인지 묻는 선택문 기능 추가(예정 -> 완료)
  • 작성 기록
    • 2020-04-30 기능설명
    • 2020-05-10 기본적인 기능 구현, 개선사항 수정완료
    • 2020-05-11 수정, 삭제 기능 추가
  • 개소리
    • 회사, 비밀번호을 입력할 함수를 하나 만들까싶네 너무 더러워 보이네

3.3.2 코드

dic = {}

# 입력
def Create() :
    print('') #5줄 
    print('')
    Company = input('            회사 : ') 
    print('')
    PW = input('            비밀번호 : ')
    dic[Company] = PW
    print('')
    print('           * 더 하시겠습니까? = 1 끝내시겠습니까? = 2')
    print('')
    if((int(input('            ')) == 1)) : 
        Create()
    else :
        return
        
# 조회
def Join() :
    print('') 
    print('')
    Company = input('            회사 : ')
    print('')
    if Company in dic : 
        print('            비밀번호 : ', dic[Company])
    else :
        print('            자료가 존재하지않습니다.')

# 수정
def Updata() :
    print('') #6줄
    print('')
    Company = input('            회사 : ')
    print('')
    PW = input('            비밀번호 : ')
    print('')
    if(dic[Company] == PW) :
        del dic[Company]
        print('            새로운 비밀번호를 입력하세요.')
        print('')
        PW = input('            ')
        dic[Company] = PW
    else : 
        print('            비밀번호가 틀렸습니다.')
        print('')
        print('            * 다시 하시겠습니까? = 1 돌아가시겠습니까? = 2')
        print('')
        if(input('            ') == '1') :
           Updata()
        else :
            return
# 삭제
def Delete() :
    print('') #6줄
    print('')
    Company = input('            회사 : ')
    print('')
    PW = input('            비밀번호 : ')
    print('')
    if(dic[Company] == PW) :
        del dic[Company]
        print('            삭제되었습니다.')
    else :
        print('            비밀번호가 틀렸습니다.')
        print('')
        

while(1) :

    # 메뉴
    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

3.3.3 출력

3.4 가이드라인

3.4.1 설명

생각해본건 없지만 의뢰작업 해보는게 꿈입니다

3.4.2 코드

import datetime
import tkinter as tk
def 감지():
        if 시간.weekday()==0:
                lbl.configure(text='월요일')
    
        elif 시간.weekday()==1:
                lbl.configure(text='화요일')
    
        elif 시간.weekday()==2:
                lbl.configure(text='수요일')
        
        elif 시간.weekday()==3:
                lbl.configure(text='목요일')
    
        elif 시간.weekday()==4:
                lbl.configure(text='금요일')
    
        elif 시간.weekday()==5:
                lbl.configure(text='토요일')
        elif 시간.weekday()==6:
                lbl.configure(text='일요일')



year=input('년도')
month =input('월')
day=input('일')
시간=datetime.date(int(year),int(month),int(day))

tk.Tk().geometry('200x200')
lbl=tk.Label(text='요일알아내는 프로그램')
btn=tk.Button(text='버튼',command=감지)
lbl.pack()
btn.pack()
lbl.pack()
tk.mainloop()

요일알아내는 프로그램

3.5 raina

3.5.1 설명

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

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

3.5.2 코드

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

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


3.6 람오 LAMO

3.6.1 설명

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

  • 만들고 싶은 프로그램

스토리 위주의 간단한 게임

3.6.2 해야 할 것

  • 캐릭터, 배경, UI 구성
  • 추가 예정

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

3.6.3 코드

import pygame

pygame.init()
width, height = 400, 800 #값은 임의로 정함
screen = pygame.display.set_mode((width,height))


3.7 ken-ni

3.7.1 설명

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

3.7.2 코드

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.8 전민관

3.8.1 설명

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

  • 영어단어 및 뜻 입력
    • 파일 불러오기(완료)
    • 영어와 한글 나누기(완료)
    • 영어와 한글을 제외한 숫자와 특수문자 제거(완료)
    • 영어와 한글을 묶어서 표시(완료)
    • 영어 이후에 한글 나오게 하기(완료)
    • 추가기능....고민
  • 영어단어에 따른 발음 듣기(적용불가)
  • 간단한 테스트를 통한 복습하기(준비중)

3.8.2 기록

  • 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일차
    • 휴식

3.8.3 코드

from random import randint      # 영단어의 랜덤 출제를 위한 모듈
import re                       # 지울때 쓰는 모듈
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)      # 한글을 제외하고 지우기
en = en.split('ㄱ')         # 다시 list로 변환
kr = kr.split('a')

#print(en)
#print(kr)
q = input("공부를 시작하고 싶으면 엔터를 누르세요")
g = 0

while g != "0" :
     g = randint(1, 503)
    print(en[g])
    q = input("엔터를 누르시면 뜻이 나옵니다")
    print(kr[g])
    q = input("다른 단어를 보시려면 엔터를 누르세요")


3.9 파이싼

3.9.1 설명

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

3.9.2 코드

print('Hello Python!')

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


3.10 Yoon

3.10.1 설명

간단한 게임들을 만들어보고 싶어요.

3.10.2 코드

일단은 Python 기초강의 영상보면서 공부중입니다.
2020.05.06 : 미운코딩새끼 28강까지 정리 완료
2020.05.07 : 미운코딩새끼 46강까지 정리 완료
2020.05.08 : 미운코딩새끼 완료
https://www.notion.so/Python-414973d8d54a43c7a9495d201babed29
코드 적어본것 깃허브
https://github.com/YoonJeong-Choi/PythonPreschool
2020.05.09~10 : snake game 도움 - https://python.bakyeono.net/chapter-12-1.html

import pygame
import random # 랜덤으로 사과 띄움
import time
from datetime import datetime
from datetime import timedelta

pygame.init() # pygame 초기화

SCREEN_WIDTH = 440 # 화면 너비
SCREEN_HEIGHT = 440 # 화면 높이
BLOCK_SIZE = 20 # 블록 크기(네모 한칸 크기)
# 화면의 가로세로가 400이고 블록의 크기가 20이기 때문에 가로, 세로는 20칸씩 블록이 들어갈 수 있다.
EDGE = []
for w in range(0, 22) :
    EDGE.append((0, w))
    EDGE.append((21, w))
    EDGE.append((w, 0))
    EDGE.append((w, 21))

# 색
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
BROWN = (124, 56, 0)

# 점수
score = 0
# pygeme.display.set_mode((화면 너비, 화면 높이)) 화면 객체 반환
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption('SnakeGame') # title 설정

# 화면
# 시작 화면
def draw_main(screen) :
    background = pygame.Rect((0, 0), (SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.draw.rect(screen, WHITE, background)
    # 시작버튼
    # startButton = pygame.Rect((SCREEN_WIDTH // 4, SCREEN_HEIGHT // 2), (BLOCK_SIZE * 11, BLOCK_SIZE * 3))
    # pygame.draw.rect(screen, GREEN, startButton)
    # 시작글씨
    font = pygame.font.Font('freesansbold.ttf', BLOCK_SIZE * 3) # 폰트 설정
    text = font.render('start!', True, BLACK) # 글자 설정 render('출력', True, 글자색, 배경색)
    textRect = text.get_rect()
    textRect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)
    screen.blit(text, textRect)

# 게임 배경
def draw_background(screen) :
    # 화면 전체에 강과 땅을 그려준다.
    # pygame.Rect((x, y), (사각형 너비, 사각형 높이))
    background = pygame.Rect((0, 0), (SCREEN_WIDTH, SCREEN_HEIGHT))
    # pygame.draw.rect(사각형을 그릴 화면, 색, 사각형 정보)
    pygame.draw.rect(screen, BROWN, background)
    # 테두리는 파란색으로 칠해준다.
    for edge in EDGE :
        edges = pygame.Rect((edge[0] * BLOCK_SIZE, edge[1] * BLOCK_SIZE), (BLOCK_SIZE, BLOCK_SIZE))
        pygame.draw.rect(screen, BLUE, edges)
    

# 블록을 그리는 함수 이 함수로 뱀이나 사과같은것들을 그려준다.
def draw_block(screen, color, position) :
    # position[n] * BLOCK_SIZE는 블록의 위치를 나타낸다.
    # 화면크기가 400*400, 블록이 20*20이기 때문에 화면은 가로, 세로 20칸이 된다. x, y를 이를 이용해 설정한것
    block = pygame.Rect((position[0] * BLOCK_SIZE, position[1] * BLOCK_SIZE), (BLOCK_SIZE, BLOCK_SIZE))
    pygame.draw.rect(screen, color, block)


# 블록 위치 = 뱀이 처음 나올 위치
block_position = [9, 9]
# 마지막으로 블록을 움직인인 때 = 마지막으로 버튼을 누른 때
# datetime.now()는 현재 시간을 알려준다.
last_moved_time = datetime.now()
# 처음 블록의 방향은 아래
block_direction = 'down'

# 방향 키 입력에 따라 블록의 방향 dictionary
DIRECTION_ON_KEY = {
    pygame.K_UP : 'up',
    pygame.K_DOWN : 'down',
    pygame.K_LEFT : 'left',
    pygame.K_RIGHT : 'right'
}

# 뱀
class Snake :
    color = GREEN
    # speed = 0.3
    def __init__(self) :
        self.positions = [(11, 11)] # 뱀의 위치. 뱀이 길어질수록 이 배열도 길어질것이다.
        self.direction = 'down' # 뱀의 방향
        self.speed = 0.3

    def draw(self, screen) :
        # 뱀그리기. 사과를 먹을수록 길어져야한다.
        # 여러 블록으로 이루어져있기 때문에 반복문을 돌며 그린다.
        for position in self.positions:
            draw_block(screen, self.color, position)
    # 뱀이 움직이면 머리가 움직인것에 따라 꼬리까지 따라가게 만드는 함수
    def crawl(self) :
        # 뱀의 머리는 인스턴스 변수인 positions[0] 위치이다.
        head_position = self.positions[0]
        # x, y 변수에 머리의 x, y좌표를 넣어준다.
        x, y = head_position
        # 만약 현재 뱀이 움직이는 방향이 아래라면
        if self.direction == 'down' :
            # 뱀의 머리 위치를 한칸 아래로 바꿔주고,
            # 기존 뱀의 위치 중 꼬리가 있던 부분 직전까지 더해준다.
            # 이렇게하면 머리의 위치를 앞에 추가해줌으로써
            # 머리부터 꼬리까지 각자 블럭의 앞에 있던 칸으로 따라간다.
            self.positions = [(x, y + 1)] + self.positions[:-1]
        elif self.direction == 'up' :
            self.positions = [(x, y - 1)] + self.positions[:-1]
        elif self.direction == 'left' :
            self.positions = [(x - 1, y)] + self.positions[:-1]
        elif self.direction == 'right' :
            self.positions = [(x + 1, y)] + self.positions[:-1]
    # 뱀의 방향을 바꾸는 함수
    def turn(self, direction) :
        self.direction = direction
    # 뱀을 키워주는 함수
    def grow(self) :
        # 뱀 꼬리의 뒤에 한칸 붙여준다.
        x, y = self.positions[-1]
        if self.direction == 'up' :
            self.positions.append((x, y - 1))
        elif self.direction == 'down' :
            self.positions.append((x, y + 1))
        elif self.direction == 'left' :
            self.positions.append((x - 1, y))
        elif self.direction == 'right' :
            self.positions.append((x + 1, y))
        # 뱀의 속도를 높여준다.
        if len(self.positions) > 15  and len(self.positions) < 25  :
            self.speed = 0.2
        elif len(self.positions) > 25 :
            self.speed = 0.1        

# 사과
class Apple :
    color = RED
    def __init__(self, position = (7, 7)) :
        self.position = position # 사과 위치

    def draw(self, screen) :
        # 사과 그리기
        draw_block(screen, self.color, self.position)    

# 게임판 : 뱀과 사과를 그려준다
class Board :
    width = 20
    height = 20
    
    def __init__(self) :
        self.snake = Snake()
        self.apple = Apple()

    def draw(self, screen) :
        self.apple.draw(screen) # 게임판 위의 사과 그리기
        self.snake.draw(screen) # 게임판 위의 뱀 그리기
    # 사과 만들기 - 사과에 사과만들기를하면 snake인스턴스를 못쓴다.
    def put_new_apple(self) :
        # 0 부터 20까지 랜덤으로 수를 정해 사과 위치를 정한다.
        self.apple = Apple((random.randint(1, 20), random.randint(1, 20)))
        # 뱀의 몸과 겹치면 사과를 다시만든다.
        for position in self.snake.positions :
            if self.apple.position == position :
                self.put_new_apple()
                break
    # 시간이 지나면 process_turn 메소드가 실행되며 저절로 뱀이 움직인다.
    def process_turn(self) :
        self.snake.crawl()
        # 뱀머리가 몸이나 벽에 부딛히면 게임이 끝난다.
        if self.snake.positions[0] in self.snake.positions[1:] or self.snake.positions[0] in EDGE:
            exit()
        # 움직이다가 사과 == 뱀머리 이면 뱀을 길게만들고 새 사과를 만든다.
        if self.snake.positions[0] == self.apple.position:
            self.snake.grow()
            self.put_new_apple()
            return 1
        return 1
    # 점수를 표시해주는 메소드.
    def write_score(self, screen) :
        score = 'score : {}'.format(len(self.snake.positions) - 1)
        # 상단에 점수표시
        font = pygame.font.Font('freesansbold.ttf', BLOCK_SIZE) # 폰트 설정
        text = font.render(score, True, BLACK, WHITE) # 글자 설정 render('출력', True, 글자색, 배경색)
        textRect = text.get_rect()
        textRect.center = (SCREEN_WIDTH // 2, BLOCK_SIZE // 2)
        screen.blit(text, textRect)    
    
# 게임판 인스턴스 생성
board = Board()


# 종료를 누르기 전까진 화면을 계속 보여준다.
while True :
    # pygame.event.get() 발생한 이벤트 목록을 읽는다.
    events = pygame.event.get()
    
    # 반복문을 이용하여 이벤트 목록을 본다.
    for event in events :
        # 종료 이벤트가 발생하면 종료한다.
        if event.type == pygame.QUIT :
            exit()
        # 어떤 버튼을 눌렀다면 아래처럼 행동한다.
        if event.type == pygame.KEYDOWN :
            # 만약 눌린 버튼이 화살표키라면 블록의 방향을 화살표 키에 맞게 바꾼다.
            if event.key in DIRECTION_ON_KEY :
                # dictionary
                board.snake.turn(DIRECTION_ON_KEY[event.key])

    # datetime.now() - last_moved_time을 이용하여 마지막으로 버튼을 누른지 0.3초가 지났다면
    # timedelta() 두 날짜(일,주 등등)나 시간(초, 분 등등)의 차이를 알려준다.
    if timedelta(seconds = board.snake.speed) <= datetime.now() - last_moved_time :
        play = board.process_turn()
        last_moved_time = datetime.now() # 마지막으로 움직인 시간 알려줌

    #draw_main(screen)
    draw_background(screen) # 배경그리기
    board.draw(screen) # 화면판에 게임판그리기
    board.write_score(screen)
    
    # 화면 새로고침
    pygame.display.update()



3.11 gum1028

3.11.1 설명

어떤 프로그램을 만들 수 있는 지도 모르는 코딩 초보입니다. 데이터 사이언스에 관심이 있어 지원하였습니다 :)

3.11.2 코드

print('Hello Python!')
print('반갑습니다 :)')


3.12 선인장

3.12.1 설명

일단 프로그램에 입문하고 싶어요

3.12.2 코드

print('Hi~~~')


3.13 삼이이칠

3.13.1 설명

메모장

3.13.2 코드

print('Hi Python')


3.14 drawi ng

3.14.1 설명

아직 만들고싶은 프로그램은 없습니다.

3.14.2 코드

print('Hello Python!')


3.15 uijun Hwang

3.15.1 설명

세부적으로 만들고 싶은 프로그램은 없으나, 파이선 유치원을 통해 유기농 냠냠 파이선보다 더욱 큰 흥미를 느끼고 싶습니다. 이런 기획을 해주셔서 너무 감사합니다. :) 꼭 참여하고 싶습니다. 원하는 프로그램은 차후 세부내용 업뎃하겠습니다 :)

  • 1st: To-do list 관리 프로그램(기능 : 날짜별 추가/삭제/수정, 완료/미완료 확인, 일/주/월별로 총개수/완료/미완료 개수 확인)
  • 2nd: POS 프로그램(기능 : 품목/가격 추가/삭제/수정, 거래기준 품목별 개수/금액 확인, 거래기준 총금액 확인, 일/주/월별로 총거래/총금액 확인)

3.15.2 코드

print('Hello Python!')


3.16 앤드류

3.16.1 설명

파이선은 처음하는거라서 얼떨떨하네요... 열심히 해보겠습니다.

3.16.2 코드

print('Hello Python!')


3.17 일리우

3.17.1 설명

출석체크 프로그램.

3.17.1.1 진행상황
  • 강의목록

3.17.2 코드

print('Hello Python!')


3.18 이종남

3.18.1 설명

배워가면서 생각해볼게요

3.18.2 코드

print('Hello Python!')


3.19 SJ

3.19.1 설명

아직도 고민중58.122.176.253

3.19.2 코드

print('Hello Python!')


3.20 해외사는 공대생

3.20.1 설명

제대로 된 프로그램 하나 만들어서 앞으로 코딩에 흥미를 가지싶어요.만들고 싶은 프로그램은 조금더 고민해서 만들어보도록 할께요

3.20.2 코드

print('Hello Python!')


3.21 김승연

3.21.1 설명

한입에 파이썬 공부끝마치고 있습니다!

3.21.2 코드

print('Hello Python!')


3.22 코리스

3.22.1 설명

쿠팡 자동등록 프로그램

3.22.2 코드

print('Hello Python!')


3.23 잇스타그램

3.23.1 설명

리마인더 같은 어플을 만들고 싶어요

3.23.2 코드

print('Hello Python!')


3.24 김희준

3.24.1 설명

제 공부에 도움이 될만한 어플을 만들고 싶은데 파이썬으로 어느정도까지 가능한지 아는게 없어서(능력이 안되는 것도 있구요)... 공부하면서 천천히 세부적으로 생각해보려구요!

3.24.2 코드

print('Hello Python!')


3.25 라나스

3.25.1 설명

이제 퇴사하고 아이티로 직업을 전향하려는 늦깍이 문과생이라 어떤 프로그램을 만들면서 연습해야 할지 잘 모르겠습니다.. 예시로 하나만 지정해주시면 감사하겠습니다ㅠ 파이썬 수준은 아주 기초는 할 수 있고 구글에서 찾아서 한참 고민하면서 사용할 수 있을 정도 입니다. 성실히 참여하겠습니다!

3.25.2 코드

print('Hello Python!')


3.26 동진시민

3.26.1 설명

영어 문장 구조를 분석해주는 프로그램을 만들고 싶습니다. 문법적으로 어떤 구성 요소인지를 분석하고, 해석될 수 있는 가능성의 수도 보여주고, 이를 마인드맵으로 시각적으로 보여주는 프로그램을 만들고 싶어요!

3.26.2 코드

print('Hello Python!')


3.27 Douglas

3.27.1 설명

업무 자동화 프로그램, 웹크롤링

3.27.2 코드

print('Hello Python!')


3.28 장우석

3.28.1 설명

미정

3.28.2 코드

print('Hello Python!')


3.29 saha

3.29.1 설명

왼손님 강의를 듣다 댓글에 어떤 분께서 자신이 만든 프로그램에 오류가 있다 하셔서 그걸 수정해 본 것입니다.

3.29.2 코드

print('안녕하세요 배송봇입니다.\n배송을 위해 개인정보를 수집하겠습니다.\n아래의 답변을 적어주세요.')
while True:
    agree = input('개인정보 수집에 동의하십니까?' '네/아니요')
    if agree == '아니요':
        print('동의하셔야지만 이용이 가능합니다')
        continue
    name = input('성함을 알려주세요.')
    while True:
        phone = input('{}님, 연락처를 알려주세요.'.format(name))
        agree_phone = input('{}님, 이 번호가 맞습니까? 네/아니요'.format(phone))
        if agree_phone == '아니요':
            print('번호를 다시 입력해주세요')
            continue
        elif agree_phone == '네':
            print('이용해 주서서 감사합니다^^')
            break
    break

3.30 백두현

3.30.1 설명

회사 업무시 생각하는데로 오피스 사무자동화를 만들어 스마트하게 회사생활을 하고싶습니다.

  • 특히 판다스 및 openpyxl 익숙하게 사용하고싶습니다.
  • 더 나아가 프로램도 실생활에 필요한 프로그램도 만들어 보고싶습니다.

3.30.2 코드

print('Hello Python!')


3.31 C Ahn

3.31.1 계획

1-1. 한입에 쏙 파이썬 강의 다 보기 1-2. 만들고 싶은 프로그램 세부적 고민하기 1-3. 유치원생 목록중에 비슷한 프로그램만들고자 하는 분들의 공간 참고하기

3.31.2 설명

  • 업무 자동화 : 웹 데이터 크롤링(또는 다운받은 엑셀파일) + 전처리 가공

3.31.3 코드

print('Hello Python!')


3.32 퀸미나

3.32.1 설명

플래너. 공부나 할 일들 적기와 시간기록도 스탑워치로 기록할 수 있는 시간관리 기록장.

3.32.2 코드

print('Hello Python!')


3.33 JWK

3.33.1 설명

실시간 가격 산출 프로그램

3.33.2 코드

print('Hello Python!')


3.34 오리꽥꽥

3.34.1 설명

실시간 가격 산출 프로그램

3.34.2 코드

print('Hello Python!')


3.35 HansKim

3.35.1 설명

부모님 건강관리를 위해 건강관리 수첩(앱)을 만들어보고 싶어서 입학했습니다.

3.35.2 코드

print('Hello Python!')


3.36 문병조

3.36.1 설명

일단 외부에서 예약할 수 있는 달력과 시간 화면, 그리고 예약폼을 전송할 수 있으면 좋겠습니다.

3.36.2 코드

print('Hello Python!')


3.37 코스톨라니

3.37.1 설명

엑셀로 받은 판매량 데이터를 정렬하고 판매량을 정리하는 프로그램을 만들고 싶습니다.

3.37.2 코드

print('Hello Python!')


3.38 코딩초보

3.38.1 설명

저 정말 아무것도 몰라요 코딩 옛날에 방과후 다닌것밖에 없습니다. 하지만 김왼손님의 한입에 쏙 파이썬 보고 자신감 생겨서 한번 도전해 봅니다. 파이게임 설치도 못하겠어요 ㅠㅠ

3.38.2 코드

print('Hello Python!')


3.39 타박상꼬리뼈

3.39.1 설명

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

3.39.2 코드

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.40 라이으니

3.40.1 설명

아웃룩 수신메일 엑셀로 자동정리

3.40.2 코드

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}