python3 tab键自动补全

bash 的一大特点就是tab自动补全功能,是否python中也有这个功能呢?别说还真有,哈哈。不过需要我们配置以下,先写一个脚本:

[code lang=”python”]
#!/usr/bin/python3
##########################################################
# File Name: tab.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年07月09日 星期六 14时15分35秒
##########################################################
# python startup file
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind(‘tab: complete’)
# history file
histfile = os.path.join(os.environ[‘HOME’], ‘.pythonhistory’)
try:
readline.read_history_file(histfile)
except IOError:
pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
[/code]
然后在脚本的目录下运行python3,然后导入这个模块:(不加.py后缀)
[code lang=”python”]
import tab
ipmort sys
sys.(此时按tab键就可以自动出现sys下所有的模块了!)
[/code]
我发现python3真的很好用,而且只用导入一次,一劳永逸,不用像python2每次退出后必须重新导入。
PS:python3与python2的不同:python3使用print()进行输输出,输入用input(),并且好像废弃了raw_input()

第一章练习4:丰富程序可怕的诗歌(awfulpoetry)

这是上一个练习的升级,在命令行中指明需要打印的行数【1-10】行作为参数,若不输入则按照上一个程序打印5行,增加了程序的鲁棒性。
运行效果如图:
2016-07-06 15-00-37屏幕截图
源代码:
[code lang=”python”]
#!/usr/bin/python3
###########################################################
# File Name: awfulpoetry1_ans.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年07月06日 星期三 10时58分20秒
# Object:产生可怕诗歌代码的升级版,行数自定义
##########################################################

import random
import sys
lines = 5
#创建一些词汇:冠词、主题、动词、状语
if len(sys.argv) > 1:
try:
temp = int(sys.argv[1])
if 1 <= temp <= 10:
lines = temp
print("输出:",temp,"行")
else:
print("lines must be 1-10 inclusive")
except ValueError:
print("usage: badpoetry.py [lines]")

while lines:
x = random.choice(["the","a","another","his","her"])
y = random.choice(["cat","dog","man","womwn","boy","girl"])
z = random.choice(["sang","ran","jumped","laughed","hoped"])
u = random.choice(["loudly","quietly","well","badly","slowly"])
j = random.randint(1,2)
if j == 1:
print(x,y,z,u)
else:
print(x,y,z)
lines -= 1
[/code]

关于LINUX上的SHEBANG符号(#!)


无论我们在编写shell脚本还是python脚本时,在代码的第一行都会加上:#!,今天发现一个问题:在bash中直接运行py程序时即使我使用了正确的shebang行,py程序执行时仍就没有选择正确的解释器,突然想到之前python3 程序开发指南这本书有写到:
在UNIX上,当程序在控制台中被引用时,该文件的头两个字节先被读入。如果这两个字节是ASCII字符#!,shell就会认为该文件将要由解释器执行,并 且该文件的首行指定了要使用那个解释器。该行称为shebang(shell执行)行,如果存在,就必须为可执行文件的首行。
shebang行通常的呈现为如下两种形式之一:
#!/usr/bin/python3 或 #!/usr/bin/env python3
所以我把shebang行改为第一行程序就正确执行了。
下面是关于shebang符号的详细说明:
Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。

1. 如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)。

2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。

3. 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。
如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。

4. 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。
注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。

5. 当然,如果你使用”bash test.sh”这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。

更详细的内容可以参见:笑看世界的博客
这个博主的博文挺好,以后要常去学习学习!

第一章练习题3:利用随机数生成测试文本(awfulpoetry)

创建一些词汇列表,循环5次,在每次迭代中,使用random.choice()函数选取出冠词、主题、动词、状语等内容。使用random.randit()函数在两种结构中选择:第一种包含所有列表,第二种包含出状语外的所有列表:
程序运行效果如图:
2016-07-06 12-44-23屏幕截图
源代码如下:
[code lang=”python”]
###########################################################
# File Name: awfulpoetry1_ans.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年07月06日 星期三 10时58分20秒
##########################################################
#!/bin/python
import random
#创建一些词汇:冠词、主题、动词、状语
for i in [1,2,3,4,5]:
x = random.choice(["the","a"])
y = random.choice(["cat","dog","man","womwn","boy","girl"])
z = random.choice(["sang","ran","jumped","laughed"])
u = random.choice(["loudly","quietly","well","badly"])
j = random.randint(1,2)
if j == 1:
print(x,y,z,u)
else:
print(x,y,z)
[/code]

