파이썬 프로젝트 & 모듈 정리

xyzw·2023년 2월 8일
0

python

목록 보기
2/2

만들면서 배우는 파이썬과 40개의 작품들 속 모듈을 알아보고 정리한다.

Project 1: 숫자 맞추기 게임 만들기

임의의 숫자를 맞추는 게임

import random

random_number = random.randint(1,100)

game_counter = 1

while True:
    try:
        my_number = int(input("1~100 사이의 숫자를 입력하세요: "))
    
        if my_number>random_number:
            print("다운")
        elif my_number<random_number:
            print("업")
        elif my_number==random_number:
            print(f"축하합니다. {game_count}회 만에 맞췄습니다.")
            break
    
        game_count=game_count+1
        
    except:
        print("에러가 발생하였습니다. 숫자를 입력하세요: ")

random

  • random.randint(a, b)

    a <= N <= b를 만족하는 임의의 정수 N을 반환한다.

Extra) random 함수의 다른 기능들

  • random.random()

    0.0 <= X < 1.0 를 만족하는 실수를 반환한다.

  • random.uniform(a, b)

    • a <= b 일 때 a <= N <= b
    • b < a 일 때 b <= N <= a
      를 만족하는 임의의 부동 소수점 숫자 N을 반환한다.
    • 종단 값 b는 방정식 a + (b-a) * random()의 부동 소수점 자리 올림에 따라 범위에 포함되거나 포함되지 않을 수 있다.
  • random.randrange(a, b)

    a <= N <= b-1 를 만족하는 임의의 정수 N을 반환한다.

  • random.choice(type)

    type에는 문자열, 리스트, 튜플, range의 값을 입력받을 수 있고 무작위로 하나의 원소를 뽑는다.






Project 2: 컴퓨터의 외부 및 내부 IP 확인하기

IP는 IPv4 또는 IPv6 등으로 표현되며 숫자로 표현된 접속주소이다. IP를 아파트의 주소에 빗댄다면 외부 IP는 OO시 XX동 **아파트이고, 내부 IP는 동, 호수로 볼 수 있다.
일반적으로 인터넷 망이 설치된 가정집에는 공유기가 있어 여러 대의 컴퓨터, 스마트폰, TV 등의 기기를 연결하여 사용한다. 내부 IP는 집에 있는 공유기가 주소를 할당하여 준다. 반면, 외부 IP는 KT, LG 등 인터넷 망 공급자가 주소를 할당하여 준다.

  1. 컴퓨터 내부 IP 확인하기
import socket

in_addr = socket.gethostbyname(socket.gethostname())

print(in_addr)

socket

컴퓨터가 연결된 접속 정보를 받아올 때 사용하는 모듈

  • socket.gethostbyname(hostname)

    호스트 이름을 IPv4 주소 형식('100.50.200.5'와 같은 문자열)으로 변환한다. 호스트 이름이 IPv4 주소면 변경되지 않고 반환된다.

  • socket.gethostname()

    파이썬 인터프리터가 현재 실행 중인 기계의 호스트 명을 포함한 문자열을 반환합니다.


그러나 이 방법으로 진행할 경우, 가상 환경 등 여러 개의 환경이 있을 때 다른 환경의 IP가 출력될 수 있어 정확하지 않다.
  1. 더 정확하게 내부 IP 확인하기
import socket

in_addr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
in_addr.connect(("www.google.co.kr", 443))
print(in_addr.getsockname()[0])

socket으로 외부 사이트에 접속하고 접속된 정보를 바탕으로 IP를 확인한다.


  • socket.socket

    class socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
    지정된 주소 패밀리, 소켓 유형, 및 프로토콜 번호를 사용하여 새로운 소켓을 만든다.
    • 주소 패밀리는 AF_INET (기본값), AF_INET6, AF_UNIX, AF_CAN, AF_PACKET 또는 AF_RDS 여야 한다.
    • 소켓 유형은 SOCK_STREAM (기본값), SOCK_DGRAM, SOCK_RAW 또는 기타 SOCK_ 상수 중 하나여야 한다.
    • 프로토콜 번호는 일반적으로 0이며 생략될 수도 있고, 주소 패밀리가 AF_CAN 일 때 프로토콜은 CAN_RAW, CAN_BCM, CAN_ISOTP 또는 CAN_J1939 중 하나여야 한다.
    • fileno를 지정하면, family, typeproto 값이 지정된 파일 기술자에서 자동 감지된다.
  • socket.connect

    address에 있는 원격 소켓에 연결한다.
    • address의 형식은 주소 패밀리에 따라 다른데, AF_INET 주소 패밀리에는 (host, port)쌍이 사용된다.
    • 여기서 host는 'daring.cwi.nl'과 같은 인터넷 도메인 표기법의 호스트 이름 또는 '100.50.200.5'와 같은 IPv4 주소를 나타내는 문자열이며, port는 정수이다. 이 코드는 https로 접속하기 위하여 port를 443으로 지정한다.
  • socket.getsockname()

    소켓 자신의 주소를 반환한다.

  1. 컴퓨터 외부 IP 확인하기
