'코딩배우기'에 해당되는 글 7건

  1. 2023.08.22 파이썬 코딩 5 GUI 3
  2. 2023.08.22 파이썬 코딩 4 웹크롤링
  3. 2023.08.21 파이썬 코딩 3 유틸리티
  4. 2023.08.19 파이썬 코딩 2 기본 활용
  5. 2023.08.18 파이썬 코딩 1 기본 코딩법
  6. 2023.08.18 스크래치 코딩 2
  7. 2023.08.18 스크래치 코딩 1 1

GUI란 뭔가요?
그래픽 사용자 인터페이스(Graphical User Interface)의 약자입니다. 
컴퓨터와 사용자 간의 상호 작용을 위해 그래픽 요소를 사용하는 인터페이스를 말합니다. 
GUI는 텍스트 기반 인터페이스보다 사용하기 쉽고 직관적입니다. 
또한, GUI는 다양한 그래픽 요소를 사용하여 사용자의 관심을 끌고 사용자의 경험을 향상시킬 수 있습니다.

GUI 코딩을 하려면 어떻게 해야 하나요?
Tkinter 라이브러리를 사용해야 합니다. 
Tkinter는 파이썬과 함께 제공되는 표준 GUI 라이브러리입니다. 
Tkinter를 사용하면 간단한 GUI를 쉽게 만들 수 있습니다.

