python编程快速上手 --让繁琐工作自动化
(第一部分 python编程基础)
第一章 python 基础
(略)
第二章 控制流
(略)
第三章 函数
异常处理
def spam(div):
return 42/div
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(7))
会报错,使用try的语句
def spam(divideBy):
try:
return 42/divideBy
except ZeroDivisionError:
print('Error:Invalid argument')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(3))
运行结果:
注意下面这个程序的结果不一样:
def spam(divideBy):
return 42/divideBy
try:
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(3))
except ZeroDivisionError:
print('Error:Invalid argument')
print(spam(3)) 这句话没有变执行,因为一旦执行跳到except子句的代码,就不会到try的语句。它会继续向下执行
一个小程序猜数字
import random
print("我心里有一个数,他在1-20之间")
sec=random.randint(1,20)
for i in range(1,7):
print("请猜数")
guess=int(input())
if guess<sec:
print("小了")
elif guess>sec:
print("大了")
else:
print("太棒了,你猜对了!")
break
练习:
collatz:
输入验证
#Collatz序列
def clooatz(number):
if number%2==0:
print(str(number//2))
return number//2
else:
print(str(3*number+1))
return 3*number+1
try:
number = int(input())
while number!=1:
number=clooatz(number)
except ValueError:
print('your input must be intger!')
第四章 列表
列表
列表的引用,切片,连接
>>> sp=['ca','ds','da','ccc']
>>> print(sp[0])
ca
>>> print(sp[-1])
ccc
>>> print(sp[2:])
['da', 'ccc']
>>> sp=sp+['aa','bb']
>>> print(sp)
['ca', 'ds', 'da', 'ccc', 'aa', 'bb']
增:
>>> print(sp)
['ca', 'ds', 'da', 'aa', 'bb']
>>> sp.append('di')
>>> print(sp)
['ca', 'ds', 'da', 'aa', 'bb', 'di']
>>> sp.insert(2,'22')
>>> print(sp)
['ca', 'ds', '22', 'da', 'aa', 'bb', 'di']
删:
>>> print(sp)
['ca', 'ds', 'da', 'ccc', 'aa', 'bb']
>>> del sp[3]
>>> print(sp)
['ca', 'ds', 'da', 'aa', 'bb']
>>> sp=['ca', 'ds', '22', 'da', 'aa', 'bb', 'di']
>>> sp.remove('aa')
>>> print(sp)
['ca', 'ds', '22', 'da', 'bb', 'di']
改:
>>> print(sp)
['ca', 'ds', '22', 'da', 'bb', 'di']
>>> sp[1]='123'
>>> print(sp)
['ca', '123', '22', 'da', 'bb', 'di']
查:
>>> print(sp)
['ca', '123', '22', 'da', 'bb', 'di']
>>> '123' in sp
True
>>> sp.index('di')
5
>>> sp.index('456')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
sp.index('456')
ValueError: '456' is not in list
排序
>>> sp=[2,334,434,5,545,634,34,23]
>>> sp.sort()
>>> print(sp)
[2, 5, 23, 34, 334, 434, 545, 634]
>>> sp=['ca', 'ds', '22', 'da', 'aa', 'bb', 'di']
>>> sp.sort(reverse=True)
>>> print(sp)
['ds', 'di', 'da', 'ca', 'bb', 'aa', '22']
实践项目
逗号代码
假定有下面这样的列表:
spam=[‘apples’,‘bananas’,‘tofu’,’ cats’]
编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗号和空格分隔,并在最后一个表项之前插入 and 。例如,将前面的spam列表传递给函数,将返回’apples,bananas,tofu,and cats’。但是你的函数应该能够传递给它的任何列表。
我的代码:
spam=['apples','bananas','tofu','cats']
def new(sp):
len1=len(sp)
new=''
for i in range(len1-1):
new=new+','+sp[i]
new=new[1:]+' and ' +sp[i+1]
print(new)
new(spam)
字符图网格
假定有一个列表的列表,内层列表的每个值都是包含一个字符的字符串,像这样:
grid = [['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
你可以认为grid[x][y]是一幅“图”在x,y坐标处的字符,该图由文本字符组成。原点(0,0)在左上角,向右x坐标增加,向下y坐标增加。
复制前面的网格值,编写代码用它打印图像。
grid = [['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
for i in range(6):
for j in range(9):
print(grid[j][i],end="")
print('\r')
注意:这里/r和/n 输出有区别(/n会多一行),使用/v 也可以
翻阅网上别人编写的用的\t(有些不明白)
试着用这些做个输出一个乘法口诀表
我写的代码:
i=1
while(i<10):
for j in range(1,i+1):
print('%d*%d=%d'%(j,i,i*j),end="\t")
print('\v')
i=i+1