import requests
import re

req = requests.get("http://ipconfig.kr")
out_addr = re.search(r'IP Address : (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', req.text)[1]
print(out_addr)

특정 사이트에 접속해서 내가 연결된 IP를 확인한다.


requests

사이트에 접속하기 위해 불러온 모듈

  • requests.get(url)

    웹페이지를 얻는다.

re

IP 주소를 찾기 위한 정규식을 사용하기 위해 불러온 모듈





Project 28: 플라스크 웹서버 만들기

  • 플라스크
    파이썬 언어를 이용하여 웹을 개발할 수 있게 해주는 웹 개발 프레임워크
  • 프레임워크
    쉽게 개발할 수 있도록 여러 개의 라이브러리, 모듈 등을 묶어서 제공하는 기능




Project 29: 쉬운 웹앱 만들기

달력으로 날짜를 선택하여 비트코인의 시세를 1시간 단위로 그래프에 표시해주는 웹앱을 만들어보자.

Error: streamlit 명령어 실행 안 됨

1. 문제

'streamlit'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

위와 같은 오류가 뜨면서 명령어가 실행되지 않았다.

2. 시도

  • pip uninstall streamlit 명령어로 파일을 삭제하고, pip install streamlit, pip3 install streamlit, pip install streamlit --user 명령어로 재설치를 반복하였다.

  • 시스템 환경변수 Path에 streamlit 파일이 설치된 경로를 추가하였다.

  • vs code 재부팅을 반복하였다.

    이러한 시도에도 같은 오류가 발생하였다.

3. 해결

C:\Users\(계정이름)\AppData\Roaming\Python\Python39\Scripts 에 설치되어있던 streamlit.exe 파일을 복사하여 C:\ProgramData\Anaconda3\Scripts 폴더에 붙여넣었더니 정상적으로 해결되었다.





Project 30: 가상화폐 금액표시 GUI 프로그램 만들기

tkinter

Python 설치시 기본적으로 내장되어 있는 파이썬 표준 라이브러리로, 쉽고 간단하게 GUI 프로그램을 만들 때 활용된다.

  1. 기본 틀 만들기
import tkinter

window = tkinter.Tk()
window.title("가상화폐 금액표시")
window.geometry("400x200")
window.resizable(False,False)

label=tkinter.Label(window, text="hello")
label.pack()

window.mainloop()
  • tkinter.Tk()

    객체 생성
  • 윈도우이름.title("제목")

    타이틀 정의
  • 윈도우이름.geometery("너비x높이")

    GUI의 사이즈 설정
    x: 영어 소문자
  • 윈도우이름.resizable(상하,좌우)

    윈도우 창의 상하, 좌우 크기 조절 가능 여부 설정
    False: 조절하지 못함
  • tkinter.Label(윈도우이름, text="내용")

    윈도우 창에 Label 위젯 설정
  • 위젯이름.pack()

    위젯 배치
  • 윈도우이름.mainloop()

    GUI를 계속 실행하기 위해 mainloop 실행

  1. 글자 크기를 키우는 코드 만들기
import tkinter
import tkinter.font

window = tkinter.Tk()
window.title("가상화폐 금액표시")
window.geometry("400x200")
window.resizable(False,False)

font = tkinter.font.Font(size=30)
label=tkinter.Label(window, text="hello", font=font)
label.pack()

window.mainloop()

tkinter.font

폰트를 설정하기 위한 라이브러리

  • tkinter.font.Font(size=...)

    폰트 크기 지정

exe 실행파일 만들고 응용프로그램으로 실행 - Error

1. 문제

pyinstaller -w -F main30-4.py 명령어 실행 시 'pathlib' 패키지를 삭제하라는 경고 문구가 떴다.

2. 시도

conda remove pathlib
경고 문구를 따라 위 명령어를 입력하여 'pathlib' 패키지를 삭제하려 하였으나, EnvironmentNotWritableError 가 발생하였다.

3. 해결

anaconda prompt를 관리자 권한으로 실행한 후 다시 conda remove pathlib 를 입력한다.

패키지가 삭제되었다.


다시 명령어를 입력하니, 정상적으로 실행된다.

응용프로그램이 생성된 것을 확인할 수 있다.





Project 35: 가상화폐 금액표시 GUI 프로그램 만들기

pygame

게임을 만들 때 사용하는 라이브러리

0개의 댓글