'Coding > Python 삽질기' 카테고리의 다른 글
| [Python] Simple template maker (0) | 2010.02.02 |
|---|---|
| [Python] 초간단 Lotto 생성기 소스 (0) | 2010.01.22 |
| [Python] Simple file viewer (0) | 2010.01.02 |
| [Python] Simple template maker (0) | 2010.02.02 |
|---|---|
| [Python] 초간단 Lotto 생성기 소스 (0) | 2010.01.22 |
| [Python] Simple file viewer (0) | 2010.01.02 |
| [Python] 짧은 코드 모음 (0) | 2010.01.22 |
|---|---|
| [Python] Simple file viewer (0) | 2010.01.02 |
| [Python] 회전 이동 (0) | 2009.08.25 |
#-*- coding: cp949 -*-
# Name : py_fileview.py
# Author : chobocho.com
# Version :
# Copyright :
# Description : Simple text file viewer
#
from Tkinter import *
import tkMessageBox
import os.path
import glob
class App:
def __init__ (self, master):
frame = Frame(master)
frame.pack()
# Text Area
f0 = Frame(frame, width = 100, height = 100)
f0.grid(row = 0, column = 0)
self.text_scrollbar = Scrollbar (f0, orient=VERTICAL)
self.text = Text(f0, width=80, height = 20, yscrollcommand=self.text_scrollbar.set)
self.text_scrollbar.config(command=self.text.yview)
self.text_scrollbar.pack(side=RIGHT, fill=Y)
self.text.pack()
# List Box area
f1 = Frame(frame, width = 100, height = 100)
f1.grid(row = 0, column = 1)
self.list_button = Button(f1, text="File List", command=self.ShowInfo)
self.list_button.pack()
self.listbox_scrollbar = Scrollbar (f1, orient=VERTICAL)
self.listbox = Listbox(f1, height=19, yscrollcommand=self.listbox_scrollbar.set)
self.listbox_scrollbar.config(command=self.listbox.yview)
self.listbox_scrollbar.pack(side=RIGHT, fill=Y)
# 파일 내용을 읽어서 보여 줄 것
self.ReadTemplate()
self.listbox.bind("<Double-Button-1>", self.LoadFile)
self.listbox.pack(side=RIGHT)
def ClearText(self):
self.text.delete(1.0, END)
def ShowInfo(self):
tkMessageBox.showinfo("Information","http://chobocho.com\nVersion 0.2")
def ReadTemplate(self):
all_flist = glob.glob ("*.txt")
for f in all_flist:
if os.path.exists(f):
self.listbox.insert(END, f.decode('cp949'))
def LoadFile(self, event):
self.items = self.listbox.curselection()
self.el = self.listbox.get(self.items)
self.ClearText()
if os.path.exists(self.el):
self.fp = open(self.el, 'r')
self.tempFileData = self.fp.read()
self.fp.close()
self.text.insert(1.0, self.tempFileData.decode('cp949'))
#----------------------------------------------------------
# main
if __name__ == "__main__":
root = Tk()
app = App(root)
root.mainloop()
| [Python] 초간단 Lotto 생성기 소스 (0) | 2010.01.22 |
|---|---|
| [Python] 회전 이동 (0) | 2009.08.25 |
| WxPython - HelloWorld (0) | 2008.12.22 |
# 원점에서 100만큼 떨어진 점 (0, 100)을 원점을 중심으로 15도씩 회전 하였을 때의 좌표
# 리스트를 계산하는 코드
import math
point_xy = []
for idx in range (0, 24) :
end_y = -100;
degree = 15.0 * idx
rad = math.pi * degree / 180.0
new_end_x = int(-end_y * math.sin(rad))
new_end_y = int(end_y * math.cos(rad))
point_xy.append((new_end_x, new_end_y))
print point_xy
| [Python] Simple file viewer (0) | 2010.01.02 |
|---|---|
| WxPython - HelloWorld (0) | 2008.12.22 |
| Sudoku를 풀어주는 스크립트 (0) | 2008.10.09 |
| [Python] 회전 이동 (0) | 2009.08.25 |
|---|---|
| Sudoku를 풀어주는 스크립트 (0) | 2008.10.09 |
| [조각코드] 숫자 배열 읽어서 리스트에 저장하는 코드 (0) | 2008.10.06 |
#!/usr/local/bin/python
#-*- coding: cp949 -*-
# date : 2006. 10. 15
#
# 스도쿠를 풀어주는 스크립트
import random
class Sodoku:
def __init__(self):
self.timer = 0
self.board = []
self.tmpBoard=[]
for y in range(0, 82):
self.board.append(0)
self.tmpBoard.append(511)
def display(self):
for y in range(0, 9):
for x in range(0, 9):
idx = y* 9 + x + 1;
if self.board[idx] != 0:
print "%d" %(self.board[idx]),
else:
print "_",
print '|',
print '\n'
def checkSquare(self, sx, sy):
sum = 0;
for y in range(0, 3):
for x in range(0, 3):
if ( int(self.board[ (y+sy)*9+(x+sx)+1]) > 0):
sum |= (1 << (int(self.board[ (y+sy)*9+(x+sx)+1]-1)))
return sum
def checkBoard(self):
ret = 0;
for y in range(0, 9):
sum = 0;
for x in range(0, 9):
if ( int(self.board[y*9+x+1]) > 0):
sum |= (1 << (int(self.board[y*9+x+1]-1)))
if (sum != 511):
ret = 1
for x in range(0, 9):
sum = 0;
for y in range(0, 9):
if ( int(self.board[y*9+x+1]) > 0):
sum |= (1 << (int(self.board[y*9+x+1]-1)))
if (sum != 511):
ret = 2
for y in range(0, 3):
for x in range(0, 3):
sum = self.checkSquare(x*3, y*3)
if (sum != 511):
ret = 3
return ret
def readData(self):
fp = open("sudoku.dat", 'r')
self.board = map(int, fp.read().split(','))
fp.close()
for y in range(0, 82):
self.tmpBoard[y] =511
def guessCount(self, num):
count = 0
for i in range(0, 9):
if ( (1 << i) & num ) != 0:
count += 1
return count
def findStartPos(self):
sx = 0
sy = 0
mvalue = 511
mcount = 10
for y in range(0,9):
for x in range(0,9):
if (self.board[y * 9 + x + 1] == 0):
temp = self.guessCount(self.tmpBoard[y*9 + x + 1] )
if (mcount > temp):
mvalue = self.tmpBoard[y*9 + x + 1]
mcount = temp
sx = x
sy = y
return (sx, sy, mvalue)
def isFull(self):
count = 0
for y in range(0,9):
for x in range(0,9):
if (self.board[y * 9 + x + 1] != 0):
count += 1
return count == 81
def solve(self):
if (self.checkBoard() != 0):
if (self.isFull()):
return 0
#get position
(x, y, num) = self.findStartPos()
# set number
for i in range(0, 9):
if ( (1 << i) & num ) != 0:
self.board[y*9 + x + 1] = i+1
# checkTempBoard
self.checkWidthTempBoard(x, y)
self.checkHeightTempBoard(x, y)
self.checkSquareTempBoard(x/3, y/3, x, y)
if (self.solve() == 1):
return 1
else:
self.unCheckWidthTempBoard(x, y)
self.unCheckHeightTempBoard(x, y)
self.unCheckSquareTempBoard(x/3, y/3, x, y)
self.board[y*9 + x + 1] = 0
return 0
else:
return 1
def checkTempBoard(self):
for y in range(0, 9):
for x in range(0, 9):
if (self.board[y * 9 + x + 1] != 0):
self.checkWidthTempBoard(x, y)
self.checkHeightTempBoard(x, y)
self.checkSquareTempBoard(x/3, y/3, x, y)
def checkWidthTempBoard(self, sx, sy):
for x in range(0,9):
if (self.board[sy * 9 + x + 1] == 0):
self.tmpBoard[sy * 9 + x + 1] &= ~(1 << (self.board[sy * 9 + sx + 1] - 1))
def checkHeightTempBoard(self, sx, sy):
for y in range(0,9):
if (self.board[y * 9 + sx + 1] == 0):
self.tmpBoard[y * 9 + sx + 1] &= ~(1 << (self.board[sy * 9 + sx + 1] - 1))
def checkSquareTempBoard(self, sx, sy, tx, ty):
for y in range(0,3):
for x in range(0,3):
if (self.board[(y + sy) * 9 + sx + x + 1] == 0):
self.tmpBoard[(y + sy * 3) * 9 + sx * 3 + x + 1] &= ~(1 << (self.board[ty * 9 + tx + 1] - 1))
def unCheckWidthTempBoard(self, sx, sy):
for x in range(0,9):
if (self.board[sy * 9 + x + 1] == 0):
self.tmpBoard[sy * 9 + x + 1] |= (1 << (self.board[sy * 9 + sx + 1] - 1))
def unCheckHeightTempBoard(self, sx, sy):
for y in range(0,9):
if (self.board[y * 9 + sx + 1] == 0):
self.tmpBoard[y * 9 + sx + 1] |= (1 << (self.board[sy * 9 + sx + 1] - 1))
def unCheckSquareTempBoard(self, sx, sy, tx, ty):
for y in range(0,3):
for x in range(0,3):
if (self.board[(y + sy) * 9 + sx + x + 1] == 0):
self.tmpBoard[(y + sy * 3) * 9 + sx * 3 + x + 1] |= (1 << (self.board[ty * 9 + tx + 1] - 1))
def generate(self):
self.readData()
self.checkTempBoard()
def main():
sodoku = Sodoku()
sodoku.generate()
sodoku.display()
sodoku.solve()
print "-"*60
sodoku.display()
#----------------------------------------------------------
# main
if __name__ == "__main__":
main()
[실행결과]
6 | _ | 9 | _ | _ | _ | _ | 4 | 3 |
_ | _ | _ | 2 | 9 | _ | 7 | 1 | _ |
_ | _ | 4 | _ | 1 | _ | _ | 5 | 8 |
5 | _ | _ | _ | _ | 8 | _ | 6 | _ |
8 | _ | 7 | 1 | _ | 9 | 4 | _ | 5 |
_ | 3 | _ | 7 | _ | _ | _ | _ | 2 |
1 | 5 | _ | _ | 8 | _ | 3 | _ | _ |
_ | 4 | 8 | _ | 6 | 2 | _ | _ | _ |
7 | 2 | _ | _ | _ | _ | 6 | _ | 9 |
-----------------------------
6 | 1 | 9 | 8 | 7 | 5 | 2 | 4 | 3 |
3 | 8 | 5 | 2 | 9 | 4 | 7 | 1 | 6 |
2 | 7 | 4 | 6 | 1 | 3 | 9 | 5 | 8 |
5 | 9 | 2 | 4 | 3 | 8 | 1 | 6 | 7 |
8 | 6 | 7 | 1 | 2 | 9 | 4 | 3 | 5 |
4 | 3 | 1 | 7 | 5 | 6 | 8 | 9 | 2 |
1 | 5 | 6 | 9 | 8 | 7 | 3 | 2 | 4 |
9 | 4 | 8 | 3 | 6 | 2 | 5 | 7 | 1 |
7 | 2 | 3 | 5 | 4 | 1 | 6 | 8 | 9 |
| WxPython - HelloWorld (0) | 2008.12.22 |
|---|---|
| [조각코드] 숫자 배열 읽어서 리스트에 저장하는 코드 (0) | 2008.10.06 |
| 간단한 메모장2 (0) | 2008.09.17 |
| Sudoku를 풀어주는 스크립트 (0) | 2008.10.09 |
|---|---|
| 간단한 메모장2 (0) | 2008.09.17 |
| 간단한 메모장 (0) | 2008.09.14 |
def LoadData():
if os.path.exists(filename):
fp = open(filename, 'r')
tempFileData = fp.read()
fp.close()
text.insert(1.0, tempFileData.decode('cp949'))
def SaveData():
textData = text.get(1.0, END).encode('cp949')
fp = open(filename, 'w')
fp.write(textData)
fp.close()
def ShowInfo():
tkMessageBox.showinfo("Information","http://chobocho.com\nVersion 0.2")
#----------------------------------------------------------
# main
if __name__ == "__main__":
root = Tk()
text = Text(root, width=50, height = 20)
text.pack()
append_button = Button(root, text="Append", command = AppendData)
save_button = Button(root, text="Save", command = SaveData)
clear_button = Button(root, text="Clear", command = ClearText)
load_button = Button(root, text="Load", command = LoadData)
info_button = Button(root, text="Info", command = ShowInfo)
info_button.pack(side=RIGHT)
load_button.pack(side=RIGHT)
clear_button.pack(side=RIGHT)
save_button.pack(side=RIGHT)
append_button.pack(side=RIGHT)
root.mainloop()
| [조각코드] 숫자 배열 읽어서 리스트에 저장하는 코드 (0) | 2008.10.06 |
|---|---|
| 간단한 메모장 (0) | 2008.09.14 |
| Fractal Tree (0) | 2008.06.21 |
| 간단한 메모장2 (0) | 2008.09.17 |
|---|---|
| Fractal Tree (0) | 2008.06.21 |
| 파일을 HEX 값으로 보여 주는 소스 (0) | 2008.05.19 |
| 간단한 메모장 (0) | 2008.09.14 |
|---|---|
| 파일을 HEX 값으로 보여 주는 소스 (0) | 2008.05.19 |
| Post it 만들기 (0) | 2008.03.04 |