Hello라는 글자를 창에 보이게 하려면 어떻게 해야 하나요?
Tkinter 라이브러리를 불러옵니다.
글자 크기를 설정하기 위해 tkinter.font 라이브러리도 불러옵니다.
tkinter.Tk() 함수로 윈도우 개체를 생성합니다.
title("hello") 함수로 창의 제목을 hello로 정합니다.
geometry(“600x300") 함수로 창의 가로와 세로 크기를 지정해 줍니다. 곱하기 x는 영어 소문자입니다.
Font(size = 30) 함수로 글자크기를 30으로 설정합니다.
Label(window, text=“반갑다, 파이썬~", font=font) 함수로 창에 글자를 출력합니다. 여기서 window 변수는 윈도우 개체이며, font 변수는 글자 크기를 30으로 정한 변수입니다.
pack() 함수로 label 위젯을 창(컨테이너)에 배치합니다.
mainloop() 함수로 이벤트 루프를 시작하고, 애플리케이션이 종료될 때까지 계속 실행합니다. 이벤트 루프는 사용자의 입력, 마우스 클릭, 키보드 입력 등과 같은 이벤트를 처리합니다.

Hello 글자 출력 창 코딩

import tkinter
import tkinter.font # 폰트 라이브러리 불러옴

window = tkinter.Tk() # 윈도우 개체 생성
window.title(“파이썬 코딩")
window.geometry(“600x300") # x는 영어 소문자

font = tkinter.font.Font(size = 30) # 글자크기 설정
label=tkinter.Label(window, text="반갑다, 파이썬~", font=font) # 문자 출력
label.pack()

window.mainloop() # 윈도우를 계속 유지시킴

간단한 시계를 만들려면 어떻게 해야 하나요?
1초마다 실행되는 함수를 만듭니다.
함수 안에 mySec 전역 변수를 사용하기 위해 global로 mySec을 전역 변수로 선언합니다.
mySec에 1을 더하고 이를 label의 text로 지정합니다.
1초 후에 함수를 다시 실행합니다. 자기 자신을 다시 실행하는 재귀함수입니다.
같은 방식으로 1분마다 실행되는 함수도 만듭니다.
윈도우가 실행되면 함수도 실행되도록 합니다.

1초마다 숫자 증가하는 함수 코딩
mySec = 0

def get_sec():
    global mySec
    # 함수 밖에 있는 변수를 사용하고자 전역 변수로 선언
    nowNum = str(mySec)
    mySec = mySec + 1
    label.config(text= nowNum) # 라벨의 text에 cnt 값을 지정
    window.after(1000,get_sec) # 1초 후에 재귀함수 실행

get_1sec()

간단한 시계 코딩

import tkinter
import tkinter.font

window = tkinter.Tk()
window.geometry("100x100+1110+840")
window.wm_attributes("-topmost", True) # 창 맨 위에
font = tkinter.font.Font(size = 30)

label=tkinter.Label(window, font=font) 
label.pack()

label2=tkinter.Label(window, font=font) 
label2.pack()

mySec = 0
myMin = 0

def get_sec():
    global mySec
    nowNum = str(mySec)
    mySec = mySec + 1
    label.config(text=nowNum)
    window.after(1000,get_sec)
    if mySec == 60 :
        mySec = 0

def get_min():
    global myMin
    nowNum = str(myMin)
    myMin = myMin + 1
    label2.config(text=nowNum)
    window.after(60000,get_min)

get_sec()
get_min()

window.mainloop()

실시간 뉴스를 업데이트 하는 GUI 코딩을 하려면 어떻게 해야 하나요?
기존 GUI 코딩에다 웹 크롤링에서 실시간 뉴스를 가져오는 코딩을 편집합니다.
실시간 뉴스를 가져와 출력하는 위젯으로 Text를 사용합니다. wrap=‘word’로 자동 줄바꿈을 단어 기준으로 하고, font=("Arial", 20, 'bold')로 글꼴과 글자 크기를 정합니다.
실시간 뉴스를 업데이트 하는 단추에 실시간 뉴스 크롤링 하는 함수를 연결(매핑)합니다.

실시간 뉴스 업데이트 GUI 코딩

import tkinter as tk
import requests
from bs4 import BeautifulSoup

# tkinter 창 생성
window = tk.Tk()
window.title("실시간 뉴스")

# 뉴스 목록 레이블 생성
news_label = tk.Label(window, text="실시간 뉴스")
news_label.pack()
# 뉴스 목록 텍스트박스 생성
news_textbox = tk.Text(master=window, wrap='word', font=("Arial", 20, 'bold'))
news_textbox.pack()

def crawl_news(): # 뉴스 크롤링 함수
    # 구글 뉴스 URL 가져오기
    url = " https://news.google.com/home?hl=ko&gl=KR&ceid=KR:ko "
    response = requests.get(url) # 구글 뉴스 페이지 요청
    # 구글 뉴스 페이지를 BeautifulSoup으로 파싱
    soup = BeautifulSoup(response.content, "html.parser")
    # 뉴스 목록 가져오기
    news_list = soup.find_all("div", class_='KDoq1')
    # 뉴스 목록을 텍스트박스에 추가하기
    for news in news_list:
        news_textbox.insert('end', news.find("div").text)
        news_textbox.insert('end', '\n') # 줄바꾸기

# 뉴스 목록을 갱신하는 함수
def update_news():
    news_textbox.delete(1.0,'end') # 1행.0열부터 끝까지 삭제
    crawl_news() # 뉴스 크롤링 함수 호출
# 뉴스 목록을 갱신하는 버튼 생성
update_button = tk.Button(window, text="Update", command=update_news)
update_button.pack()
update_news() # 창이 실행되면서 먼저 뉴스 크롤링

window.mainloop() # tkinter 창 실행

메모장 같은 문서 편집 프로그램을 만글려면 어떻게 해야 하나요?
우선 텍스트 박스, 스크롤바, 메뉴 등을 만듭니다.
파일 메뉴에 새로 만들기, 열기, 저장, 다른 이름으로 저장, 종료 등의 메뉴를 만듭니다. 
도움말 메뉴에 메모장 정보 메뉴를 만듭니다.
각 메뉴에서 실행할 함수를 작성합니다.

스크롤바를 어떻게 만드나요?
세로 스크롤바를 창 오른쪽에 배치시킵니다.
scrollbar = Scrollbar(window)
scrollbar.pack(side=RIGHT, fill=Y)
텍스트박스에 세로 스크롤바로 앞에 만들어 놓은 스크롤바를 지정합니다.
textBox = Text(master=window, wrap='word', yscrollcommand=scrollbar.set)
스크롤바와 텍스트상자를 연결해 줍니다.
scrollbar.config(command=textBox.yview)

메모장 코딩 1
from tkinter import *
from tkinter.filedialog import *

def new_file():
    pass   
def open_file():
    pass
def save_as_file():
    pass
def save_file():
    pass
def maker():
    pass

window = Tk()
window.title("메모장")
window.geometry("800x600")

scrollbar = Scrollbar(window)
scrollbar.pack(side=RIGHT, fill=Y)

메뉴를 어떻게 만드나요?
Menu(window) 함수로 메뉴 위젯을 만듭니다. 여기서 window는 tkinter.Tk(), 즉 창을 매개변수로 넣어주어야 합니다. Window가 master인 셈입니다.
다음으로 상위 메뉴를 추가합니다. 앞에 만든 메뉴 위젯을 master로 하고 분리시킬 수 없도록 합니다.
myMenu = Menu(window)
fileMenu = Menu(myMenu, tearoff=0)
메뉴 위젯에 상위 메뉴에 대한 설정을 해줍니다. 상위 메뉴 이름 라벨를 ‘파일’로 하고, 만들어 둔 상위 메뉴 변수명을 메뉴 옵션에 연결시킵니다.
myMenu.add_cascade(label="파일", menu=fileMenu)
하위 메뉴를 추가합니다. 메뉴 라벨을 ‘새파일’로 하고, 이를 실행할 함수 이름을 command 옵션에 지정해 줍니다.
fileMenu.add_command(label="새파일", command=new_file)
필요하면 분리선을 넣어줍니다.
fileMenu.add_separator()
창의 환경 설정으로 메뉴 옵션에 만들어 놓은 메뉴 위젯을 연결합니다.
window.config(menu=myMenu)

메모장 코딩 2
myMenu = Menu(window)
fileMenu = Menu(myMenu, tearoff=0)
myMenu.add_cascade(label="파일", menu=fileMenu) 
fileMenu.add_command(label="새파일", command=new_file)
fileMenu.add_command(label="열기", command=open_file)
fileMenu.add_command(label="저장", command=save_file)
fileMenu.add_command(label="다른 이름으로 저장", command=save_as_file)
fileMenu.add_separator()
fileMenu.add_command(label="종료", command=window.destroy)

helpMenu = Menu(myMenu, tearoff=0)
myMenu.add_cascade(label="도움말", menu=helpMenu)
helpMenu.add_command(label="메모장 정보", command = maker)

텍스트박스를 어떻게 만드나요?
Text(master, 옵션) 함수로 텍스트박스 위젯을 만듭니다. 자동 줄바꿈 옵션으로 단어(word) 기준으로 줄을 바꾸게 하고, 폰트 옵션으로 글꼴을 지정해 줍니다.
textBox = Text(master=window, wrap='word', font=("Arial", 20, 'bold'), yscrollcommand=scrollbar.set)
위젯을 창에 배치하면서 옵션(속성)으로 왼쪽에 배치하도록 하고, 창 너비와 높이를 모두 채우게 하고, 창의 크기를 확대할 때 같이 커지도록 합니다.
textBox.pack(side=LEFT, fill=BOTH, expand=True)

메모장 코딩 3
textBox = Text(master=window, wrap='word', font=("Arial", 20, 'bold'), yscrollcommand=scrollbar.set)
textBox.pack(side=LEFT, fill=BOTH, expand=True)

# 스크롤바와 텍스트상자 연결
scrollbar.config(command=textBox.yview) window.config(menu=myMenu) # 창에 메뉴 연결

window.mainloop()

새파일 함수를 어떻게 만드나요?
Delete 함수로 텍스트박스에 있는 모든 내용을 삭제합니다.
textBox.delete(1.0,END)
1.0?
첫번째 줄, 첫번째 열을 뜻합니다. 즉 ‘문서 제일 처음부터’를 의미합니다.
END는?
텍스트 위젯의 특수 키워드로서, 문제 제일 끝까지를 의미합니다. 문자열로 ‘end’를 사용해도 됩니다.
def new_file():
    textBox.delete(1.0,END)

열기 함수를 어떻게 만드나요?
파일을 열 때도 우선 delete 함수로 텍스트박스에 있는 모든 내용을 삭제합니다.
textBox.delete(1.0,END)
Tkinter의 filedialog 라이브러리에 있는 askopenfilename 함수로 열기 대화상자를 띄웁니다. 이때 대화상자 제목을 ‘열기’로 정해줍니다. 이 대화상자에서 선택한 파일을 file_name 변수에 넣습니다.
file_name = askopenfilename(title="열기")
파일을 열 때 with as 구문(명령어)을 사용합니다. 그 이유는 읽어 들인 내용이 없어지지 않게 하고자 함인데, 안전하게 파일을 핸들링 하는 기법입니다.
파일을 open(파일이름, 모드) 함수를 통해 file_name 변수에 지정한 파일을 r 모드(읽기 모드)로 열어 객체로 만들어 변수 f에 넣습니다. 이렇게 안전하게 파일 내용을 유지한 상태에서 텍스트박스에 파일의 내용을 읽어 들여(read() 함수로) 텍스트박스 제일 첫 줄에 삽입합니다.
with open(file_name, "r") as f:
textBox.insert(1.0, f.read())
def open_file():
    textBox.delete(1.0,END)
    file_name = askopenfilename(title="열기")
    with open(file_name, "r") as f:
        textBox.insert(1.0, f.read())

저장 함수를 어떻게 만드나요?
파일을 열 때처럼, Tkinter의 filedialog 라이브러리에 있는 asksaveasfilename 함수로 ‘다른 이름으로 저장’ 대화상자를 띄웁니다. 이때 쓰기 모드로 하고, 기본 확장자를 ‘.txt’로 하며, filetypes 옵션으로 파일 형식과 확장자를 리스트에 튜플로 지정해 줍니다. filetypes 옵션은 대화상자의 파일 형식 목록단추에 표시됩니다. 이 대화상자에서 선택한 파일을 f 변수에 넣습니다.
f = asksaveasfile(mode = "w", defaultextension=".txt",filetypes=[('텍스트 파일', '.txt')])
파일 쓰기 함수인 write()에 텍스트박스의 처음부터 끝까지 모든 문자를 매개 변수로 넣어 저장합니다.
f.write(textBox.get(1.0, END)
def save_file():
    f = asksaveasfile(mode = "w", defaultextension=".txt", filetypes=[(‘텍스트 파일', '.txt')])
    f.write(textBox.get(1.0, END))
    f.close()

다른 이름으로 저장 함수는 왜 필요한가요?
저장 함수만 사용하면 늘 ‘다른 이름으로 저장’ 대화상자가 나오고, 다시 파일 이름을 만들거나 기존의 파일에 덮어씌우기를 해야 하는 불편함이 있습니다.
그래서 기존의 저장 함수를 다른 이름으로 저장 함수로 바꾸고
새로운 저장 함수엔, 만약 파일 이름이 있다면, 즉 열기 함수로 파일을 가져와 이미 파일 이름이 있다면, 그 파일 이름으로 저장하도록 하고
그렇지 않다면, 즉 파일 이름이 없다면, 그러니까 열기 함수로 파일을 가져오지 않았다면, 다른 이름으로 저장 함수를 실행시킵니다.
이를 위해 별도로 변수(openStatusFile)를 만들어 처음 프로그램 실행 때 기본값으로 변수값을 False로 정해주고, 열기 함수를 실행하여 파일 이름을 가지게 되면 이 변수에 그 파일 이름을 지정해 주어 변수값이 True가 되게 하고 만약 변수가 True라면 그 이름으로 저장을 하고, 파일을 연 적이 없어 파일 이름이 없어 변수값이 기본값대로 False라면 다른 이름으로 저장 함수를 실행합니다.
먼저 코딩 상단에 전역 변수로 선언해 줍니다. 전역 변수는 함수 외부에, 그러니까 함수보다 먼저 그 위에 선언해 줍니다.

from tkinter.filedialog import *
openStatusFile = False
def new_file():

전역 변수를 함수에서 사용하려면 global 키워드를 사용해야 합니다.

def open_file():
    textBox.delete(1.0,END)
    file_name = askopenfilename(title="열기")
    global openStatusFile
    openStatusFile = file_name

위 코딩의 경우, 열기 함수에서 openStatusFile 변수를 global 키워드로 가져와 사용하였고, 이 변수에 file_name 변수를 지정하여 값을 True로 만들고,
이 openStatusFile 변수를  다시 저장 함수에서 사용하여 파일 이름이 있는 경우에는 다시 다른 이름으로 저장 함수가 실행되지 않고, 그냥 그 이름으로 저장하도록 합니다.
이를 위해 if 문을 사용합니다. if 문은 조건이 참일 때만 실행됩니다. 열기 함수로 가져온 파일이 아닐 경우엔 다른 이름으로 저장 함수가 실행되도록 else 키워드를 사용합니다.

def save_file():
    global openStatusFile
    if openStatusFile:
        tf = open(openStatusFile, 'w')
        tf.write(textBox.get(1.0, END))
        tf.close()
    else:
        save_as_file()

메모장을 실행하고 그냥 저장한 경우엔 처음이라면 모르지만 왜 계속 다른 이름으로 저장 창이 뜨나요?
처음 다른 이름으로 저장할 때, openStatusFile 변수의 값을 바꾸어 주지 않았기 때문입니다. 이때 openStatusFile 변수의 값을 참(True)으로 해주면 저장 함수를 실행할 때 다른 이름으로 저장 대화상자를 띄우지 않고, 그 이름으로 그냥 저장해 줍니다.
 전역 변수로 가져온 openStatusFile 변수에 현재 파일의 이름을 넣어주려면, f.name 함수(메서드)를 사용해야 합니다. f.write가 파일 객체 f에 문자열을 저장하듯이, f.name은 파일 객체 f의 이름을 가져옵니다.

다른 이름으로 저장 함수 코딩 수정
def save_as_file():
    f = asksaveasfile(mode = "w", defaultextension=".txt",filetypes=[('텍스트 파일', '.txt')])
    f.write(textBox.get(1.0, END))
    global openStatusFile
    openStatusFile = f.name # 파일 이름 가져오기
    f.close()

열기를 한 후, 다시 새파일을 만들고 저장하면 왜 다른 이름으로 저장 창이 안 뜨나요?
열기 함수를 실행하면, openStatusFile 값이 참이므로, 새파일 함수를 실행하고 저장을 하면 그 값이 그대로 적용되어 다른 이름으로 저장하는 대화상자가 안 나타나고 그대로 기존 파일 이름으로 저장이 됩니다.
따라서 새파일 함수를 실행할 때 openStatusFile 값을 거짓으로 설정해 주어야 합니다.
def new_file():
    textBox.delete(1.0,END)
    global openStatusFile
    openStatusFile = False

창 처음 열리고 커서가 텍스트박스에 나타나게 하려면 어떻게 하나요?
textBox.focus_set()
window.mainloop() 바로 위에다 적어줍니다.
이렇게 안 하면 텍스트박스를 한 번 클릭해야 커서 나타나고 그런 연후에 입력 가능합니다.

파일을 열었을 때, 문서의 제일 끝을 보여주도록 하려면 어떻게 하나요?
textBox.yview(END)
open_file() 함수 제일 아래에 적어줍니다.

만든이 함수는 어떻게 만드나요?
Toplevel(window) 위젯을 사용합니다. 이 위젯을 사용하면 새로운 창을 만들 수 있습니다. 부모(parent) 창으로 window를 지정한 것입니다.
창 크기와 위치를 정하고, 제목으로 ‘메모장 정보’를 지정해 주고, 창에 ‘Memo.01’이라고 Label 위젯으로 적어줍니다.
def maker():
    help_view = Toplevel(window)
    help_view.geometry("300x50+300+300")
    help_view.title("메모장 정보")
    lb = Label(help_view, text = "Memo.01")
    lb.pack()

제목표시줄에 파일 이름을 표시하려면 어떻게 하나요?
제목표시줄에 제목을 표시하는 함수 window.title(문자)를 이용합니다.
우선 열기 함수에
window.title(file_name + ' - 메모장')
다른 이름으로 저장 함수에
window.title(f.name + ' - 메모장')
새파일 함수에
window.title('빈 문서 - 메모장')

저장하지 않고 그냥 종료를 할 경우 저장할지 묻는 창이 나오게 하려면 어떻게 하나요?
우선 필요한 메시지 창 라이브러리를 가져옵니다.
import tkinter.messagebox as msgbox
종료 함수를 만듭니다.
종료 메뉴와 창 닫기 단추를 눌렀을 때, 종료 함수가 실행되도록 연결(Binding)시켜 줍니다.

종료 함수를 만들려면 어떻게 하나요?
우선 텍스트 수정 여부 체크용으로 블린 변수를 만들고 기본값으로 False를 셋(설정)합니다. window.geometry("800x600") 아래에 다음과 같이 작성합니다.
text_modified = BooleanVar()
text_modified.set(False)
텍스트 상자에 자판을 사용하여 입력하게 되면, text_modified의 값을 True로 바꾸는 함수가 실행되도록 합니다.
textBox.pack(side=LEFT, fill=BOTH, expand=True)
아래에 다음과 같이 입력합니다.
textBox.bind("<Key>", on_text_modified)
"<Key>” 이벤트는 텍스트 상자에 자판으로 입력하는 이벤트를 말합니다.
on_text_modified 함수는 close_event 함수 아래에 다음과 같이 작성합니다.
def on_text_modified(event):
    text_modified.set(True)
예 단추를 누르면 저장 함수가 실행되도록 하고, 아니오 단추를 누르면 그냥 창을 닫도록 합니다. 다음 슬라이드와 같이 코딩합니다.

def close_event():
    if text_modified.get():
        answer = msgbox.askquestion("저장했나요", "저장하길 원하나요?")
        if answer == msgbox.YES:
            save_file()
        else:
            window.destroy()
    else:
       window.destroy()

Get() 함수는 text_modified 변수의 블린 값을 가져오는 함수입니다.

종료 메뉴를 눌렀을 때, 종료 함수가 실행되도록 하려면 어떻게 하나요?
종료 함수(close_event)를 command 옵션으로 지정합니다.
fileMenu.add_command(label="종료", command=close_event)

창 닫기 단추를 눌렀을 때, 종료 함수가 실행되도록 하려면 어떻게 하나요?
종료 함수(close_event)를 메인 창의 닫기 단추에 연결(biding)하려면, protocol() 함수를 사용합니다. protocol() 함수는 창에 대한 프로토콜을 설정하는 데 사용됩니다. 프로토콜은 창에서 발생하는 이벤트를 처리하는 데 사용되는 규칙 세트입니다. Protocol(프로토콜 이름, 연결할 함수 이름) WM_DELETE_WINDOW는 Tkinter에서 창을 닫는 데 사용되는 프로토콜입니다.
window.protocol("WM_DELETE_WINDOW", close_event)

문서를 열거나 저장할 때 단추키를 사용하려면 어떻게 하나요?
bind() 함수를 사용하여 단축키를 설정합니다.
window.bind("<Control-o>", key_open_file)
window.bind("<Control-s>", key_save_file)
단축키와 연결한 함수 key_open_file와, key_save_file을 작성합니다.
def key_open_file(o):
    if o:
        open_file()
def key_save_file(s):
    if s:
        save_file()

기존에 있던 open_file 함수나 save_file 함수를 사용하지 않고, 왜 따로 key_open_file 함수와 key_save_file 함수를 만드나요?
bind() 함수에서 단축키로 사용하는 함수는 함수를 만들 때 매개변수를 넣어주어야 키값을 매개할 수 있기 때문입니다. 단축키를 눌렀다면(if s:) 저장하거나 열거나 할 수 있도록 코딩해주어야 합니다.
메뉴에서 

파일 이름을 미리 정해놓고 그 이름으로 저장하며, 미리 날짜와 시간이 적혀 있는 메모장을 만들려면 어떻게 하나요?
날짜와 시간 정보를 가져오기 위해 datetime 라이브러리를 임포트합니다.
from tkinter import *
import datetime
날짜와 시간을 가져오기 위해 now() 함수로 현재 날짜와 시간을 가져오고 strftime() 함수로 지정한 형식의 문자열로 바꾸어 줍니다.
t = datetime.datetime.now().strftime("%y/%m/%e %H:%M")
%Y: 연도 (4자리), %y: 연도 (2자리), %d: 일 (01 ~ 31), %e: 일 (1 ~ 31), %H: 시간 (24시간), %I: 시간 (12시간)
미리 파일 이름을 정해둡니다.
myFile = 'my2023Meno.txt'
파일 저장 함수를 만듭니다.
def save_file():
    global myFile
    # utf-8 인코딩으로 추가하여 저장
    f = open(myFile,'a', encoding="utf-8")
    f.write(textBox.get(1.0, END))
    f.close()
    window.destroy() # 저장 후 창 닫기

기본적인 창과 텍스트 위젯을 만듭니다.
window = Tk()
window.title("메모장")
window.geometry("900x100+50+800")
# 창 크기와 위치
textBox = Text(master=window, wrap='word', font=("Arial", 20, 'bold'))
textBox.pack(fill=BOTH, expand=True)
textBox.focus_set()
textBox.insert(END, t) # 날짜 시간을 제일 끝에 넣기
extBox.insert(END, ' - ') # 옆줄 넣기
save_file 함수를 메인 창 닫기 단추에 연결(biding)
window.protocol("WM_DELETE_WINDOW", save_file)
window.mainloop()

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 2 기본 활용  (0) 2023.08.19
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 2  (0) 2023.08.18
Posted by 오미자컴
,

웹 크롤링이란 뭔가요?
웹 스크래핑이라고도 하는 웹 크롤링은 웹 사이트에서 데이터에 액세스하고 데이터를 추출하여 웹에서 정보를 수집하는 자동화된 프로세스입니다. 
여기에는 웹 크롤러 또는 스파이더라고 하는 소프트웨어를 사용하여 웹을 탐색하고 웹 페이지에서 정보를 검색하는 작업이 포함됩니다. 
이 정보는 연구, 데이터 분석 또는 콘텐츠 집계와 같은 다양한 목적으로 사용될 수 있습니다. 

웹 크롤링을 하려면 어떻게 해야 하나요?
Python으로 웹을 크롤링하려면 Beautiful Soup, Scrapy 및 Selenium과 같은 다양한 라이브러리를 사용할 수 있습니다. 

Beautiful Soup을 사용하여 웹 크롤링을 하려면 어떻게 해야 하나요?
Beautiful Soup 및 요청 모듈 설치: 웹 크롤링을 시작하기 전에 Python 환경에서 pip를 사용하여 Beautiful Soup 및 요청 모듈을 설치해야 합니다.
웹사이트에 요청 보내기: 요청 모듈을 사용하여 크롤링하려는 웹사이트에 요청을 보냅니다. 그러면 웹 페이지의 HTML 콘텐츠가 검색됩니다.
HTML 콘텐츠 구문 분석: Beautiful Soup을 사용하여 웹 페이지의 HTML 콘텐츠를 구문 분석합니다. 이렇게 하면 웹 페이지에서 관련 데이터를 추출할 수 있습니다.
웹 페이지에서 데이터 추출: 뷰티플수프를 사용하여 웹 페이지에서 필요한 데이터를 추출합니다. 이는 관심 있는 데이터가 포함된 HTML 태그 및 특성을 식별하여 수행할 수 있습니다.
추출된 데이터 저장: 추출된 데이터를 CSV 또는 JSON 파일과 같이 분석에 쉽게 사용할 수 있는 형식으로 저장합니다.

웹 크롤링 하는 대표적인 예제
https://www.example.com/articles 에 요청을 보내고 Beautiful Soup을 사용하여 HTML 콘텐츠를 구문 분석하고 웹페이지의 모든 기사 제목을 추출합니다. 그런 다음 제목을 출력합니다.

import requests
from bs4 import BeautifulSoup

# request(요청)을 웹 사이트에 보냄
url = 'https://www.example.com/articles'
response = requests.get(url)
# HTML 콘텐츠로 가져옴
soup = BeautifulSoup(response.content, 'html.parser')
# 원하는 데이터를 추출함
articles = soup.find_all('div', class_='article')
# 데이터를 출력
for article in articles:
    title = article.find('h2').text.strip()
    print(title)

일상 생활 정보를 크롤링 하려면 어떻게 해야 하나요?
환율, 날씨, 뉴스 등을 크롤링 하는 함수를 만들고 이 함수를 실행하여 정보를 가져옵니다.

달러 환율을 크롤링 하는 함수를 만들려면 어떻게 해야 하나요?
getRate(t1, t2) : 함수 이름을getRate로 하고 인수를 2개 넣습니다.
헤더를 추가합니다. 아무런 헤더 없이 접속하면 로봇이 접속한 것으로 보여 사이트에서 정보를 내주지 않을 수 있습니다. 접속하는 브라우저의 정보를 헤더로 전달해줍니다. headers = { 'User-Agent': 'Mozilla/5.0', 'Content-Type': 'text/html; charset=utf-8' }
requests.get() 함수를 사용하여 구글 환율 정보 사이트에 접속하여, 매개인수를 이용하여 1달러에 대한 원화 환율 정보 페이지를 가져옵니다. response = requests.get("https://www.google.com/finance/quote/{}-{}".format(t1, t2), headers=headers)
달러에 대한 원화 환율 정보 페이지  구글 검색 : 구글 금융. 상단 메뉴 중 ‘통화’ 클릭. 바로 아래 단추 중 ‘USD/KRW’를 클릭.
날씨 정보 페이지 네이버 검색 : 군포 날씨 groom IDE에선 url을 ‘ https://search.naver.com/search.naver?query=군포+날씨 ’로 해야 합니다.
실시간 뉴스 페이지 : 네이버 페이지 상단 메뉴 중 ‘뉴스’, 다시 ‘IT/과학’ 메뉴 클릭. 
BeautifulSoup() 함수를 이용하여 사이트의 정보를 html 형태로 바꿉니다.

content = BeautifulSoup(response.content, 'html.parser')
환율 정보를 찾습니다.

containers = content.find('div', {'class': 'YMlKec fxKbKc'})    # 웹페이지에서 해당 항목에 마우스 위치시키고 우클릭, '검사'.
환율 정보를 출력합니다.

print(f"1달러 환율 : {containers.text}원")
get_exchange_rate() 함수를 실행합니다.

get_exchange_rate('usd', 'krw')

생활 정보 크롤링 코딩
import requests
from bs4 import BeautifulSoup 

def getRate(t1, t2):
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'text/html; charset=utf-8'
    }
    response = requests.get("https://www.google.com/finance/quote/{}-{}".format(t1, t2), headers=headers)
    content = BeautifulSoup(response.content, 'html.parser')
    containers = content.find('div', {'class': 'YMlKec fxKbKc'})
    print(f"달러 환율 : {containers.text}원")

getRate('usd', 'krw')

def get_weather() :
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'text/html; charset=utf-8'
    }
    response1 = requests.get(" https://search.naver.com/search.naver?query=%EA%B5%B0%ED%8F%AC+%EB%82%A0%EC%94%A8%22 ", headers=headers)
    content1 = BeautifulSoup(response1.content, 'html.parser')
    containers1 = content1.find('div', {'class': 'temperature_text'})
    containers1.find('span').decompose()
    print(f"현재 기온 :{containers1.text}")  
    content2 = BeautifulSoup(response1.content, 'html.parser')
    containers2 = content2.find('div', {'class': 'temperature_info'})
    print(f"날씨 정보 :{containers2.text}")
    content3 = BeautifulSoup(response1.content, 'html.parser')
    containers3 = content3.find('div', {'class': 'report_card_wrap'})
    print(f"기타 날씨 정보 :{containers3.text}")

get_weather()

def get_news():
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'text/html; charset=utf-8'
    }
    response2 = requests.get(" https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105 ", headers=headers)
    content4 = BeautifulSoup(response2.content, 'html.parser')
    containers4 = content4.find('div', {'class': 'classfy sd'})
    print(f"실시간 뉴스 : {containers4.text}")

get_news()

뉴욕타임즈 사이트 실시간 뉴스를 크롤링 하고 이를 번역하려면 어떻게 해야 하나요?
우선 googletrans 라이브러리를 추가로 임포트합니다.  물론 터미널에서 pip install googletrans==4.0.0-rc1
New York Times 주요 기사 페이지를 url 변수에 넣습니다. 
New York Times 주요 기사 페이지 구글 검색 : New York Times. 최상단 메뉴 중 ‘U.S.’ 클릭 후, 다시 상단 메뉴에서 ‘World’ 클릭.
url =https://www.nytimes.com/section/worldresponse = requests.get(url)
BeautifulSoup() 함수를 이용하여 사이트의 정보를 html 형태로 바꿉니다.

content = BeautifulSoup(response.content, 'html.parser')
기사 정보를 모두 찾습니다.

articles = soup.find_all('div', class_ = 'css-10wtrbd')    # 웹페이지에서 해당 항목에 마우스 위치시키고 우클릭, '검사'. css-10wtrbd를 더블클릭하여 복사합니다.
구글 번역기를 변수로 가져옵니다.

tr = googletrans.Translator()
For 반복문을 사용하여 기사 정보를 하나씩 프린트합니다.

for article in articles:
    title = article.text # html 중 글자(text)만 가져옴
    translation = tr.translate(title, dest="ko")     # 가져온 영어 기사를 한국어로 번역
    print(f"{translation.text}\n")
    # 번역한 내용 중 기사 부분(문자)만 가져와 프린트하고 줄을 바꿉니다.

뉴욕타임즈 실시간 뉴스 크롤링 코딩
import requests
import bs4
import googletrans

url = "https://www.nytimes.com/section/world"
response = requests.get(url)
soup = bs4.BeautifulSoup(response.content, "html.parser")
articles = soup.find_all('div', class_ = 'css-10wtrbd')
tr = googletrans.Translator()
for article in articles:
    title = article.text     
    translation = tr.translate(title, dest="ko")
    print(f"{translation.text}\n")

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 5 GUI  (3) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 2 기본 활용  (0) 2023.08.19
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 2  (0) 2023.08.18
Posted by 오미자컴
,

VS Code로 코딩하려면 어떻게 하나요?
구글 검색 : vs code
Download for Windows Stable Build 단추 클릭.
다운로드 폴더에서 VSCodeUserSetup-x64-1.81.1 파일을 실행합니다.
동의 합니다. 선택 후 다음. 설치 위치 선택 창에서 다음. 시작 메뉴 폴더 선택 창에서 다음. 추가 작업 선택 창에서 ‘바탕 화면에 바로가기 만들기’ 선택 후 다음. 설치 단추 클릭. 설치 후 종료 단추 클릭
‘언어 팩을 설치하여 표시 언어를 한국어로 변경합니다’ 알림 창에서 ‘설치 및 다시 시작’
실행 후 시작 탭에서 ‘폴더 열기’ 메뉴 클릭. 다운로드 폴더에 Vstest 폴더를 만들고 ‘폴더 선택’
‘이 폴더에 있는 파일의 작성자를 신뢰합니까’ 창에서 ‘부모 폴더’ 체크 후 ‘예, 작성자를 신뢰합니다’
시작 탭에서 ‘새 파일’ 메뉴 클릭. 열린 입력 창에 test.py 입력 후 엔터. 열린 창에서 ‘파일 생성’.
‘Python 언어에 대한 권장되는 Microsoft의 ‘Python’ 확장을 설치하시겠습니까?’를 묻는 알림 창에서 ‘설치’
창 왼쪽 아래 [관리(톱니 바퀴 아이콘) – 설정(Ctrl+,)]. Editor : Font Size – 20. Editor : Word Wrap – on.
에디터 창 오른쪽 위에 삼각형 모양의 실행(재생) 아이콘이 안 보이면, 왼쪽 창에서 ‘실행 및 디버그’ 클릭 후 다시 ‘실행 및 디버그’  단추 누르고 파이썬 선택.

천자문을 하루에 16자씩 공부하는 코딩을 하려면 어떻게 하나요?
한 줄에 4자씩 작업한 c1000.txt 파일을 유니코드 형식으로 불러와 c1000 리스트에 하나씩 넣습니다.
제일 처음에 공부할 때 숫자 1을 입력하여 날짜 파일 myDate.txt와 인덱스 파일 myIndex.txt를 만듭니다. 언제든 공부를 시작할 때 숫자 1을 입력하면 기존의 파일 내용이 삭제되고 처음부터 다시 작성됩니다.
Study 함수를 만들어 오늘 공부, 어제 공부, 지난주 공부를 할 수 있도록 합니다.
날짜 파일 myDate.txt를 불러와 myDate 리스트에 한 줄씩 넣습니다. 그리고 오늘 데이터도 하나 넣습니다.
마찬가지로 인덱스 파일 myIndex.txt를 불러와 myIndex 리스트에 한 줄씩 넣습니다.
이렇게 작성한 myDate 리스트와 myIndex 리스트는 리스트의 길이를 반환하는 len() 함수를 활용하여 어제 공부와, 지난주 공부를 할 수 있는 기준으로 활용합니다.
오늘 공부 후에 myDate.txt 파일과 myIndex.txt 파일에 데이터를 기록합니다. 공부 이력을 기록하는 것입니다.
myDate의 길이가 1보다 크면 어제 공부를 하도록 합니다. 또 myDate의 길이가 5보다 크면 지난주 공부를 하도록 합니다.

한 줄에 4자씩 작업한 c1000.txt 파일을 유니코드 형식으로 불러와 c1000 리스트에 하나씩 넣으려면 어떻게 하나요?
영단어 공부 코딩처럼 for 문을 통해 한 줄씩 불러옵니다.
# -*- coding: utf-8 -*-
c1000 = []
result_f = open("c1000.txt", encoding='UTF8')
for line in result_f:
    c1000.append(line)
result_f.close()
유니코드로 불러오려면 encoding=‘UTF8’ 인수를 줘야 합니다.

숫자 1을 입력하여 날짜 파일 myDate.txt와 인덱스 파일 myIndex.txt를 만들려면 어떻게 하나요?
Input 함수를 통해 숫자를 입력할 수 있게 합니다.
g = input('제일 처음부터 공부하려면 숫자 1을 치세요~ 이어서 공부하려면 그냥 엔터~')
파일들을 ‘쓰기’ 옵션으로 엽니다. 이렇게 하면 만약 파일이 없으면 새로 만들고, 기존에 데이터가 있던 것을 다 삭제됩니다. 그래서 파일을 초기화 하는 용도로도 사용합니다.
if g == '1':
    f = open('myDate.txt','w')
    f.close()
    a = open('myIndex.txt','w')
    a.close()

Study 함수를 어떻게 만드나요?
우선 인수로 ment와 number를 넣고 오늘 공부, 어제 공부, 지난주 공부 등을 출력합니다.
def study(ment,number):
    print(f'{ment} ' + '공부~')
공부할 한자 리스트를 출력하기 위해 필요한 연산을 합니다. 4줄을 반복하여 출력합니다.
    count = 0
    for i in range(4):
        myStdNum = (count + len(myIndex) + len(myDate)) – number
        print(c1000[myStdNum])
        input('엔터를 치세요~')
        count += 1
4번 번복하려고, for i in range(4):
카운트 숫자를 증가하여 그 다음 줄을 리스트에서 출력합니다.
count = 0
myStdNum = (count + len(myIndex) + len(myDate)) – number
count += 1

 

오늘 공부할 한자 리스트를 출력하기 위해 필요한 연산을 어떻게 하나요?
제일 첫 줄을 출력하려면, myStdNum이 0이 되어야 합니다. (Count 0 + len(myIndex) 0 + len(myDate) 1) – number 1이 되어야 합니다. myIndex엔 아직 아무런 데이터도 없으므로 0, myDate 리스트에 1을 추가했으므로 1, number는 함수 인수로 넘어온 수.
오늘 공부 함수를 사용하려면?
study('오늘',1)

myDate 리스트와 myIndex 리스트를 어떻게 만드나요?
해당 파일을 불러와 한 줄씩 리스트에 추가합니다.
myDate = []
result_myDate = open("myDate.txt")
for line in result_myDate:
    myDate.append(line)
result_myDate.close()
myDate.append(1)
myIndex = []
result_myIndex = open("myIndex.txt")
for line in result_myIndex:
    myIndex.append(line)
result_myIndex.close()
오늘 날짜 데이터를 리스트에 추가해야 하므로, myDate.append(1)
이렇게 파일에서 데이터를 가져와 리스트에 추가하면 공부한 이력을 저장하는 것입니다. 이를 기준으로 어제 공부한 위치로 갈 수 있고, 지난주 공부한 위치로도 갈 수 있습니다.

오늘 공부 후에 myDate.txt 파일과 myIndex.txt 파일에 데이터를 어떻게 기록하나요?
‘추가’ 옵션으로 파일을 열고 데이터를 추가합니다.
dateWrite = open('myDate.txt', 'a')
dateWrite.write('1 \n')
dateWrite.close()
indexWrite = open('myIndex.txt', 'a')
indexWrite.write('1 \n')
indexWrite.write('2 \n')
indexWrite.write('3 \n')
indexWrite.close()
날짜 데이터는 숫자 1을 하나 입력하고 줄빠꿈 기호를 넣어줍니다.
이 날자 데이터 하나에 인덱스 데이터 셋을 더하여 총 4개를 공부할 총 줄 수로 정하는 것입니다. 따라서 인덱스 데이터를 3개를 추가합니다. 편의상 1, 2, 3으로 하였습니다.

myDate의 길이가 1보다 크면 어제 공부를 하도록 합니다. 또 myDate의 길이가 5보다 크면 지난주 공부를 하도록 하려면 어떻게 하나요?
If 문을 통해 myDate의 길이가 1보다 크면 어제 공부 함수를 실행하고, myDate의 길이가 5보다 크면 어제 공부 함수를 실행하도록 합니다.
if len(myDate) > 1:
    study('어제', 5)
if len(myDate) > 5:
    study('지난주', 21)
어제 공부의 number 인수는 왜 5인가요?
처음부터 공부했다고 가정하고 둘째 날이면, 어제 공부는 다시 첫 줄이니까 0번째 리스트를 출력해야 합니다. (카운트 0 + 날짜 길이 2 + 인덱스 3) – 5를 해야 답이 0이 나오므로, number 인수를 5로 한 것입니다.
첫 날에서 그 다음주가 되어, 지난주 공부를 하려면 날짜는 6(여섯 째 날)이 되어야 합니다. 1주에 5번 공부하는 것으로 한 것입니다. 그러면 인덱스는 둘째 날 3이므로 여섯 째 날은 3 X 5이므로 15입니다. (카운트 0 + 날짜 길이 6 + 인덱스 15) – 21를 해야 답이 0이 나오므로, number 인수를 21로 한 것입니다.

겹치고 반복되는 코딩이 있는데 이를 함수로 만들려면 어떻게 하나요?
겹치고 반복되는 내용이 아닌 것을 인수로 처리합니다.
myDate = []
myIndex = []

def c1000List(cFile, cName):
    result_cName = open(cFile)
    for line in result_cName:
        cName.append(line)
    result_cName.close()

c1000List("myDate.txt", myDate)
myDate.append(1)
c1000List("myIndex.txt", myIndex)

def c1000Write(cWriteFile, cData):
    cWrite = open(cWriteFile,'a')
    cWrite.write(cData)
    cWrite.close()

c1000Write('myDate.txt','1 \n')
c1000Write('myIndex.txt','1 \n')
c1000Write('myIndex.txt','2 \n')
c1000Write('myIndex.txt','3 \n')

 

QR코드를 만드는 코딩을 어떻게 하나요?
우선 qrcode와 pillow를 설치합니다(구름IDE에선 pillow를 설치하지 않아도 됩니다). qrcode 라이브러리를 가져옵니다. Pillow 모듈은 qrcode의 이미지처리에 필요합니다.
인터넷 주소를 한 줄씩 작성한 텍스트 파일을 불러와 한 줄씩 리스트에 저장합니다.
한 줄씩 qr코드로 만들고 이를 이미지 파일로 저장합니다. 

QR코드란 뭔가요?
문자를 네모난 모양으로 배치합니다. 한글의 경우 약 1700자를 저장할 수 있습니다.
주로 인터넷 주소(URL)를 qr코드 이미지로 만들어 이를 스캔하면 해당 주소로 접속하도록 할 때 많이 사용합니다.


URL 주소가 있는 파일을 불러와 한 줄 한 줄 QR 코드 이미지로 만들려면 어떻게 하나요?
우선 qrcode 라이브러리를 불러옵니다.
Import qrcode
With키워드로 텍스트 파일을 열고, For 문을 사용하여 텍스트 파일을 한 줄씩 읽어 들여 리스트에 저장합니다.
with open('urls.txt', 'r') as f: 
# ‘r’은 urls.txt를 읽기 모드로 엽니다.
    for url in f:
url 주소에서 줄바꿈 기호(\n)를 제거합니다
        url = url.strip()
URL 주소를 QR 코드로 생성합니다.
        qr = qrcode.make(url)
URL 주소에서 www와 com 등을 제거합니다.
        site_name = url.replace('https://', '').replace('www.', '').replace('.com', '').replace('.net', '')
QR 코드를 이미지로 저장합니다.
        qr.save(f'{site_name}.png')


텍스트 파일을 음성 파일로 저장하고 읽어주려면 어떻게 하나요?
구글의 TTS 라이브러리를 이용합니다.
구글의 TTS 라이브러리는 텍스트를 음성으로 읽어줍니다.
Playsound 라이브러리를 이용해 음성 파일을 재생합니다. 이 라이브러리는 내 PC 환경에서 가능하고, 구름 IDE에서는 이 부분 빼고, mp3 파일만 저장합니다.
텍스트 파일을 열어 텍스트 모드로 읽어 들여 변수에 저장합니다.
텍스트를 읽어 들인 변수를 음성 파일로 저장하고 재생합니다.

구글의 TTS와 playsound 라이브러리를 가져오려면 어떻게 하나요?
먼저 터미널 창에서
pip install gtts
pip install playsound(구름 IDE에선 제외)
코딩 창에서
from gtts import gTTS
from playsound import playsound
import os
왜 os 라이브러리도 가져오나요?
Playsound를 현재 경로에서 실행할 때 필요합니다.

Playsound를 현재 경로에서 실행하려면 어떻게 하나요?
우선 현재 경로로 이동합니다.
os.chdir(os.path.dirname(os.path.abspath(__file__)))
Playsound 함수를 통해 mp3 파일을 재생합니다.
playsound("myPoem1.mp3")

텍스트 파일을 열어 텍스트 모드로 읽어 들여 변수에 저장하려면 어떻게 하나요?
우선 텍스트 파일을 UTF8 인코딩으로 열어 f 변수에 할당하고, 이를 read 함수로 읽어 들여 readFile 변수에 바인딩합니다.
with open('poem1.txt', encoding='UTF8') as f :
    readFile = f.read() 
With 키워드를 사용하면 파일을 열고 나서 다시 닫지 않아도 알아서 처리해 주어 편리합니다.

텍스트를 읽어 들인 변수를 음성 파일로 저장하려면 어떻게 하나요?
우선 gTTS함수를 사용하여 텍스트를 음성으로 변환하여 tts 변수에 할당합니다.
tts = gTTS(text=readFile, lang='ko')
텍스트를 지정하고, 언어를 한국어로 정해줍니다.
Save함수를 통해 mp3 파일로 저장합니다.
tts.save("myPoem1.mp3")

 

내 컴퓨터의 정보를 알아보려면 어떻게 하나요?
우선 platform, socket 라이브러리를 불러옵니다.
그리고 psutil을 설치하고 가져와 활용합니다.
platform 라이브러리의 함수로 컴퓨터 이름, 운영체제, CPU 정보 등을 알아냅니다.
socket 라이브러리를 통해 IP 주소를 얻습니다.
psutil 라이브러리의 함수들을 활용하여 다음과 같은 정보를 가져옵니다.
cpu_freq() 함수로 cpu 속도를 알아봅니다.
cpu_count() 함수로 cpu 개수를 알아봅니다.
virtual_memory() 함수로 메모리 크기를 알아봅니다.
net_io_counters() 함수로 네트워크 보내고 받는 데이터 크기를 알아봅니다.
disk_partitions() 함수로 디스크 크기 등을 알아봅니다.

platform 라이브러리의 함수로 컴퓨터 이름, 운영체제, CPU 정보 등을 알아보려면 어떻게 하나요?
컴퓨터 이름에 대한 정보를 가져오려면 node 함수를 사용합니다.
Computer_name = platform.node()
운영 체제 이름을 얻으려면 system 함수, 운영 체제 버전을 알려면 release 함수를 씁니다.
os_name = platform.system()
os_release = platform.release()
CPU 정보를 얻으려면 processor 함수를 사용합니다.
Processor = platform.processor()
IP 주소를 알려면 socket 라이브러리의 gethostbyname 함수와 gethostname 함수를 사용합니다.
Ip_address = socket.gethostbyname(socket.gethostname())

print(f"컴퓨터 이름: {computer_name}")
print(f"운영체제: {os_name} {os_release}")
print(f"CPU 정보: {processor}")
print(f"IP 주소: {ip_address}")

cpu_freq() 함수로 cpu 주파수(속도)를 알아보려면 어떻게 하나요?
import psutil
my_cpu = psutil.cpu_freq()
cpu_freq_current = round(my_cpu.current / 1000, 2) 
Current 속성은 뭔가요?
현재 cpu 속도입니다.
current가 메가 헤르츠로 출력되므로, 이를 1000으로 나누면 기가 헤르츠.
소수점 2자리까지 반올림
print(f"cpu 주파수: {cpu_freq_current}GHz")

 

cpu_count() 함수로 cpu 개수를 알아보려면 어떻게 하나요?
cpu_core = psutil.cpu_count(logical=False)

print(f"코어: {cpu_core} 개"  )
물리적인 개수만 표시합니다.

virtual_memory() 함수로 메모리 크기를 알아보려면 어떻게 하나요?
my_memory = psutil.virtual_memory()
print(f'메모리 크기: {round(my_memory/(1024**3))}GB')
3제곱
1024는 키로바이트, 1024를 두 번 곱하면(제곱) 메가바이트, 3제곱은 기가.

net_io_counters() 함수로 네트워크 보내고 받는 데이터 크기를 알아보려면 어떻게 하나요?
my_net_io = psutil.net_io_counters()
sent = round(my_net_io.bytes_sent/1024**2, 1) 
# 소수점 이하 한 자리까지
recieved = round(my_net_io.bytes_recv/1024**2, 1)
print(f'네트워크 보내는 양: {sent}MB   네트워크 받는 양: {recieved}MB')

disk_partitions() 함수로 디스크 크기 등을 알아보려면 어떻게 하나요?
my_disk = psutil.disk_partitions() 
이 함수는 리스트를 반환합니다.
print(my_disk[0].mountpoint, my_disk[0].fstype, end=' ')
my_disk_usage = psutil.disk_usage(my_disk[0].mountpoint)
print(f'하드디스크: {round(my_disk_usage.total / 1024**3)}GB' )
Mountpoint 속성은?
디스크 문자나 경로를 표시합니다.
Fstype 속성은?
디스크의 파일시스템을 표시합니다.
Print 함수에서 end=‘ ’ 옵션은?
Print 함수 출력문들 사이는 기본적으로 한 칸을 띄어쓰기 합니다. 그리고 기본적으로 줄바꿈을 하도록 되어 있는데, 이를 없애는 옵션이 end입니다. end=‘ ’ 이렇게 하면 한 칸 띄어쓰기를 하고 그 다음 print 문을 같은 줄에 출력합니다.

 

ip 주소 등을 알아보려면 어떻게 하나요?

우선 psutil을 설치하고 가져와 활용합니다.
Socket 라이브러리와 psutil 라이브러리를 가져와 활용합니다.
Psutil 라이브러리의 net_if_addrs() 함수를 통해 랜카드 정보를 가져옵니다.
getNicInfo 함수를 만들고, 인수로 랜카드 이름이 eth0인 것의 정보를 차례차례 가져와 그 중에 AddressFamily.AF_INET의 정보 중 ip 주소, 넷마스크 주소, 브로드캐스트 주소 등을 출력하도록 합니다.
소켓?
네트워크를 통해 데이터를 주고 받는 창구 역할
AddressFamily.AF_INET는? 
소켓이 통신할 때 필요한 주소 유형입니다. 통신의 안전을 위해, 보통 소켓에서 정한 패밀리끼리만 서로 통신할 수 있도록 했습니다. 그리고 이 주소 유형은 인터넷이 만들어질 때 처음부터 사용하던 유형입니다. 더 발전한 유형은 AF_INET6입니다.
Ip 주소?
컴퓨터에 부여된 네트워크 주소
넷마스크 주소?
서브넷 마스크라고 하는데, 네트워크를 나누어 구분하고자 할 때 사용하는 주소
브로드캐스트 주소?
네트워크 모두에 데이터 보낼 수 있는 주소

Psutil 라이브러리의 net_if_addrs() 함수를 통해 랜카드 정보를 가져오려면 어떻게 하나요?
우선 라이브러리를 가져오고 getNicInfo 함수를 만들고, 인수로 랜카드 이름이 eth0인 것의 정보를 차례차례 가져와 그 중에 AddressFamily.AF_INET의 정보 중 ip 주소, 넷마스크 주소, 브로드캐스트 주소 등을 출력하도록 합니다.

import socket
import psutil

def getNicInfo(nicName=''):
    addrs = psutil.net_if_addrs()
    if nicName in addrs:
        for nicInfo in addrs[nicName]:
            if nicInfo.family == ocket.AddressFamily.AF_INET:
                print(f'IP 주소 : {nicInfo.address}  넷마스크 주소 : {nicInfo.netmask}  브로드캐스트 주소 : {nicInfo.broadcast}')

getNicInfo(nicName="eth0")

psutil.net_if_addrs()는 무슨 함수인가요?
랜카드 정보를 딕셔너니 형태로 보여주는 함수입니다.
key가 랜카드 이름이고 값이 랜카드에 할당된 주소를 딕셔너리로 출력해줍니다. 이때 값을 튜플로 묶은 리스트로 출력합니다. a = { 'a': [1,2,3]}
키와 값을 튜플로 묶을 때 다음과 같이 합니다.
family : address family
address : 기본 랜카드 주소
netmask : netmask 주소
broadcast : broadcast 주소
ptp : 포인트 투 포인트 주소(일반적으로 VPN)
참고 : 튜플 – 한 쌍의 목록, 예) 무지개. 괄호로 묶음. 딕셔너리 – 키 = 값 형태를 집합 기호로 묶음. 리스트 – 대괄호로 묶음.

VPN이란 뭔가요?
VPN(가상 사설망)은 인터넷을 통해 안전하고 암호화된 연결을 제공하는 기술입니다. 공용 또는 보안되지 않은 네트워크를 사용하는 경우에도 사설 네트워크를 사용하는 것처럼 인터넷에 액세스할 수 있습니다.
VPN을 사용하면 모든 인터넷 트래픽이 암호화된 터널을 통해 라우팅되어 해커나 인터넷 서비스 공급자와 같은 다른 사람이 온라인 활동을 모니터링하거나 가로채는 것을 방지합니다. 따라서 공용 Wi-Fi를 사용하거나 원격 위치에서 인터넷에 연결할 때 VPN이 특히 유용합니다.
VPN을 사용하면 사용자 위치에서 차단되거나 제한될 수 있는 웹사이트 및 온라인 서비스에 액세스할 수 있습니다. 예를 들어 인터넷 검열이 엄격한 국가를 여행하는 경우 VPN을 사용하여 다른 방법으로는 사용할 수 없는 콘텐츠에 액세스할 수 있습니다.
요약하면 VPN은 인터넷을 통해 안전하고 암호화된 연결을 제공하고 온라인 개인 정보 및 보안을 보호하여 전 세계 어디에서나 원하는 콘텐츠에 액세스할 수 있도록 합니다.

for nicInfo in addrs[nicName]:는 무슨 뜻인가요?
랜카드 정보 중에서 eth0의 리스트를 하나씩 nickInfo 변수에 가져옵니다.

if nicInfo.family == socket.AddressFamily.AF_INET:는 무슨 뜻인가요?
"nicInfo" 객체의 "family" 속성이 "socket.AddressFamily.AF_INET"과 같은지 확인합니다.
Python의 "소켓" 모듈은 기본 네트워크 서비스에 액세스하는 방법을 제공합니다. "socket" 모듈의 "AddressFamily" 열거는 네트워크 주소의 주소 형식을 지정하는 데 사용됩니다. 이 경우 "AF_INET"은 "Address Family Internet"을 나타내며 IP 버전 4 주소를 나타내는 데 사용됩니다.
조건문은 "nicInfo.family" 속성이 IP 버전 4 주소를 나타내는지 확인하고, 그렇다면 "if" 블록 내에 들여쓰기된 코드가 실행됩니다. "nicInfo.family" 속성이 IP 버전 4 주소를 나타내지 않는 경우 "if" 블록 내의 코드는 건너뜁니다.
즉, 이 조건문은 "nicInfo" 개체가 나타내는 네트워크 주소가 IP 버전 4 주소인지 확인하는 데 사용되며, 그렇다면 "if" 블록 내의 코드가 해당 특정 네트워크 주소에 대해 실행됩니다. 



'코딩배우기' 카테고리의 다른 글

파이썬 코딩 5 GUI  (3) 2023.08.22
파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 2 기본 활용  (0) 2023.08.19
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 2  (0) 2023.08.18
Posted by 오미자컴
,

인터넷에서 코딩을 하려면 어떻게 해야 하나요?
구글 검색 : 구름 ide
goormIDE - A Powerful Cloud IDE Service 클릭 후 상단 메뉴에서 ‘로그인’ 클릭.
구글 아이콘 클릭 후 구글 계정과 비밀번호 입력 후 ‘다음’. 직업과 사용언어 입력 후 ‘추가 정보 저장’
다시 로그인.
‘새 컨테이너’ 클릭.
소프트웨어 스택에 파이썬이 선택 되었는지 확인 후 ‘생성하기’
‘컨테이너 실행하기’ 클릭


날씨 정보를 가져오는 코딩을 하려면 어떻게 하나요?
우선 관련 라이브러리를 가져옵니다.
Requests 함수로 openweathermap의 날씨 정보를 가져오고, 이를 json 함수로 문서화(딕셔너리화)합니다.
딕셔너리 명령어로 필요한 날씨 정보 항목만 출력합니다.

날씨 정보를 가져오려면 어떤 라이브러리가 필요한가요?
Requests 라이브러리가 필요합니다. HTTP 통신이 필요한 프로그램을 작성할 때 가장 많이 사용되는 라이브러리입니다. 특히 원격에 있는 API를 호출할 때 유용하게 사용할 수 있습니다.
구름ide엔 이미 requests 라이브러리가 설치되어 있으므로 따로 설치할 필요가 없습니다.
json 라이브러리도 필요합니다. JSON은 JavaScript Object Notation의 약자. 데이타를 교환하는 한 포맷으로서 특히 웹 브라우져와 웹서버 사이에 데이타를 교환하는데 많이 사용되고 있습니다. 가장 많이 사용되는 JSON 포맷은 Key-Value Pair의 컬렉션입니다.
JSON 문자열을 다시 Python 타입으로 변환할 수 있다 (JSON 디코딩). Load 함수를 사용합니다.

Requests 함수를 어떻게 사용하나요?
import requests
import json
city = “Gunpo" #도시 Seoul, Suwon-si 등
apiKey = "35264807cb4fabd9dc2e55a47d"
lang = 'kr' #언어
units = 'metric' #화씨 온도를 섭씨 온도로 변경
api = f" https://api.openweathermap.org/data/2.5/weather?q= {city}&appid={apiKey}&lang={lang}&units={units}"
Get 함수로 api에서 필요한 정보를 가져옵니다.  result = requests.get(api)

apiKey란 뭔가요?
apiKey = "35264807cb4fabd9dc2e55a47d” Api를 사용할 권한을 가져오는 비밀번호 같은 것입니다.
API란?
API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말입니다. 고유한 기능을 가진 두 소프트웨어 간의 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법입니다.
https://openweathermap.org/에서상단 오른쪽에 있는 메뉴 단추 클릭. ‘Sign In’ 메뉴 클릭. ‘Create an Account’ 클릭.

apiKey를 어떻게 얻나요?
https://openweathermap.org/에서 상단 오른쪽에 있는 메뉴 단추 클릭. ‘Sign In’ 메뉴 클릭. ‘Create an Account’ 클릭.


Api=f" http://api.op.org/weather?q= {city}”는 무슨 뜻인가요?
f-string을 사용하여 인터넷주소(URL)에 변수(city 등)를 사용할 수 있습니다.
f-string이란?
문자열을 출력해 주는 형식입니다. 파이썬 3.6버전부터 추가된 출력 기능입니다.
문자열 맨 앞에 f를 붙여주고, 중괄호 안에 직접 변수 이름이나 출력하고 싶은것을 바로 넣으면 됩니다. f'문자열 {변수} 문자열'

1월부터 12월까지 출력하는 f-string 포멧을 만들려면 어떻게 해야 하나요?
month = 1
while month <= 12:
    print(f'2023년 {month}월')
    month = month + 1

Api에서 가져온 텍스트를 파이썬에서 사용하려면 어떻게 해야 하나요?
Loads() 함수를 사용합니다. Json 문자열을 파이썬의 딕셔너리 자료형으로 변환합니다.

result = json.loads(result.text)

print(result)

 

result.text은 뭔가요?
.text는 Requests의 함수인데, Html 문서에서 태그를 제외하고 텍스트만 가져옵니다. Json은 srt(문자열)만 불러올 수 있습니다.

<td>텍스트</td>

<td></td>

<td><p>다른 텍스트</p></td>

<td>또 <p>다른 텍스트</p></td>
텍스트
다른 텍스트
또 다른 텍스트
.content 함수를 써도 결과는 같습니다. 다만 차이점은 한글 표현에 있습니다. 1바이트인 알파벳과 숫자는 잘 표현하나, 한글처럼 2바이트인 경우 ‘맑음’이 "\xeb\xa7\x91\xec\x9d\x8c" 이렇게 표현됩니다.

가져온 자료를 활용하려면 어떻게 해야 하나요?
가져온 자료가 딕셔너리로 변환되었으므로, 딕셔너리에서 사용하는 키 : 밸유 쌍을 이용합니다.

딕셔너리란 뭔가요?
사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 나타낼 수 있는데, 파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형으로 딕셔너리(Dictionary)가 있습니다.
딕셔너리는 어떻게 만드나요?
{Key1:Value1, Key2:Value2, Key3:Value3, ...}
Key와 Value의 쌍 여러 개가 { }로 둘러싸여 있습니다. 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있습니다.
dic = {'name':'Hong', 'phone':'01011111234'}

이름과 전화번호를 알려면 어떻게 하나요?
키를 사용해 밸유를 출력할 수 있습니다.

print(dic['name'])

print(dic['phone'])

대괄호 []은 뭔가요?
리스트입니다.
리스트는 뭔가요?
무지개색, 요일, 홀수 등 일련의 요소를 묶어서 표현하는 자료형입니다.
리스트명 = [요소1, 요소2, 요소3, ...]
odd = [1, 3, 5, 7, 9]
첫번째 요소를 출력하려면?
odd[0]
a = [1, 2, 3, ['a', 'b', 'c']]에서 ‘a’를 출력하려면?
Aa[-1][0]
-1? 제일 마지막 요소.

나머지 코딩
print(result)
name = result['name']
lon = result['coord']['lon']
lat = result['coord']['lat']
weather = result['weather'][0]['description']
temperature = result['main']['temp']
feels = result['main']['feels_like']
humidity = result['main']['humidity']
print('도시: ' + name)
print('경도: ' + str(lon) +', 위도: ' + str(lat))
print('날씨: ' + str(weather))
print('온도: ' + str(temperature))
print('체감온도: ' + str(feels))
print('습도: ' + str(humidity))

result['weather'][0]['description']은 뭔가요?
'weather': [{'id': 800, 'main': 'Clear', 'description': '맑음', 'icon': '01n'}]
Result 딕셔너리에서 ‘weather’키의 밸유를 출력합니다.
‘weather’키의 밸유가 리스트이므로 반드시 인데싱으로, 즉 숫자(순서)로 추출해야 합니다. [0]은 리스트의 첫번째 요소입니다. 리스트가 하나 밖에 없으니 [0]입니다.
밸유의 리스트 가운데 ‘description’ 키의 밸유를 출력합니다. 즉 ‘밝음’을 출력합니다.

print('경도: ' + str(lon) +', 위도: ' + str(lat)) 에서 왜 str(문자열)로 변환했나요?
‘+’로 출력 문자를 결합하려면 결합하는 요소들이 문자열이어야 합니다.
문자열로 변환하는 함수는 str()

영단어 공부하는 코딩을 하려면 어떻게 하나요?
영단어가 적힌 메모장 텍스트 파일을 불러옵니다.
한 줄 한 줄 읽어 리스트에 추가합니다. 영어는 영어 리스트에, 그 뜻은 한국어 리스트에 추가합니다. 영단어 텍스트 파일은 한 줄어 영어와 그 뜻이 하나씩 있는데, 영어와 그 뜻은 Tab키로 구분하여 놓았습니다. 이점을 이용하여 Tab키를 기준으로 각각 나누어 영어와 한국어 리스트에 넣습니다.
사용자가 숫자를 입력하도록 합니다. 만약 1을 입력했다면 +19 하여 1부터 20까지 중에서 난수를 정하도록 합니다.
정해진 난수 번째 항목을 영어 리스트에서 출력합니다.
숫자 1를 입력하지 않으면, 그러니까 아무 키나 누르면(안내문으로 엔터를 누르도록 합니다), 영어의 뜻을 출력하도록 합니다(같은 줄에 같은 리스트 항목 번호이므로 한국어 리스트에서 같은 번호 번째 항목을 출력합니다.)

영단어 텍스트 파일을 불러오려면 어떻게 해야 하나요?
우선 한글을 자유롭게 사용하기 위해 utf-8로 코딩 환경을 정해주고, 난수를 만들기 위한 impor를 하고, 영어 리스트로 en을, 한국어 리스트로 kr을 만들어둡니다.
# -*- coding: utf-8 -*-
from random import randint
en = []
kr = []
Open함수를 통해 영단어 텍스트 파일을 불러옵니다. 
result_f = open("vocaUTF8a.txt")

구름 IDE에서 파일을 불러오려면 어떻게 해야 하나요?
우선 ‘vocaUTF8a.txt’ 파일을 77story에서 다운로드 해 놓습니다. 참고로 vocaUTF8a.txt 파일은 utf8 형식으로 저장해 놓았습니다. 이렇게 해야 한글이 제대로 보입니다.
구름 IDE 파이썬 컨테이너에서 파일 메뉴에 들어갑니다. [파일 – 가져오기 – 파일]. 
작업하는 컨테이너 이름을 선택하고, ‘파일선택’ 단추 클릭. 다운로드 폴더에서 vocaUTF8a.txt 파일을 선택하고 ‘열기’ 단추 클릭.

불러온 텍스트 파일을 어떻게 리스트에 넣나요?
For문을 통해 한 줄씩 모두 불러옵니다.
불러온 후 같은 줄 앞에 있는 영단어는 en 리스트에 넣고, Tab으로 분리된 그 다음 한국어(영어의 뜻)는 kr 리스트에 하나하나 추가합니다. 텍스트 파일을 닫아줍니다.
For line in result_f:
      (e, k) = line.split('\t')
      en.append(e)
      kr.append(k)
result_f.close()

(e, k) = line.split(‘\t’) 는 무슨 뜻인가요?
텍스트 파일에서 한 줄을 가져와 Tab 키로 나뉜 부분을 각각 e 변수와 k 변수에 넣습니다.
(e, k)는 무슨 의미인가요?
튜플로 변수를 정의하는 것입니다. 다음과 같은 것입니다.

a, b = ('python', 'life')

이것은 아래 표현과 같은 것입니다.

(a, b) = 'python', 'life'

튜플은 괄호를 하지 않아도 괜찮습니다.
튜플은 리스트와 같은데, 다만 수정할 수 없는 점이 다릅니다.
그러니까 e 변수에 튜플로 한 줄 앞 단어를, k 변수에 튜플로 그 다음 단어를 넣어주는 변수 선언(바인딩)입니다.

시작할 영단어를 선택하려면 어떻게 하나요?
시작할 영단어 순번을 선택하도록 합니다. 전체가 1907 단어임을 알려주고 시작하고 싶은 영단어 번호를 숫자로 고르도록 합니다. 즉 20번 영단어부터 공부하려면 20을 입력하도록 합니다.
q = input("영단어가 총 1907개 입니다. 시작할 영단어 번호를 입력하면 20개씩 연습합니다. 시작할 숫자를 적고 엔터를 쳐 주세요 : ")
a = int(q)
20개씩 공부하려면?
b = a + 19

계속 공부할지 물을 때 1을 입력하면 그만 공부하도록 하려면 어떻게 하나요?
g = 0
while g != "1" :
     g = input("계속 하려면 엔터를,  그만 하려면 숫자 1을 입력하고 엔터를 치세요 : ")
     answer = "1“
     if g == answer :
         print ("다음에 또 봐요~~")
         break

오늘 공부를 하려면 어떻게 하나요?
Secret변수에 입력한 영단어 번호에서 20번째까지 중에서 난수를 선택하도록 합니다.
secret = randint(a,b)
임의의 영단어를 출력합니다.
print(en[secret])

영단어 뜻을 확인 하려면 어떻게 하나요?
영단어를 보고 그 뜻을 생각한 다음에 엔터를 치면, 즉 숫자 1을 치지 않으면, 영단어 뜻을 보여줍니다.
else :
         print (kr[secret])

영단어 공부 코딩

# -*- coding: utf-8 -*-
from random import randint

en = []
kr = []
result_f = open("vocaUTF8a.txt") 
for line in result_f: 
    (e, k) = line.split('\t') 
    en.append(e)
    kr.append(k)
result_f.close()

q = input("영단어가 총 1907개 입니다. 시작할 영단어 번호를 입력하면 20개씩 연습합니다. 시작할 숫자를 적고 엔터를 쳐 주세요 : ")
a = int(q)
b = a + 19
g = 0
while g != "1" :
    secret = randint(a,b)
    print(en[secret])
    g = input("답을 생각해 보시고  계속 하려면 엔터를,  그만 하려면 숫자 1을 입력하고 엔터를 치세요 : ")
    answer = "1"
    if g == answer :
        print ("열심히 공부하셨어요! 다음에 또 봐요~~")
        break
    else :
        print (kr[secret])

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 2  (0) 2023.08.18
스크래치 코딩 1  (1) 2023.08.18
Posted by 오미자컴
,

다시 코딩이란?
프로그램이라고도 합니다
문제를 해결하거나, 목표를 달성하기 위한 순차적인 명령
명령이란?
컴퓨터가 수행할 수 있는 명확한 일 하나하나
명령들을 결합하여 추상적인 새로운 명령(함수)을 정의
재미있는 창작 활동입니다. 빠르고 현명한 방법을 생각해내는 지적유희.

파이썬이란?
파이썬(Python)은 1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어
파이썬은 인터프리터 언어입니다. 컴파일과 링크 단계가 필요 없으므로 개발 시간을 상당히 단축해줍니다.
파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python's Flying Circus〉에서 따온 것입니다.
파이썬은 비영리의 파이썬 소프트웨어 재단이 관리하는 개방형, 공동체 기반 개발 모델을 가지고 있습니다.
왜 파이썬?
쉽고, 유용합니다. C, C++, JAVA 등을 쉽게 배울 수 있게 해 줍니다. 

파이썬을 어떻게 설치하나요?
https://www.python.org/ftp/python/3.11.4/python-3.11.4-amd64.exe
약 24 메가 바이트
Add python 3.11 to PATH 체크 후 Install Now
c 드라이브에 python3114 폴더에 설치합니다
파이썬 자습서 : https://docs.python.org/ko/3/tutorial/index.html
실행 :
‘시작 메뉴’의 ‘최근에 추가한 앱’에서 ‘IDLE(python 3.11 64-bit)’를 클릭

코딩을 어떻게 하나요?
[File – New File]
첫 줄은 모든 언어를 사용할 수 있도록 하는 주석처리문
# -*- coding: utf_8 -*-

가 = 0
나 = 1
while 가 < 10 :
    print(가)
    가 = 나
    나 = 가+나
저장 후 실행 : Ctrl+S, F5

코딩이 잘못 되었으면 어떻게 하나요?
디버깅합니다. 잘못된 부분을 찾고 고치는 일.
코딩의 잘못된 부분을 버그라고 합니다. 초기에 진공관으로 만들었던 컴퓨터에서 나방이 들어와 고장이 나게 된 이후에 붙여진 이름입니다.
코딩 시간만큼 디버깅 시간을 마련하여야 합니다. 즉 코딩에 10시간 걸리면, 디버깅에도 그만큼 시간을 할애하는 것이 좋습니다.

함수란 뭔가요?
여러 실행 명령어를 모아 놓은 것
키워드 def로 시작하고 함수 이름을 임의로 정하고 괄호 ‘()’와 콜론 ‘: ’입력 후 엔터. 그러면 들여쓰기가 됩니다. 한 줄씩 명령어를 입력합니다.
definition : (특히 사전에 나오는 단어나 구의) 정의
함수를 실행(호출)하려면 :
함수 이름 ()

함수 예제
def printMsg() :
    print("안녕하세요~")
    print("반갑습니다^^")
def repeatMsg() :
    printMsg()
    printMsg()
    printMsg()
repeatMsg()

클래스란 뭔가요?
클래스는 객체를 만드는 틀입니다. 클래스에는 객체의 속성과 메서드(함수)가 정의되어 있습니다. 객체는 클래스의 인스턴스라고 합니다.
클래스를 만들려면 class 키워드를 사용합니다. 클래스의 이름은 다음과 같이 지정합니다. class Car:
생성자 메서드( __init__)는 클래스의 객체가 생성될 때 호출된다. 객체의 속성을 초기화하고 초기 상태를 설정합니다.

클래스 예제
class Car: # 클래스 만드는 방법
    def __init__(self, name): # 초기화(기본설정)
        self.carName = name
    def speak(self):
        print('Hi! My car is ', self.carName)
car1 = Car('Pony') # 인스턴스(객체) 생성
car2 = Car('Mina')
car1.speak() # car 클래스의 car1 인스턴스가 speak 메소드에 접근할 수 있다
car2.speak()

왜 점이 붙나요?
car1는 클래스 Car를 상속하였으므로, 그 멤버 함수(Method)인 speak()를 사용할 수 있는데, 이때 점을 붙이고 함수명을 적어줍니다.
car1.speak()는 내 차 이름을 출력하도록 합니다.
car1.까지만 입력하고 조금 기다리거나 Tab 키를 치면, Car 클래스가 가지고 있는 함수 목록을 보여줍니다. 원하는 함수를 더블클릭하고 ()를 붙여줍니다. Tab 키를 두 번 치면, 나타난 목록 중 제일 처음 함수가 선택됩니다.
블록설정 후 Alt + '3': 주석 처리 
Alt + '4': 주석 해제

윈도우에서 실행할 수 있는 파일로 만들려면 어떻게 해야 하나요?
먼저 코딩 제일 아래에 os.system('pause') 명령어를 넣어줍니다. 명령 프롬프트 창이 떠 있어야 하는 경우에 필요합니다. 
실행 파일은 윈도우가 실행되고 있는 내 컴퓨터에서 파이썬을 설치하고 만들어야 합니다.
명령 프롬프트 창에서 pyinstaller를 설치합니다. pip install pyinstaller
IDLE의 [File – Open]에서 현 경로를 복사하고, 터미널 창에서 cd 경로 후,
pyinstaller -F test.py
-F 옵션은 실행 파일 1개만 만들게 합니다.
dist폴더에 test.exe를 만들어줍니다.
-w 옵션은 콘솔창(명령 프롬프트)이 뜨지 않게 합니다. 주로 GUI(윈도우) 프로그램을 만들 때 사용합니다.  

구구단 연습 코딩을 하려면 어떻게 해야 하나요?
먼저 임의의 숫자를 컴퓨터가 선택하도록 합니다
구구단 답이 81이면 프로그램을 종료합니다. 바꾸어 말하면, 답이 81이 아닌 한 계속 구구단을 외웁니다.
외운 답과 정답이 같으면 ‘맞습니다’라고 출력합니다. 크면 크다는 문장을 출력하고 작으면 작다는 말을 출력합니다.

임의의 숫자를 컴퓨터가 선택하도록 하려면 어떻게 해야 하나요?
먼저 필요한 함수를 불러옵니다
from random import randint
2부터 9까지 아무 숫자를 선택하는 함수. randint(2,9)
Secret1 변수에 2부터 9까지 임의의 숫자를 배당합니다. secret1 = randint(2,9)
Secret2 변수에 2부터 9까지 임의의 숫자를 배당합니다. secret2 = randint(2,9)
A변수에 secret1 값을 문자로 바꾸어 넣습니다.  a = str(secret1)
B변수에 secret2 값을 문자로 바꾸어 넣습니다.  b = str(secret2)
A와 b를 곱하는 출력문을 내보냅니다.  print(a + " x " + b)

81을 입력 할 때까지 계속 구구단 연습을 하려면 어떻게 해야 하나요?
우선 guess라는 변수에 0을 할당하고, guess가 81이 아닌 경우 계속 그 다음 코딩을 수행하도록 합니다. Guess가 81이 되면 반복을 멈춥니다.
guess = 0
while guess != 81 :

컴퓨터에 외운 답을 입력 하려면 어떻게 해야 하나요?
Input 함수를 사용합니다. input("답 : ")
사용자가 입력한 답을 g변수에 넣습니다. g = input("답 : ")
입력한 값이 문자이므로 계산하려면 숫자로 바꾸어야 합니다.
guess = int(g)
c = int(secret1)
d = int(secret2)
정답을 계산합니다. answer = c * d

입력한 답에 대해 적절하게 대답해 주려면 어떻게 해야 하나요?
입력한 답이 정답이면 ‘맞았어요~!’라고 출력합니다.
if guess == answer :
        print ("맞추었습니다~!")
정답이 아니라면 그 답이 큰지 작은지 말해줍니다.
else :
        if guess > answer :
            print ("너무 높아요!")
        else :
            print ("너무 낮아요!")

숫자맞추기 게임 코딩을 하려면 어떻게 해야 하나요?
먼저 임의의 숫자를 컴퓨터가 선택하도록 합니다
7번 반복 시도할 수 있게 합니다. 답을 맞추면 반복을 멈춥니다. 7번만에 못 맞추면 게임이 종료됩니다.
사용자가 입력한 숫자와 컴퓨터가 정한 답이 같으면 ‘맞추었습니다’라고 출력합니다. 크면 크다는 문장을 출력하고 작은면 작다는 말을 출력합니다.

7번 반복 하려면 어떻게 해야 하나요?
For 반복문을 사용합니다. Range함수를 사용하면 반복 횟수를 정할 수 있습니다.
for i in range(1,8) :
변수 i가 1부터 시작 하여 8이 될 때까지 반복합니다. 즉 7번 반복하고 8이 되는 순간 반복을 멈춥니다. 변수 i는 임의의 문자를 그냥 정한 것입니다. K를 해도 되고 어떤 문자를 써도 됩니다. 다만 그 문자가 변수가 되고 그 변수가 정해진 범위 안에서 하나씩 증가합니다.
반복을 임의로 멈추려면? Break 명령어.

숫자맞추기 게임 코딩
from random import randint
secret = randint(1,100)
print ("제가 생각한 숫자를 맞추어보세요!")
guess = 0
for i in range(1,8) :
    g = input("생각한 숫자를 적어주세요! : ")
    guess = int(g)
    if guess == secret :
        print ("맞추었습니다. 당신이 이겼어요!")
        break
    else :
        if secret > guess :
            print ("높아요!")
        else :
            print ("낮아요!")
print ("다음에 또 봐요~~")

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 2 기본 활용  (0) 2023.08.19
스크래치 코딩 2  (0) 2023.08.18
스크래치 코딩 1  (1) 2023.08.18
Posted by 오미자컴
,

사각형을 40도씩 방향을 바꾸면서 한 바퀴만큼 그리려면 어떻게 해야 하나요?
9번 반복합니다. 왜?
한 바퀴인 360도 나누기 40도는 9이므로
길이가 100인 직선 그리기를 90도씩 방향을 바꾸면서 4번 반복해 사각형을 그립니다. 이 반복을 다시 9번 합니다. 이중 루프.

이중 루프 코딩


사각형을 일정 각도씩 방향을 바꾸면서 한 바퀴만큼 그리려면 어떻게 해야 하나요?
‘반복 횟수’ 변수를 만들고, ‘반복 횟수’ 변수를 1로 정합니다.
20번 반복합니다. 
만약 360 나누기 ‘반복횟수’의 나머지가 0이면 반복횟수만큼 반복하도록 합니다.
시계 방향으로 360도 나누기 ‘반복횟수’도 돌기를 합니다.
반복횟수번 반복하기가 끝나면, 반복횟수를 1만큼 바꿉니다. 
펜을 올리고, x는 -200부터 200사이의 난수로, y는 -140부터 140사이의 난수로 이동한 후, 다시 펜을 내립니다.

일정 각도 돌며 사각형 그리기 코딩 1


일정 각도 돌며 사각형 그리기 코딩 2


함수란 뭔가요?
프로시저(procedure)라고 하는데 프로그램의 일부 기능을 담당하는 연속적인 문장들의 묶음입니다
미리 만들어 놓은 처리 절차를 호출하여 사용합니다
스크래치에선 ‘내 블록’으로 필요한 함수를 만들어 사용합니다. ‘내 블록’ 카테고리를 클릭해 ‘블록 만들기’ 단추를 클릭하고, 함수 이름을 정합니다. 이때 매개변수(입력값)을 지정해 줄 수 있습니다.
내 블록을 만들면, 호출할 블록도 함께 만들어집니다. 호출할 블록에서 인수(입력값)을 넣으면 함수인 내 블록에 매개변수로 들어갑니다.

내 블록을 만들 때 보이는 ‘입력값 추가하기’란 뭔가요?
입력값이란 처리의 재료가 되는 값입니다. 보통 ‘인수’라고 합니다. 
왜 입력값을 추가하나요?
입력값을 바꿔 호출함으로써 하나의 블록에 여러 가지 처리를 시킬 수 있습니다 

입력값 사용의 예


고양이를 클릭했을 때 크기가 각각 다른 별을 그리고 싶은데 어떻게 해야 하나요?
내 블록으로 ‘별’을 만드는데 입력값(‘크기’)을 하나 넣을 수 있게 합니다
‘별 크기 정의하기’ 블록 아래에 별을 그리는 코딩을 합니다
고양이 크기를 30%로 줄이고 난수로 x좌표는 -120에서 120까지 y좌표는 -100에서 100까지 위치로 이동하여 펜을 내리고 색깔을 바꿔가며 ‘별’ 블록이 입력값으로 넘겨준 크기만큼 움직이면서 시계 반대방향(혹은 시계방향, 모양이 조금 다릅니다)으로 144도 돌며 5번 반복하여 그립니다.

별 그리기 코딩


별 그리기 난수 코딩


함수를 사용하는 장점은?
코딩이 간결해집니다
같은 처리를 재이용할 수 있습니다
입력값으로 처리를 변경할 수 있습니다

‘스페이스 키를 눌렀을 때’ 사용자가 입력한 다각형을 그리려면 어떻게 해야 하나요?
몇 각형으로 그릴지 묻고 기다리기
‘다각형’ 블록을 만들고 ‘대답’을 입력값으로 받습니다
변수 ‘각도’를 만들고, ‘각도’를 ‘360/모서리 수’로 정합니다
변수 ‘반지름’을 만들고, ‘대답’에 따라 ‘반지름’을 정합니다
 ‘반지름’만큼 움직이고, ‘각도’만큼 시계 반대 방향으로 회전하여 ‘모서리 수’만큼 반복합니다

110각형 이상이 되면 다각형이 일그러지는데 어떻게 해야 하나요?
‘길이’ 매개 인수를  (5/대답) * 100으로 합니다.
5각형 기준으로 길이를 100으로 한 것입니다.
시간은 3각형 기준으로 1초 : 3/대답


병렬 처리란 뭔가요?
여러 기능을 동시에 처리하는 것입니다
멀티 태스킹(multi-tasking) : 여러 프로그램 실행
멀티 스레딩(multi-threading) : 프로그램 하나가 여러 작업을 동시에 처리 
초록 깃발을 클릭했을 때 이벤트가 발생하면서 고양이가 야옹 소리를 무한 반복하기 시작합니다. 스페이스 바를 눌렀을 때 이벤트가 발생하면서 고양이가 마우스 포인터를 무한히 따라가기 시작합니다.

병렬처리


10초 후에 멈추게 하려면?


컴퓨팅 사고력이란 뭔가요?
Computational thinking. 모든 문제에 컴퓨터 과학의 기본 개념들을 적용하고 문제 해결을 위해 창의적으로 논리적으로 생각하며 서로 협동하는 자세로 포기하지 않고 오류를 해결하는 사고 방식.
추상화 : 공통되는 특성이나 속성을 추출하고(일반화), 불필요한 요소를 없앰(캡슐화). 무지개 색깔을 모아 저장하는 리스트. 
분해 : 처리 가능한 수준의 작업 단위가 될 때까지 계속 쪼개는 작업. 해결 가능한 수준의 문제 단위까지 작게 쪼갬. 모듈화. 함수.
패턴인식 : 인공지능의 한 분야. 사물을 구별할 수 있는 특징들을 모아 패턴을 정의. 2로 나누었을 때 나머지가 0이면 짝수이고 아니면 홀수인 패턴.
알고리즘 : 9세기 페르시아의 수학자인 알-콰리즈미의 이름에서 유래. 어떤 문제를 해결하기 위한 방법. 순서도. 동전 100개 중 무게가 가벼운 동전 1개가 섞여 있습니다. 이 동전을 양팔 저울을 이용해 찾으려면?
동전들을 절반씩 나눠 저울에 달아 가벼운 쪽만 계속 선택.

숫자 맞추기 게임을 만들려면 어떻게 해야 하나요?
사용자가 고양이가 1에서 99 사이에 생각해둔 숫자를 입력하도록 합니다
‘정답’ 변수를 만들고 1에서 99 사이의 난수로 정합니다. 이 ‘정답’이 생각해둔 숫자입니다.
고양이는 사용자가 입력한 숫자가 생각해둔 숫자보다 큰지 작은지 말해줍니다. 7번 반복합니다.
맞추면 축하하는 말을 하고 프로그램을 멈춥니다
7번 안에 못 맞추면 다음 기회에 다시 해보라는 말을 하고 프로그램을 멈춥니다

숫자 맞추기 게임 코딩


홀짝 게임을 어떻게  만들까요?
홀과 짝 중에 하나를 입력하게 합니다.
야옹이가 1에서 99사이 난수 중 하나를 선택하게 하고 이를 2로 나누어 나머지가 0이면 짝이라고 말하게 하고, 아니면 홀이라고 말하게 합니다.
사용자가 맞추면 축하한다는 말을 하게 합니다.
‘q’를 입력할 때까지 게임을 계속합니다.

홀짝 게임 코딩 1


홀짝 게임 코딩 2


홀짝 게임 코딩 3


홀짝 게임 코딩 다른 버전 1


홀짝 게임 코딩 다른 버전 2


사용자가 q 눌렀을 때, 시간도 멈추려면?


재귀 호출이란 무엇인가요?
프로시저(함수)가 자기 자신을 호출하는 것
조건을 만족하면 재귀 호출을 중단해야 합니다
스크래치에선 변수를 사용하여 재귀호출을 대신합니다
일례로 최종 결과값 변수를 만들고 함수를 호출할 때마다 결과값을 변경하다가 더 이상 재귀호출이 발생하지 않을 때 최종적인 결과값을 갖도록 합니다

임의의 양의 정수까지 어떻게 더하나요?
변수 ‘결과값’을 0으로 정하고 
사용자로부터 얼마까지 더하고 싶은지 입력을 받습니다
‘다더하기’ 함수(나만의 블록)을 만들고 입력값으로 ‘매개변수’를 넣습니다. ‘대답’을 매개변수로 넣습니다.
먼저 결과값을 ‘대답(매개변수)’만큼 바꿉니다. 예를 들어 대답이 3이었으면, 결과값은 3이 됩니다.
‘매개변수’에서 1을 뺀 값, 그러니까 2만큼 결과값을 바꿉니다. 결과값은 재귀호출이 되어 3에다가 다시 2만큼 더하여 5가 됩니다. 
‘매개변수’가 1이면 결과값에 1만큼을 더 더합니다.
대답한 3 + 2 + 1을 한 셈입니다

임의의 양의 정수까지 더하기 코딩


복제란 뭔가요?
Cloning. 스프라이트를 복사하는 것. 복제된 스프라이트를 가리키기도 하며 클론이라고도 합니다.
복제된 클론은 원래 스프라이트와 스크립트를 공유하지만, 개별적으로 동작합니다.
복제 기능을 이용하려면,
‘제어’ 카테고리에서 ‘나 자신 복제하기’ 블록을 사용합니다
‘복제되었을 때’ 이벤트 블록은 복제 되었을 때 그 다음에 이어지는 스크립트를 실행합니다.
‘이 복제본 삭제하기’ 블록은 실행한 클론을 삭제.
‘멈추기 모두’ 블록을 사용하면, 모든 복제가 삭제.

키보드로 움직이기 코딩


이벤트란 무엇인가요?
마우스 클릭이나 키보드 누르기 등 프로그램에 뭔가를 시키는 것(신호, 사건)을 말합니다
녹색 깃발을 클릭하면, 스크래치를 시작하는 신호를 줍니다.
키 입력, 스프라이트 클릭, 무대 클릭 등 여러 이벤트가 있습니다. 이들 이벤트는 병렬 처리 됩니다.
메시지를 전달하고 받는 것도 이벤트입니다

메시지란 무엇인가요?
스프라이트나 배경 사이에서 통신하는 기능입니다
보내는 쪽과 받는 쪽이 있고
받는 쪽은 그 메시지가 신호가 되어 스크립트를 실행합니다
보내는 쪽 : ‘메시지1 신호 보내기’ 블록, ‘메시지1 신호 보내고 기다리기’ 블록
받는 쪽 : ‘메시지1 신호를 받았을 때’ 이벤트 블록
메시지를 여러 스프라이트에 동시에 보낼 수 있습니다

메시지는 어떻게 만드나요?
이벤트 블록 카테고리에서 ‘메시지1 신호 보내기’ 블록을 가져와 ‘메시지1’를 클릭하고 펼침 메뉴에서 ‘새로운 메시지’ 클릭
새로운 메시지로 적절한 이름을 정하고
그 이름으로 만들어진 메시지 신호 보내기 블록을 활용합니다

메시지 만들기


동그라미를 따라다니는 네모를 재미 있게 게임으로 만들려면 어떻게 해야 하나요?
빨간 동그라미와 파란 네모를 그립니다
동그라미는 벽에 닿지 않게 반복적으로 난수 위치로 이동합니다. 네모가 닿으면, 점수를 얻고, 에너지를 0.2초 얻으며, 다시 난수 위치로  이동합니다.
네모는 4만큼 계속 움직이도록 합니다(숫자가 클 수록 난이도가 높습니다). 방향키를 누르면 그 방향으로 4만큼 움직이게 합니다. 벽에 닿으면, x:0 y:0 위치로 이동하고, 에너지가 0이 되고, 점수를 1점 잃습니다. 계속 자기 복제를 합니다. 자기 복제를 하면 에너지만큼의 시간 동안 자신을 복제한 후, 자신을 삭제합니다.
네모는 동그라미에 닿으면 에너지를 얻어 네모가 길어집니다. 벽에 닿으면 에너지가 없어져 짧아집니다.
100초 동안 게임을 합니다.

동그라미 코딩


네모 코딩 1


네모 코딩 2


배경 코딩

 

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 2 기본 활용  (0) 2023.08.19
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 1  (1) 2023.08.18
Posted by 오미자컴
,

컴퓨터 기본 사용법
보기
메뉴, 도구 상자, 아이콘, 펼침 단추, 스프라이트,  작업창, 무대창, 실행창 등
선택
마우스 포인터 위치 시킴
클릭, 화살표 키, Tab 키 등
실행
Enter, 클릭, 더블클릭, 드래그, 우클릭
취소 : 여백 클릭, ESC 키, Ctrl+Z 등

프로그래밍이란?
프로그램을 작성할 때 사용하는 언어 : 
프로그래밍 언어
컴퓨터가 이해하는 언어 : 
기계어(이진수), 어셈블리어
일상 언어와 기호를 사용하는 프로그래밍 언어 : 
고급 프로그래밍 언어. 소스(원시) 프로그램
고급 프로그래밍 언어를 저급 프로그래밍 언어로 바꾸기 :
컴파일러-> 어셈블러 -> 기계어. 인터프리터.
컴파일러와 인터프리터?
컴파일러를 이용하는 프로그래밍 언어 :
C, C++, 자바 등
인터프리터를 이용하는 프로그래밍 언어:
파이썬, 비주얼베이직, 자바스크립트.  스크립트 언어
스크래치는?
스크립트 언어. 스크립트 : 연극 대본. 

코딩이란?
프로그래밍 할 때 실행 순서를 프로그래밍 언어의 명령어(코드)로 작성하는 일
프로그래밍은 더 큰 개념으로 코드 작성, 분석 및 구현, 기계 레벨 출력 생성, 디버깅, 컴파일, 테스트 및 구현 등 원하는 출력을 만들기 위한 모든 중요한 모든 영역을 포함. 
스크래치란?
문자로 된 코드 대신에 블록(Block)이라고 불리는 상자 모양의 명령을 마우스로 드래그해 조립, 프로그램을 구성해나가는 것
미국 MIT 미디어랩의 라이프롱 킨더가르텐 그룹에서 개발.
스크래치를 어떻게 실행하나요?
크롬 웹브라우저 프로그램으로https://scratch.mit.edu 에 접속하여 상단 메뉴에 있는 ‘만들기’ 클릭. 
지구본 아이콘 클릭 후, ‘한국어’ 선택. 
스크래치 가입 : 계정 갖기. 로그인 하면 저장하고 관리할 때 편하고 함께 공유할 수 있습니다.

스크래치 가입을 어떻게 하나요?
 https://scratch.mit.edu 에 접속하여 상단 메뉴에 있는 ‘스크래치 가입’ 클릭
사용자 이름 : 영어, 숫자, -, _
비밀번호 : 비밀 번호 표시 체크해제 후
국가 : Korea, Republic of
이메일주소 : email1234@gmail.com
위에 적은 이메일 사이트에 로그인 후 Confirm your Scratch account이란 제목의 메일 클릭 후 ‘계정 인증’ 단추 클릭. 같은 이메일에 다른 계정 추가 인증은 안 됩니다.

스프라이트(sprite)란?
(장난 좋아하는)요정, 도깨비
게임 캐릭터
코카콜라 브랜드의 소다 제품명. 레몬 라임 드링크.
등장 인물

무대 크기는?
가로 480 픽셀, 세로 360 픽셀
스프라이트가 있는 위치는 가로 +-240, 세로 +-180.

블록이란?
동작, 형태, 소리, 이벤트, 제어, 감지, 연산, 변수, 나만의 블록 등
문장, 자료/변수(타원), 조건(6각형), 제어, 이벤트 블록 등
블록 조작 : 드래그
블록 조립과 분리  : 드래그 할 때 회색의 블록 음영 참조.
블록 복사 : 우클릭. ‘ 복사하기’ 후 블록 조립(원하는 곳에서 클릭)
다른 스프라이트에 복사 : 원하는 블록을 다른 스프라이트로 드래그(그 스프라이트가 좌우로 움직임)
첫 번째 코딩 준비 작업 : 무대와 배우
[스프라이트/무대 관리 창]에서 [배경 고르기] 클릭
Beach Malibu 클릭
[스프라이트/무대 관리 창]에서 [스프라이트 고르기]를 클릭
Mouse1 클릭
스프라이트 이름 변경 : [스프라이트/무대 관리 창]상단에서 ‘고양이’, ‘쥐’ 등으로 변경
고양이와 쥐의 위치 변경 : 드래그

스크립트 작성
고양이 스프라이트 선택 후
이벤트 블록에서 녹색 깃발 ‘클릭했을 때’를 가져다 스크립트 창에 놓음
동작 블록에서 ‘마우스 포인터 쪽 보기’를 가져다 ‘쥐 쪽 보기’로 바꾸기
’10만큼 움직이기’ 동작 블록
‘1초 기다리기’ 제어 블록
‘무한 반복하기’ 제어 블록으로 모든 블록을 감쌈.

스크립트 실행
[프로그램 실행 창]에서 ‘전체화면’ 단추 클릭
‘시작하기’ 단추 클릭
‘멈추기’ 단추 클릭
다시 ‘전체화면’ 단추 클릭

스프라이트 디버깅
고양이 : ‘회전 방식을 왼쪽 – 오른쪽으로 정하기’ 동작블록과 ‘90도 방향 보기’ 동작블록, 그리고 ‘x:-185 y:-119로 이동하기’ 동작블록, ‘맨 앞쪽으로 순서 바꾸기’ 형태블록을 무한 반복하기 블록 위쪽에
‘드래그 모드를 드래그 할 수 있는 상태로 정하기’ 감지 블록을 무한 반복하기 블록 위쪽에
쥐에도 ‘드래그 모드를 드래그 할 수 있는 상태로 정하기’ 감지 블록을 넣음
늘 고양이가 쥐 위에 보에게 하려면?
‘맨 앞쪽으로 순서 바꾸기’ 형태블록을 무한 반복 안에

저장하고 불러오려면?
상단 [메인 메뉴 바] 중앙에 있는 프로젝트 이름 창에 ‘고양이와 쥐’라고 입력하고 [파일 – 저장하기].
‘내 작업실’에 저장됨
확장자 : sb3
‘공유’ 단추 : 다른 사용자가 볼 수 있고 댓글과 평가를 받을 수 있다
‘프로젝트 페이지 보기’ 단추 : 작성한 프로그램 사용 방법 또는 참고사항 등 작성
‘스크립트 보기’ 단추 : 프로그래밍(코딩)
불러오기 : [파일 – 컴퓨터에서 가져오기(Lord from your computer)]

변수란?
프로그램 내의 값(숫자나 문자), 입력 결과, 계산 결과 등을 넣어 두는 상자
변수는 값을 넣고 뺄 수 있습니다. 새로운 값을 넣으면 이전 값은 사라져요. 처리에 따라 내용이 변하여 변수.
 변수 만들기 :
도구 상자에서 ‘변수’ 클릭. ‘변수 만들기’ 단추 클릭
새로운 변수 이름:
원하는 단어로 이름을 정합니다. 보통 넣을 값을 이해하기 쉬운 말, 예를 들면 ‘득점’이라고 변수명을 정하면 그 값이 득점한 점수라고 이해하기 쉬워요.

모든 스프라이트에서 사용 :
보통 코딩 용어로 전역 변수라 합니다. 어느 스프라이트에서나 사용할 수 있습니다.
이 스프라이트에서만 사용 :
지역변수
스크래치에선 변수가 숫자든 문자든 알아서, 즉 변수 유형에 상관없이 잘 처리해줍니다. 예를 들어, ‘10만큼 움직이기’ 동작 블록의 변수 ‘10’ 대신에 문자로 ‘십’이라고 입력해도 코딩에 오류가 나지 않지만, 10만큼 움직이진 않습니다.

구조적 자료형이란?
여러 개의 자료를 하나의 단위로 효율적으로 처리할 수 있는 자료형
배열(array)?
자료들에 순서를 매겨 나열한 집합. 예) 1반(10명)의 국어 점수를 각각 할당. 보통 0부터 순서 매김. 자료의 순서를 활용함(연산함)
리스트?
일정한 순서에 따라 나열한 구조. 예) 요일, 무지개 색깔 등. 자료 추가, 삭제, 검색, 개수 구하기 등 연산 가능(활용도가 높음). 그래서 스크래치는 이것을 제공! 추상적 자료형. 컴퓨팅 사고력 : 추상화, 분해,패턴인식, 알고리즘.

리스트는 어떻게 만드나요?
변수 만들기와 마찬가지입니다
도구 상자에서 ‘변수’ 클릭. ‘리스트 만들기’ 단추 클릭.
새로운 리스트 이름 : 음식
사용자가 입력하는 자료를 활용하려면 어떻게 해야 하나요?
‘감지’ 블록 중 ‘너 이름이 뭐니? 라고 묻고 기다리기’ 블록, ‘대답’ 블록
묻고 기다리기 블록에서 입력 받은 자료가 대답 블록에 변수로 저장됩니다

음식 리스트 코딩1 – 자료 입력


저장해 놓은 가장 좋아하는 음식을 목록에서 다시 불러오려면 어떻게 해야 하나요?
음식 리스트의 제일 끝에서 3번째 항목을 불러오면 됩니다
리스트 음식의 길이만큼 항목이 있습니다. 예를 들면 음식 리스트에 3개 항목이 있으면 음식 리스트의 길이가 3이 됩니다. 첫번째 항목을 불러오려면 음식의 길이에서 2를 빼야 합니다. 3-2=1. 첫번째로 좋아하는 음식을 불러올 수 있습니다.

제일 좋아하는 음식 불러와 3초 동안 말하기

음식 리스트 코딩2 – 자료 출력


음식 리스트 코딩2 – 자료 출력 다른 방법


음식 리스트 코딩 – 반복 블록 사용


음식 리스트를 처음부터 순서대로 하나씩 불러오려면 어떻게 해야 하나요?
변수를 하나 만들고(이름 : 인덱스), 이 변수를 ‘1’로 초기화 하고 반복문을 통해 숫자를 하나씩 증가시키며 음식 리스트의 항목들을 1번째 항목부터 말하도록 합니다.
몇 번 반복해야 할까요?
음식의 길이만큼
어떻게 1씩 증가시키나요?
인덱스 변수를 1만큼 바꾸기

음식 리스트 코딩3 – 자료 모두 출력


천자문을 조건에 맞추어 공부하는 코딩을 하려면 어떻게 하나요?
오늘 날짜를 말하게 하고
시작일 변수를 만들고 시작일을 ‘2000년 이후 현재까지 날짜 수’로 정합니다
‘날짜’ 리스트를 만들고, 변수 시작일을 여기에 추가합니다
‘한자’ 리스트를 만들고, 여기에 천자문 텍스트 문서를 불러옵니다
매일 4개 항목씩(16글자) 공부하고, 어제 학습한 한자를 복습하고, 1주일 전에 익힌 한자를 복습합니다.

천자문 공부하는 코딩 개요
처음에 초기화 하려면 영문자 a키를 누르세요. 
매일 천자문을 16자씩 새로 공부하고, 
어제 공부한 천자문을 복습하고, 
또 1주일 전에 공부한 천자문을 익힙니다. 1주에 5번만 공부합니다.
하루 한 번 1분 30초, 3개월이면 다 공부합니다. 
이 파일을 컴퓨터에 저장한 것으로 자신만의 진도를 나가면 됩니다. 
스페이스바를 누르면 천자문을 다 외웁니다. 약 30분 걸립니다.

한자 리스트에 천자문을 쉽게 입력하는 방법은 없나요?
인터넷 검색으로 천자문을 찾아 텍스트 파일로 만듭니다
한 줄에 4글자씩 입력합니다
한자 리스트에서 가져옵니다
실습 자료 : 77story.tistory.com



오늘의 천자문을 공부하려면 어떻게 해야 하나요?
한자 리스트에서 첫번째 항목부터 불러오려면?
날짜 리스트 길이, 순서를 나타내는 숫자, 인덱스 변수를 활용해야 합니다
오늘 공부하는 날짜는 기본적으로 리스트에 하나 추가하므로 그 길이가 무조건 1이고, 오늘 4개를 공부하므로, 한자 리스트에서 첫번째 항목을 가져오려면?
날짜의 길이가 이미 1이므로 첫번째 항목을 가져오려면 0을 더해야 합니다
두번째 항목은?
날짜의 길이인 1에 1을 더해 2가 되어야

인덱스 변수는 왜 필요한가요?
어제 공부한 내용을 복습할 때 필요합니다
인덱스 변수를 매일 3씩 증가시켜 주어야 합니다
왜요?
매일 그 날의 날짜 리스트가 하나씩 늘어나므로 기본적으로 날짜 리스트의 길이가 하나 추가되어, 둘쨋날의 날짜 길이는 2가 됩니다. 매일 4개 항목씩 공부하는데 기본적으로 날짜 길이가 하나씩 늘어나므로 인덱스 변수는 3을 증가시켜 주어야 합이 4가 됩니다.
어제 내용, 그리고 1주전 내용을 불러오려면 인덱스 변수를 기준 삼아 필요한 한자 리스트 항목을 뽑아내야 합니다

한자 리스트의 첫 번째 항목 말하려면?


어제 공부한 천자문을 복습하려면 어떻게 해야 하나요?
어제 공부한 내용이 있으려면, 최소한 날짜의 길이가 2가 되어야 합니다. 그리고 오늘 공부했기에 인덱스는 6이 되어 있습니다(어제 3 + 오늘 3).
어제 공부한 항목은 오늘 공부한 항목보다 일곱 항목을 앞으로 거슬러 올라가야 합니다.
즉 어제 첫번째로 공부한 항목이 한자 리스트의 1번 항목입니다. 그러니까 답이 1이 나와야 하는데, 지금 날짜의 길이 2, 인덱스 숫자 6이므로 7을 빼야 답이 1이 됩니다.


어제 공부한 항목으로 가기


1주일 전에 공부한 내용을 복습하려면 어떻게 해야 하나요?
1주일에 5일만 공부한다고 했을 경우, 1주일 전에 공부한 내용을 복습하려면 최소한 6일째가 되어야 합니다. 논리식으론 날짜의 길이가 5보다 커야 합니다.
날짜의 길이 6 + 인덱스 숫자 18(3*6)는 24가 됩니다.
6일째의 1주일 전은 1일째이므로 복습할 항목은 1이 되어야 하므로, 23을 빼주어야 합니다.


천자문 코딩 1


천자문 코딩 2

'코딩배우기' 카테고리의 다른 글

파이썬 코딩 4 웹크롤링  (0) 2023.08.22
파이썬 코딩 3 유틸리티  (0) 2023.08.21
파이썬 코딩 2 기본 활용  (0) 2023.08.19
파이썬 코딩 1 기본 코딩법  (0) 2023.08.18
스크래치 코딩 2  (0) 2023.08.18
Posted by 오미자컴
,