异度部落格

学习是一种生活态度。

0%

'''
Created on 2011-8-1

@author: Killua
@E-mail:killua_hzl@163.com
@Description:
'''

#!/usr/bin/env python3

import os
import time

#使用os模块进行文本替换
def context_replace(file, search_for, replace_with, new_file = 'new_file'):
try:
#remove old temp
os.remove(new_file)
except os.error:
pass

#open files
fi = open(file)
fo = open(new_file, 'w')

#replace context
for line in fi.readlines():
fo.write(line.replace(search_for, replace_with))

#close files
fi.close()
fo.close()

#使用 os 列出目录下的文件
def file_list(filepath):
for filename in os.listdir(filepath):
print(filename)

#使用 os 模块查看当前工作目录
def current_word_dir():
print("Currnet Directory:" + os.getcwd())

#使用 os 模块创建/删除目录
def make_dir(dir_name):
os.mkdir(dir_name)

def delete_dir(dir_name):
if not os.path.isdir(dir_name):
print("It's not a directory")
return
else:
if len(os.listdir(dir_name)) == 0:
os.rmdir(dir_name)
else:
print("The directory you want to delete is not empty,")

#使用 os 模块获取文件属性
def get_file_info(filename):
file_state = os.stat(filename)
mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = file_state
print("size:", size, "bytes")
print("owner:", uid, gid)
print("created:", time.ctime(ctime))
print("last accessed:", time.ctime(atime))
print("last modified:", time.ctime(mtime))
print("mode:", oct(mode))
print("inode/dev", ino, dev)

#使用 os 执行操作系统命令
def os_command_excute(cmd):
os_name = os.name
if os_name == "nt":
print("Windows Command")
else:
print("Unix/Linux Command")
os.system(cmd)

#Test
def main():
#===Just For Test===
#context_replace("sample", 'a', 'A')
#file_list('/')
#current_word_dir()
#make_dir('sample_dir')
#delete_dir('sample_dir')
#get_file_info("sample")
os_command_excute("ls -l")

if __name__ == "__main__":
main()

Private Sub 与 Function 在 VB 程序设计中的区别
function 是函数,sub 是子程序,都可以传递参数,但函数有返回值,子程序没有
function 可以用自身名字返回一个值,sub 需定义别的变量,用传址方式传回值。

Sub 过程与 Function 过程的区别:
1. Sub 过程定义时无需定义返回值类型,而 Function 过程一般需要用“As 数据类型” 定义函数返回值类型。
2. Sub 过程中没有对过程名赋值的语句,而 Function 过程中一定有对函数名赋值的语句。
3. 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub 过程的是一个独立的语句,而调用函数过程只是表达式的一部分。Sub 过程还有一点与函数不一样,它不会用名字返回一个值。但是,与 Function 过程一样,Sub 过程也可以修改传递给它们的任何变量的值。
4. 调用 Sub 过程有两种方法:
以下两个语句都调用了名为 MyProc 的 Sub 过程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号。

类可以实例化为对象,而模块则不能。由于模块的数据只有一个副本,因此当程序的一部分更改模块中的公共变量时,如果程序的其他任何部分随后读取该变量,都会获取同样的值。与之相反,每个实例化对象的对象数据则单独存在。

类可以被继承,也可以实现接口,模块则不能

在类中定义的成员其作用范围在类的特定实例内,并且只存在于对象的生存周期内。要从类的外部访问类的成员,必须使用全限名称,格式为 Object.Member

1.安装 Python

sudo apt-get install python
sudo apt-get install python-dev

2.安装 Ant

sudo apt-get install ant

3.安装 setuptools

sudo apt-get install python-setuptools

打补丁:

mkdir tmp
cd tmp
unzip -q /usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg
patch -Nup0 < /home/killua/Download/pylucene-3.1.0-1/jcc/jcc/patches/patch.43.0.6c11
sudo zip /usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg -f
cd com, and it provides a fantastic selection of <a href="http://slotmachineitaliane.net">slotmachineitaliane.net</a> games, bonuses, promotions and more. ..
rm -rf tmp

4.安装 JDK

sudo apt-get install openjdk-6-jdk

5.安装 Pylucene 下载地址:http://www.apache.org/dyn/closer.cgi/lucene/pylucene/ tar xzvf pylucene-3.0.1-1-src.tar.gz cd pylucene-3.0.1-1/jcc

6.安装 jcc

python setup.py build
sudo python setup.py install

