반응형

# sudoku using python

def is_valid_move(board, row, col, num):
    """
    Check if placing 'num' at position (row, col) is a valid move.
    """
    # Check the row
    if num in board[row]:
        return False

    # Check the column
    if num in [board[i][col] for i in range(9)]:
        return False

    # Check the 3x3 subgrid
    start_row, start_col = 3 * (row // 3), 3 * (col // 3)
    for i in range(start_row, start_row + 3):
        for j in range(start_col, start_col + 3):
            if board[i][j] == num:
                return False

    return True

def solve_sudoku(board):
    """
    Solve the Sudoku puzzle using backtracking.
    """
    empty_cell = find_empty_cell(board)

    if not empty_cell:
        # Puzzle is solved
        return True

    row, col = empty_cell

    for num in range(1, 10):
        if is_valid_move(board, row, col, num):
            board[row][col] = num

            if solve_sudoku(board):
                return True

            # If the current placement doesn't lead to a solution, backtrack
            board[row][col] = 0

    # No valid move found, need to backtrack
    return False

def find_empty_cell(board):
    """
    Find an empty cell in the Sudoku grid.
    """
    for i in range(9):
        for j in range(9):
            if board[i][j] == 0:
                return (i, j)
    return None

def print_board(board):
    """
    Print the Sudoku grid.
    """
    for i in range(9):
        if i % 3 == 0 and i != 0:
            print("- - - - - - - - - - - -")
        for j in range(9):
            if j % 3 == 0 and j != 0:
                print("|", end=" ")
            print(board[i][j], end=" ")
        print()

# Example Sudoku puzzle (0 represents empty cells)
sudoku_board = [
    [5, 3, 0, 0, 7, 0, 0, 0, 0],
    [6, 0, 0, 1, 9, 5, 0, 0, 0],
    [0, 9, 8, 0, 0, 0, 0, 6, 0],
    [8, 0, 0, 0, 6, 0, 0, 0, 3],
    [4, 0, 0, 8, 0, 3, 0, 0, 1],
    [7, 0, 0, 0, 2, 0, 0, 0, 6],
    [0, 6, 0, 0, 0, 0, 2, 8, 0],
    [0, 0, 0, 4, 1, 9, 0, 0, 5],
    [0, 0, 0, 0, 8, 0, 0, 7, 9]
]

print("Sudoku Puzzle:")
print_board(sudoku_board)
print("\nSolving...\n")

if solve_sudoku(sudoku_board):
    print("Sudoku Solution:")
    print_board(sudoku_board)
else:
    print("No solution exists.")
반응형
반응형

[한빛미디어] "이것이 취업을 위한 코딩 테스트다 with 파이썬" 전체 소스코드 저장소입니다
https://github.com/ndb796/python-for-coding-test

Types of Algorithm

    Searching
    Sorting
    Recursive
    Backtracking
    Greedy
    Randomized
    Divide & Conquer
    Dynamic Programing


 https://www.instagram.com/p/CxZgarwyv_2/?igshid=MjNiZGVkZTJkZQ%3D%3D 



https://www.geeksforgeeks.org/python-data-structures-and-algorithms/

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[python] sudoku 만들기  (0) 2023.09.27
[python] How to send text messages with Python for Free  (0) 2023.09.26
[python] GUI 비밀번호 자동 생성기  (0) 2023.09.18
[python] pyperclip  (0) 2023.09.18
[Python] kivy  (0) 2023.09.15
반응형

PyMuPDF is a high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents.

https://pypi.org/project/PyMuPDF/

>> pip install PyMuPDF

 

https://mupdf.com/

 

1.디렉토리 안의 pdf 파일을 읽어들여서 리스트 목록을 출력

2.파일명을 넘기면 파일명_이미지순서.png 파일을 생성. 

import fitz  # PyMuPDF

 
# 파이썬 컴파일 경로가 달라서 현재 폴더의 이미지를 호출하지 못할때 작업디렉토리를 변경한다. 
import os
from pathlib import Path
# src 상위 폴더를 실행폴더로 지정하려고 한다.
###real_path = Path(__file__).parent.parent
real_path = Path(__file__).parent
print(real_path)
#작업 디렉토리 변경
os.chdir(real_path) 

directory_base = str(real_path)+"./ONE/"  # 경로object를 문자열로 변경해서 합친다. 
 


def pdf_to_png(pdf_file, input_pdf_name, output_folder):
    # Open the PDF file
    pdf_document = fitz.open(pdf_file)
    
    for page_number in range(pdf_document.page_count):
        # Get the page
        page = pdf_document[page_number]
        
        # Convert the page to an image
        image = page.get_pixmap()
        
        # Save the image as a PNG file
        image.save(f"{output_folder}/{input_pdf_name}_{page_number + 1}.png", "png")

    # Close the PDF file
    pdf_document.close()

if __name__ == "__main__":
     
    # List all files in the directory
    file_list = [f for f in os.listdir(directory_base) if os.path.isfile(os.path.join(directory_base, f))]

    # Print the list of files
    for file in file_list:
        print(file)
        
        #input_pdf = "./TWO/"+ file_name +".pdf"  # Replace with your PDF file path
        input_pdf      = "./ONE/"+ file  # Replace with your PDF file path
        input_pdf_name = os.path.splitext(file)[0]
        print(input_pdf_name)
        output_folder  = "./ONE/data"  # Replace with your output folder
        
        pdf_to_png(input_pdf, input_pdf_name, output_folder)

 

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[python] pyperclip  (0) 2023.09.18
[Python] kivy  (0) 2023.09.15
[python] PyMuPDF로 코딩 없이 PDF에서 이미지 추출  (0) 2023.09.14
[python] cowsay  (0) 2023.09.14
[PYTHON] Python tkinter 강좌  (0) 2023.08.25
반응형

[python] chatGPT에게 TicTacToe 만들어달라고 했다. 

import tkinter as tk
from tkinter import messagebox

class TicTacToe:
    def __init__(self, root):
        self.root = root
        self.root.title("Tic-Tac-Toe")

        self.current_player = "X"
        self.board = [""] * 9

        self.buttons = []
        for i in range(9):
            button = tk.Button(root, text="", width=10, height=3, command=lambda i=i: self.make_move(i))
            button.grid(row=i // 3, column=i % 3)
            self.buttons.append(button)

    def make_move(self, position):
        if not self.board[position]:
            self.board[position] = self.current_player
            self.buttons[position].config(text=self.current_player)
            
            if self.check_winner():
                messagebox.showinfo("Game Over", f"Player {self.current_player} wins!")
                self.reset_game()
            elif all(cell != "" for cell in self.board):
                messagebox.showinfo("Game Over", "It's a draw!")
                self.reset_game()
            else:
                self.current_player = "O" if self.current_player == "X" else "X"

    def check_winner(self):
        winning_combinations = [(0, 1, 2), (3, 4, 5), (6, 7, 8),
                                (0, 3, 6), (1, 4, 7), (2, 5, 8),
                                (0, 4, 8), (2, 4, 6)]

        for combo in winning_combinations:
            if self.board[combo[0]] == self.board[combo[1]] == self.board[combo[2]] != "":
                return True
        return False

    def reset_game(self):
        self.current_player = "X"
        self.board = [""] * 9
        for button in self.buttons:
            button.config(text="")

if __name__ == "__main__":
    root = tk.Tk()
    game = TicTacToe(root)
    root.mainloop()
반응형
반응형

https://pypi.org/project/secure-smtplib/

 

secure-smtplib

Secure SMTP subclasses for Python 2

pypi.org

secure-smtplib 0.1.1

 

pip install secure-smtplib

 

 

.chatGPT에게 " python email sending app " 이라고 질문했다. 

# chatGPT - python email sending app 
import tkinter as tk
from tkinter import messagebox
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email():
    sender_email = sender_email_entry.get()
    sender_password = sender_password_entry.get()
    recipient_email = recipient_email_entry.get()
    subject = subject_entry.get()
    message = message_text.get("1.0", tk.END)
    
    try:
        # Set up the SMTP server
        smtp_server = smtplib.SMTP("smtp.gmail.com", 587)
        smtp_server.starttls()
        smtp_server.login(sender_email, sender_password)
        
        # Create the email
        email = MIMEMultipart()
        email["From"] = sender_email
        email["To"] = recipient_email
        email["Subject"] = subject
        email.attach(MIMEText(message, "plain"))
        
        # Send the email
        smtp_server.sendmail(sender_email, recipient_email, email.as_string())
        smtp_server.quit()
        
        messagebox.showinfo("Success", "Email sent successfully!")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {str(e)}")

# Create the main GUI window
root = tk.Tk()
root.title("Email Sending App")

# Create and place widgets
sender_email_label = tk.Label(root, text="Sender Email:")
sender_email_label.pack()

sender_email_entry = tk.Entry(root)
sender_email_entry.pack()

sender_password_label = tk.Label(root, text="Sender Password:")
sender_password_label.pack()

sender_password_entry = tk.Entry(root, show="*")
sender_password_entry.pack()

recipient_email_label = tk.Label(root, text="Recipient Email:")
recipient_email_label.pack()

recipient_email_entry = tk.Entry(root)
recipient_email_entry.pack()

subject_label = tk.Label(root, text="Subject:")
subject_label.pack()

subject_entry = tk.Entry(root)
subject_entry.pack()

message_label = tk.Label(root, text="Message:")
message_label.pack()

message_text = tk.Text(root, height=10, width=40)
message_text.pack()

send_button = tk.Button(root, text="Send Email", command=send_email)
send_button.pack()

root.mainloop()
반응형
반응형

[python] chatGPT가 만들어준 tkinter 이용한 영화추천 프로그램 

 

질문 : python gui program make a recomendation

 

 

import tkinter as tk
from tkinter import messagebox

# Sample movie data
movies = {
    "Action": ["Die Hard", "Mad Max: Fury Road", "The Dark Knight"],
    "Comedy": ["The Hangover", "Superbad", "Anchorman"],
    "Drama": ["The Shawshank Redemption", "Forrest Gump", "The Godfather"]
}

def get_recommendation():
    selected_genre = genre_var.get()
    
    if selected_genre:
        recommendations = movies.get(selected_genre, [])
        
        if recommendations:
            recommended_movies.set("\n".join(recommendations))
        else:
            recommended_movies.set("No recommendations available for this genre.")
    else:
        messagebox.showinfo("Error", "Please select a genre.")

# Create the main GUI window
root = tk.Tk()
root.title("Movie Recommendation")

# Create and place widgets
genre_label = tk.Label(root, text="Select a genre:")
genre_label.pack()

genre_var = tk.StringVar()
genre_dropdown = tk.OptionMenu(root, genre_var, *movies.keys())
genre_dropdown.pack()

recommend_button = tk.Button(root, text="Get Recommendation", command=get_recommendation)
recommend_button.pack()

recommended_movies = tk.StringVar()
recommended_movies_label = tk.Label(root, textvariable=recommended_movies)
recommended_movies_label.pack()

root.mainloop()
반응형
반응형

PyQt5에 대해  https://doc.qt.io/

 



  • PyQt5는 Qt5 어플리케이션 프레임워크에 대한 파이썬 버전입니다. Qt는 플랫폼에 관계없이 다양한 기능을 포함하는 C++ 라이브러리이자 개발툴입니다.
  • PyQt5는 이러한 1000여 개의 클래스들을 포함하는 파이썬 모듈의 모음입니다.
  • PyQt5는 윈도우, 리눅스, macOS, 안드로이드, iOS를 지원합니다.
  • PyQt5의 홈페이지(https://www.riverbankcomputing.com/software/pyqt/intro)에서 최신의 그리고 안정적인 버전의 PyQt5와 최신 버전의 문서를 얻을 수 있습니다.
  • PyQt5 개발자는 GPL과 상업용 라이센스 중 하나를 선택할 수 있습니다.
    (PyQt5 라이센스 관련: https://www.riverbankcomputing.com/commercial/license-faq)
반응형
반응형

[python] 파이썬으로 만드는 나만의 GUI 프로그램https://wikidocs.net/book/2165

 

PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램

## 소개 - 한국어로 되어있는 PyQt5 자료가 많지 않아서 아래의 여러 튜토리얼과 강의의 예제를 정리하며 시작했습니다. - **PyQt5의 설치**부터 시작해서, **…

wikidocs.net

 

순서

01. 소개 (Introduction) - Python과 PyQt5에 대해 간략하게 설명합니다.





02. 설치 (Installation) - 개발 환경 구성을 위해 파이참과 아나콘다를 설치합니다.




03. 기초 (Basics) - GUI 프로그램의 기본 기능에 대해 알아봅니다.




04. 레이아웃 (Layout) - 구성 요소를 배치하는 방법에 대해 알아봅니다.




05. 위젯 (Widget) - 유용하게 사용할 수 있는 다양한 위젯들을 알아봅니다.




06. 다이얼로그 (Dialog) - 사용자가 프로그램과 상호작용하는 방식에 대해 알아봅니다.




07. 시그널과 슬롯 (Signal & Slot) - PyQt5에서의 이벤트 처리에 대해 알아봅니다.




08. 그림 그리기 (Painting) - PyQt5의 다양한 그림 그리기 기능을 활용합니다.




09. 실행파일 만들기 (PyInstaller) - 작성한 프로그램을 실행파일로 만들어봅니다.







참고한 튜토리얼과 강의

  1. PyQt5 공식 문서 (http://pyqt.sourceforge.net/Docs/PyQt5/)
  2. pythonspot (https://pythonspot.com/gui/)
  3. zetcode (http://zetcode.com/gui/pyqt5/)
  4. opentutorials.org (https://opentutorials.org/module/544)
  5. tutorialspoint (https://www.tutorialspoint.com/pyqt/)
  6. udemy 강의1: Python Desktop Application Development with PyQt
  7. udemy 강의2: Create Simple GUI Applications with Python and Qt
반응형

+ Recent posts