第一章练习2:简易计算器

要求:创建一个程序,该程序提示用户在while循环中输入数值,弄根据输入的数值逐步构建一个列表。用户结束输入(按ENTER键)时,打印出输入的数值本身、输入数值的个数、输入数值的和、输入的最小值和最大值以及平均值(sum/count):
程序运行效果如图:
2016-07-05 22-39-28屏幕截图
[code lang=”python”]
源代码如下:
###########################################################
# File Name: average1_ans.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年07月05日 星期二 20时53分57秒
##########################################################
#!/bin/python
i = 0
a =[]
sum =0
while True:
try:
num=input("enter a number or Enter to finish:")
a.append(int(num))
sum += int(num)
i += 1
except ValueError as err:
print(a)
print("count=",i,"sum=",sum,"lowest=",min(a),"highest=",max(a),"mean=",sum/i)
break
[/code]

python 小练习,bigdigits.py的变形

要求:在bigdigits.py的基础上,不在打印*,而是打印具体的数字。程序运行效果如图:

2016-07-04 23-59-42屏幕截图

源代码如下:

[code lang=”python”]

###########################################################
# File Name: bigdigits.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月23日 星期四 19时16分29秒
##########################################################
#!/bin/python3
import sys
Zero =["******",
"* *",
"* *",
"* *",
"* *",
"* *",
"******"]
One = [" * ",
" ** ",
" * ",
" * ",
" * ",
" * ",
" *** "]
Two = [" *** ",
"* * ",
"* * ",
" * ",
" * ",
"* ",
"***** "]
Three=["******",
" *",
" *",
"******",
" *",
" *",
"******"]
Four=[" * ",
" ** ",
" * * ",
" * * ",
"******",
" * ",
" * "]
Five=["*****",
"* ",
"* ",
"*****",
" *",
" *",
"*****"]
Six=["******",
"* ",
"* ",
"******",
"* *",
"* *",
"******"]
Seven=["******",
" *",
" * ",
" * ",
" * ",
" * ",
"* "]
Eight=["******",
"* *",
"* *",
"******",
"* *",
"* *",
"******"]
Nine=["******",
"* *",
"* *",
"******",
" *",
" *",
"******"]
#每个数字本身又是一个列表
Digits=[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine]
try:
digits=sys.argv[1]
print(digits)
row =0
while row <7:
column = 0
line = ""
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
change = 0
while change < len(digit[row]):
if digit[row][change] == ‘*’:
c = str( number)
#注意字符串不能通过索引更改其值!
else:
c = " "
line += c;
change += 1
line += " "
column += 1
#内循环拼接每个数的第一行像素到变量line中,每次添加空格,然后逐行打印,直至7行
print(line)
row +=1
except IndexError:
print("usag:bigdigits.py <number> ")
except ValueError as err:
print(err,"in",digits)
[/code]
最近由于期末考试,博客没有更新,现在考完了,有时间更新了。一定要坚持下去,利用好这个暑假,加油!

使用python创建一个生成随机整数组成的网格程序

2016-06-24 11-43-12屏幕截图
python经常被用于生成测试数据,下面我们将创建一个生成随机数组成的网格的程序,用户可以规定需要多少行、多少列,以及所在的区域。
[code lang=”python”]
###########################################################
# File Name: generate_grid.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月24日 星期五 09时02分04秒
##########################################################
#!/bin/python
import random
def get_int(msg,minimum,default):
while True:
try:
line = input(msg)
if not line and default is not None:
return default
i = int(line)
if i < minimum:
print("must be >=",minimum)
else:
return i
except ValueError as err:
print(err)
#函数返回值:default或者有效的整数(由msg传递)
#函数功能:取得符合要求的整数

#取得行数、列数、以及用户需要的最小随机数值,其中row和column没有指定默认值,用户必须输入一个整数
rows = get_int("row:",1,None)
columns = get_int("columns:",1,None)
minimum = get_int("minimum(or Enter for 0):",-1000000,0)
#minimum的默认值为0,maximum的默认值为1000