7.修改 Makeifle 打开了这几行注释:

# Linux   (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9)
PREFIX_PYTHON=/usr
ANT=ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=3

修改-m jcc 为 -m jcc.main

8.编译安装 Pylucene

make
sudo make install

【试题描述】
给你一个二进制序列比如10100,进行左循环移位n
次,n是二进制序列的长度,每移位一次产生一个新二进制序列
序列1
10100
01001
10010
00101
01010
然后把这些序列进行排序,变成序列2

序列2
00101
01001
01010
10010
10100
提取最后一列(注意是列不是行):11000
现在给你序列2的最后一列11000,让我们求出序列2的第一行
  【试题来源】某大学研究生复试面试题
  【试题分析】
首先经过n次变化然后排序所得序列2是个nn的矩阵M。M矩阵的每一行无论是同时左移或者同时右移I位后得到的新矩阵P,这个新的矩阵的每一行其实还是能在矩阵M中找到。因此,任意一列都包含了原序列的所有信息。
这里我们有最后一列,只要将最后一列排序即可得到第一列的元素。
这样我们就可以知道第一列F和最后一列L这时将矩阵每一位循环右移,则此时的矩阵第一列为L,第二列为F。
然后按照前两列组成的序列进行排序,得到新的矩阵。所得矩阵的第一列与原矩阵第一列相同,即为F,于是第二列为原矩阵的第二列,于是可以求得第二列。
此时就得到的第一列,第二列,以及已知的最后一列,然后再次右移排序,可以得到第三列。
经过数次变换可以得到整个矩阵M,即可求得序列2的第一行。
  【算法】
假设变换2的最后一列记为L(实现上可以作为1维数组)
1. 建立一个n
n的矩阵M(实现上可以作为2维数组),初始值为全0
2. 将L复制到M的第一列(最左边的一列)
3. 对M的第一列进行排序(从小到大)
4. 循环n-2次{将M的每行右移1位;将L复制到M的第一列;将M按行排序}
5. 将L复到M的最后1列(最右边的一列)
此时的M就是变化2后的矩阵。
【代码】

#-------------------------------------------------------------------------------
# Name: BinarySequence.py
# Purpose:
#
# Author: Killua
#
# Created: 17/04/2011
# Copyright: (c) Killua 2011
# Licence: <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
def BinarySequence(lastColumn):
n = len(lastColumn);
M = ['0'*n for i in range(n)]; #初始化一个空矩阵
#将最后一列赋值给矩阵
for i in range(n):
M[i] = M[i][:n-1] + lastColumn[i];
#循环移位排序n-1次
for i in range(n-1):
#循环移位
for j in range(n):
M[j] = lastColumn[j] + M[j][:n-1];
#排序
M.sort();
#最后一列赋回
for k in range(n):
M[k] = M[k][:n-1] + lastColumn[k];
return M[0];
def main():
#Test
lastColumn = "11000";
res = BinarySequence(lastColumn);
print("排序后的矩阵第一行:" + res);
if __name__ == '__main__':
main()

【参考资料】 http://topic.csdn.net/u/20110405/13/9393c9a7-b86c-482d-acaf-e8c391541875.html http://topic.csdn.net/u/20110405/13/385ab3c5-a21b-407e-9773-a667d327d0ee.html?41862 http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform

系统版本:Ubuntu 10.10

Python 安装

sudo apt-get install python

Apache 安装

sudo apt-get install apache2

mod_python 模块安装

sudo apt-get install libapache2-mod-python

测试 Apache

重启电脑后,在浏览器中输入:http://localhost

出现"It works"说明安装成功

安装 django

下载 Django-1.3.tar.gz

tar xzvf Django-1.3.tar.gz
cd Django-1.3
sudo python setup.py install

测试 django

在 Python 命令行中输入

import django
print django.get_version()

如果无错误则安装成功。

mysql 安装

sudo apt-get install mysql-server mysql-client mysql-admin

python mysql 支持:

sudo  apt-get install python-mysqldb

