Oct 29

这里仅以d=1,a1=1,s=100的情况

1...100

如果要插入3 39 49 50这几位,而相应的后续项则应当加上d,以便仍然形成新的数列。

只要求加一次的做法:首先得到要插入的数字个数m=4, 然后以插入数中最大数50开始,后续所有项(含本项)加上m, 插入数中第二大的到最大数之间的项加上m=3,依次类推

原数列1...100

新数列 1 2 3 4..38 39 40...48 49 50 51 52 53 54....100 101 102 103 104

越是后面的项(以插入数之后为基准),加得越多。

加四

原来的50变成54

加三

原来的49变成52

加二

原来的39变成41

加一

原来的3变成4

抽象一下。

插入a b c三项(用k表示插入项数,则有k=3),0<a<b<c,如果用i来遍历数列,那么会有

if i>=c; then i=i+k

if i<c && i>=b; then i=i+k-1

if i<b && i>=c;then i=i+k-2

写成代码,可以这样来:项作为位置参数,位置参数个数作为k,每换一次参数k就减1,直至遍历所有位置参数。

 

Aug 18

虽然安装了acpi-support,但我的笔记本依然不能启用静音切换的快捷键,很不方便,于是自己写了个切换静音小脚本。至于调节音量,类推就行了。

 

# /etc/acpi/events/mutebtn
# Called when the user presses the mute button

event=button[ /]mute
action=/etc/acpi/mute.sh

 

#!/bin/sh
# /etc/acpi/mute.sh
vol=`amixer | sed -r "s/(\[|\])//g"  | sed -rn "/'Master'/,+6{h;/Playback.*%/{p;q}}" | awk '{print $5}'`
if test $vol != 0%; then
    echo $vol > /etc/acpi/volstore.dat
    amixer set Master front 0
else
    vol=`cat /etc/acpi/volstore.dat`
    amixer set Master front $vol
fi
exit 0

Aug 16

案例法确实值得称赞,虽然是“笨办法”,一字不差,没有任何含糊,不过它确实有效,那么它就不笨。

因欲写个重命名的工具(其实之前有用shell写过),后来觉得代码相当ugly,想换个方式来实现它。尝试过perl, 无奈,熟悉正则表达式的我表示无力,太不人性了(也许我要被喷了,^_^),于是转向python,。之前有接触过,教材不对,学习方法不对,我还没入门就撤退了。现在我选择“笨办法”,也确实学到点东西了。

下面是参考另人的代码写的一个小工具,实现操作:连接oracle数据库,导出列,以某一列为原始文件名,另外一列为新文件名,批量重命名文件,并移动到目标路径。

网上查过,移动文件python的效率不高,我就改用了系统命令 move, 在传递参数时,也许会造成困扰,不过我之前刚好看过c语言传递参数(先用sprintf把命令及参数存到一个变量,然后那个变量作为参数传入system())我也照着去做,实现了参数传递,程序是相通的。

说明:@foo 其中,foo是实例名。

 

import sys
import os
from os.path import exists
import cx_Oracle
import py2exe

reload(sys)
sys.setdefaultencoding('utf-8')

def getdata(chah):
     try:
         conn = cx_Oracle.connect("system/foo@foo")
         try:
             cur = conn.cursor()
             sql = """select yh,imgname from foo where 
             chah='%s' order by yh""" % chah
             cur.execute(sql)
             allData = cur.fetchall()
         finally:
             cur.close()
             conn.close()
     except Exception, e:
         print '数据库错误:', e
         return

     for rec in allData:
         oldname = "%s.jpg" %rec[0]
         newname = rec[1]
         if exists(oldname) and not exists(newname):
            os.rename(oldname,newname) 
            print "%s => %s" %(oldname, newname)
         else:
             return 0

print "\nchah ?(quit: input q and hit ENTER)"
chah = raw_input(">")
while chah != 'q':
     print "Running..."
     getdata(chah)
     target = "d:\%s" % chah
     action = "move *.jpg %s" % target
     os.system(action)
     print "\nchah is %s" % chah
     print "\nchah ?(quit: input q and hit ENTER)"
     chah = raw_input(">")

关于连接oracle数据库,遇到一些问题,着实花了我不少时间,幸好网上都有答案,感谢国家,感谢党,感谢人民,感谢google.

不说遇到的问题,就说怎么做吧。

python版本 2.7

oracle 版本 9.2.0.4

先下载两个文件

1、cx_Oracle-5.1.2-10g.win32-py2.7.msi

2、instantclient-basic-win32-10.2.0.4.zip 这是从oracle官网下载的,坑人啊,33+M, 还非常难下载!幸好有离线服务器,再次感谢……

 

第一步,安装cx_Oracle-5.1.2-10g.win32-py2.7.msi

第二步,从instantclient-basic-win32-10.2.0.4.zip解压oraocci10.dll、oci.dll、oraociei10.dll放到C:\Python27\Lib\site-packages

第三步,设定环境变量我懒得去分析了,直接上配置

系统变量  

NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

ORACLE_HOME=D:\oracle\ora90

路径PATH

D:\oracle\ora90\bin;D:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin;C:\Program Files\Vim\vim73;d:\php5;D:\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin\;d:\php5;D:\php5\ext;d:\nginx;C:\Program Files\SMPlayer\mplayer;c:\mingw\bin;C:\Python27\Lib

Aug 18
关键字 释义
and 逻辑与
assert  
as 作为
break 中断
class
continue 继续
def 定义函数
del 删除
elif 条件else if
else 条件else
except 异常处理
exec 执行
finally 最后
for for 循环
from 导入模块用
global 定义全局变量
if 条件if
import 导入模块
in 在...
is
lambda lambda 定义匿名函数
not 逻辑否
or 逻辑或
pass 跳过
print 打印
raise 引起异常
return 返回
try 尝试
while 当条件为真执行循环
with with 伴随???
yield 用在函数中, 先不计算,保留着

数据类型

布尔 True False

空类型 None

字符串 strings

数字型 numbers

浮点数(小数) floats

列表 lists

转义序列

跟c语言一样

字符串格式化

%d 十进制

%i

%o 8进制

%u

%x 

%X

%e

%E

%f 小数

%F

%G

%g

%c

%r 原样输出

%s 字符串

%% %

操作符

+ - * /  <  >  >=  <= == !=跟数学一样

** a**n表示a的n次方

// 取整如100//6=16, 乘以除数+取余可以得被除数。100 // 6 * 6 + 100 % 6 = 100

% 取余数(mod)

<>

() 定义元组或者函数参数 def a(x): pass

[] 列表

{} 集合或者是字典

@ 装饰符

, 对象之间的分隔符(或者叫做连接符)如 print "foobar", var (var为变量)

:  def foobar(): 或者for x in a: 多行语句 

. 方法操作符

= 赋值

;  +=  -=  *=  /=  //= %= **=  跟c一样

有些符号我还没搞懂,日后再完善了。