default = 1000
if default < minimum:
default = 2 * minimum
maximum = get_int("maximum (or Enter for "+ str(default) + "):",minimum,default)

#随机数生成过程
row = 0
while row < rows:
line = ""
column = 0
while column < columns:
#调用random模块,生成指定范围的随机数
i = random.randint(minimum,maximum)
s = str(i)
while len(s) < 10:
#使每个数字都只用10个字符的字符串表示
s =" " + s
line +=s
column += 1
print(line)
row += 1

[/code]

用python3写一个小程序

学习了python的8大要素之后,我们来写一个小程序把:执行的效果如图2016-06-23 23-13-34屏幕截图

以下是源代码:

[code lang=”python”]
###########################################################
# File Name: bigdigits.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月23日 星期四 19时16分29秒
##########################################################
#!/bin/python3
import sys
Zero =["******",
"* *",
"* *",
"* *",
"* *",
"* *",
"******"]
One =[" * ",
"** ",
" * ",
" * ",
" * ",
" * ",
"***"]
Two =[" *** ",
"* *",
"* * ",
" * ",
" * ",
"* ",
"*****"]
Three=["******",
" *",
" *",
"******",
" *",
" *",
"******"]
Four=[" * ",
" ** ",
" * * ",
" * * ",
"******",
" * ",
" * "]
Five=["*****",
"* ",
"* ",
"*****",
" *",
" *",
"*****"]
Six=["******",
"* ",
"* ",
"******",
"* *",
"* *",
"******"]
Seven=["******",
" *",
" * ",
" * ",
" * ",
" * ",
"* "]
Eight=["******",
"* *",
"* *",
"******",
"* *",
"* *",
"******"]
Nine=["******",
"* *",
"* *",
"******",
" *",
" *",
"******"]
#每个数字本身又是一个列表
Digits=[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine]
try:
digits=sys.argv[1]
print(digits)
row =0
while row <7:
line = ""
column = 0
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
line += digit[row] + " "
column += 1
#内循环拼接每个数的第一行像素到变量line中,每次添加空格,然后逐行打印,直至7行
print(line)
row +=1
except IndexError:
print("usag:bigdigits.py <number> ")
except ValueError as err:
print(err,"in",digits)

[/code]

Python的8个关键要素

一张图介绍python

要素1:数据类型

要素2:对象引用

要素3:组合数据类型

要素4:逻辑操作符

  • 身份操作符
  • 比较操作符
  • 成员操作符
  • 逻辑运算符:and、or与not

要素5: 控制流语句

在Python中,一块代码,也就是说一条或多条语句组成的序列,称为suite.由于Python中的某些语法要求存在一个suite,Python就提供了关键字pass,pass实际上是一条空语句,不进行任何操作。

  • if语句
  • while语句
  • for…in语句
  • 基本的异常处理

使用try和except语句来捕获异常

try:
block
except [exception,[data…]]:
block

try:
block
except [exception,[data…]]:
block
else:
block

该种异常处理语法的规则是:

·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

·   如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

·   如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

·   如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

·   如果没有发生异常,则执行else块代码。

要素6:算数运算符

  • 基本四则数学运算符
  • 增强赋值操作符

要素7:输入/输出

code:

 

[sourcecode autolinks=”false” language=”python”]
###########################################################
# File Name: input.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月22日 星期三 21时13分06秒
##########################################################
#!/bin/python3
print("Type integers,each followed by Enter;or just Enter to finish")
total = 0;
count = 0;
while True:
line = input("integer:")
if line:
try:
number = int(line)
except ValueError as err:
print(err)
continue
total += number
count += 1
else:
break
if count:
print("count=",count,"total=",total,"mean=",total/count)
[/sourcecode]

注意: 与大多数其他程序设计语言不同的是,Python使用缩排来标识其块结构。由于suite是使用缩排指明的,
因此很自然地带来一个问题是:使用哪种缩排?Python风格指南建议的是每层缩排4个空格,并且只有空格 没有制表符。

在使用vim编辑Python代码时可以在vimrc中加入如下参数,设置tab键=4个空格:

[code lang=”bash”]

set ts=4
set expandtab

[/code]

要素8:函数的创建与调用