#-------------------------------------------------------------------------------
# Name: Sort.py
# Purpose:
#
# Author: Killua
# E-mail: killua_hzl@163.com
# Created: 11-04-2011
# Copyright: (c) Killua 2011
#-------------------------------------------------------------------------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys;
import random;
import time;
#冒泡排序
def BubbleSort(array):
for i in range(0,len(array)):
flag = True;
for j in range(i,0,-1):
if array[j] < array[j-1]:
array[j-1], array[j] = array[j], array[j-1];
flag = False;
if flag :
break;
#选择排序
def SelectSort(array):
for i in range(0, len(array)):
pMin = i;
for j in range(i+1, len(array)):
if array[j] < array[pMin]:
pMin = j;
if pMin != i :
array[i], array[pMin] = array[pMin], array[i];
#插入排序
def InsertSort(array):
for i in range(1, len(array)):
for j in range(i,0,-1):
if array[j] < array[j-1]:
array[j],array[j-1] = array[j-1],array[j];
else:
break;
#快速排序
def partition(array, left, right):
mid = (left + right) / 2;
tmp = array[mid];
i = left;
j = right;
while(True):
if i == j:
array[i] = tmp;
return i;
if array[i] > tmp:
array[i] = array[j];
j = j - 1;
break;
i = i + 1;
while(True):
if i == j:
array[i] = tmp;
return i;
if array[j] < tmp:
array[j] = array[i];
i = i - 1;
break;
j = j - 1;
def quickSort(array, left, right):
if left >= right:
pivot = partition(array, left, right);
quickSort(array,left, pivot - 1);
quickSort(array, pivot + 1, right);
def QuickSort(array):
quickSort(array, 0, len(array) - 1);
#希尔排序
def ShellSort(array):
delta = int(len(array) / 2);
while delta > 0:
for i in range(0, delta):
for j in range(i + delta, len(array), delta):
for k in range(j, 0, -delta):
if array[k] < array[k-delta]:
array[k],array[k-delta] = array[k-delta],array[k];
delta = int(delta / 2);
#归并排序
def merge(array, left, right, middle):
i = left;
j = middle + 1;
tmp = [];
while i <= middle and j <= right:
if array[i] < array[j]:
tmp.append(array[i]);
i = i + 1;
else:
tmp.append(array[j]);
j = j + 1;
while i <= middle:
tmp.append(array[i]);
i = i + 1;
while j <= right:
tmp.append(array[j]);
j = j + 1;
array[left : right] = tmp[0 : -1]; #此处不能写成array[left : right] = tmp;
def mergeSort(array, left, right):
if left < right:
middle = int((left + right) / 2);
mergeSort(array, left, middle);
mergeSort(array, middle + 1, right);
merge(array, left, right, middle);
def MergeSort(array):
mergeSort(array, 0, len(array) - 1);
#堆排序
def heapAdjust(array, s, e):
tmp = array[s];
i = s * 2;
while i <= e:
if i + 1 <= e and array[i] < array[i+1]:
i = i + 1;
if array[i] < array[s]:
array[s] = array[i];
i = s;
else:
break;
i = i * 2;
array[s] = tmp;
def HeapSort(array):
for i in (int((len(array) - 1)/2), 0, -1):
heapAdjust(array, i, len(array) - 1);
for i in (len(array) - 1, 0, -1):
array[i], array[0] = array[0], array[i];
heapAdjust(array, 0, i);
#数据生成
def RandomNumGenerate(n):
data = [];
for i in range(0,n):
data.append(random.randint(0,1000));
return data;

【题目描述】 求1+2+…+n 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句   【题目来源】未知   【题目分析】 一般求1+2+…n,是使用循环或者阶乘,这边加限制条件可以考虑用递归。如果使用递归的话,最重要的就是考虑递归退出条件,由于不能用if语句,而退出必然需要判断,于是使用了bool型表达式,用于终止函数的继续递归。   【代码】

#include<iostream>
using namespace std;
int sum(int n)
{
int res = 0;
int i = 1;
(n > 0)&&(res = sum(n-1) + n);
return res;
}
int main()
{
//Just For Test
int res = sum(100);
cout << res <<endl;
return 0;
}

单击单元格,点"格式"->"条件格式"

设定条件

点"格式"->"字体"->"颜色",选中你喜欢的颜色

点"确定"。

【题目描述】连续整数之和为1000可分为几组

【题目来源】Microsoft

【题目分析】 假设连续的整数之和为从n到m。那么n累加到m的和为(n+m)(m-n+1)/2=1000。
即(n+m)(m-n+1) = 2000。也就是说要将2000分解为一个奇数和偶数的乘积。
将2000因式分解得到2000 = 2^4 * 5^3。
于是可以分为4组
2000 = 16125
2000 = 80
25
2000 = 400 * 5
2000 = 2000 * 1
解二元一次方程可以得到各个n和m。