python学习笔记3
流程控制语句
python中pass语句的作用是什么?
pass是一个在python中不会被执行的语句,pass语句一般作为占位符或者创建占位程序。在复杂语句中,如果一个地方需要暂时被留白,那么就可以使用pass语句。
age = 17
if age > 18:
pass
else:
print("age < 18 ! 未成年!!")

实现斐波那契额数列(黄金分割数列)
a,b = 0,1
while b < 100:
print(b,end=',')
a,b = b,a+b

#d递归方式实现,生成前20项,当生成前40位时其复杂度就变的好大了
def factorial(n):
if n < 1:
return -1
if n == 1 or n == 2:
return 1
else:
return factorial(n-2) + factorial(n-1)
number = int(input("please enter a intager:"))
lis = []
for i in range(number):
lis.append(factorial(i+1))
print(lis)

python中except用来捕获所有的异常,因为Python中的每次错误都会抛出一个异常,所有程序的错误都被当作一个运行时的错误。
try……
except……
except……
[else……][finally……]
执行try块的语句时,如果引发异常,那么执行过程会跳到except代码中。对每个except分支程序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常抛出到上层的调用者。
try下的语句正常执行,则执行else块代码。如果发生异常,那么就不会执行。
如果存在finally语句,finally代码块最后总是会被执行的
python如何捕获异常?如何在程序执行过程中抛出异常
Python中使用“try……except SomeException as e:……”来捕获异常;使用“raise SomeEXception("Some Message")”来抛出异常
常见异常
IOError 输入输出异常
AttibuteError 试图访问一个对象没有的属性
ImportError 无法引入模块或包,基本是路径问题
IndentationError 语法错误,代码没有正确的对齐
IndexError 下标索引超出序列边界
KeyError 试图访问字典里不存在的键
SyntaxError Python代码逻辑语法出错,不能执行
NameError 使用一个还未赋予对象的变量
在except中,return后还会不会执行finally中的代码?怎么抛出自定义异常
会继续处理finally中的代码;用raise方法可以抛出自定义异常。
自定义异常示例
class MYyException(Exception):
def __init__(self,code):
self.code = code
def login(name,pwd):
if name == 'admin':
if pwd == '123':
print('login successful')
else:
#print('password error')
#return False
#抛出异常
raise MYyException(101)
else:
#print('name error')
#return FAlse
raise MYyException(102)
#ret = login('admin','123')
#print(ret)
dic = {101:'password error',102:'name error',201:'other error'}
try:
login('admin','23')
except MYyException as e:
print(e)
#print(type(e))
#通过args获取常见异常对象时传的参数
print(e.args[0])
print(dic[e.args[0]])

range()函数的作用有哪些
如果需要迭代一个数字序列的话,那么剋有使用range()函数,range()函数可以生成等差数列。range()函数也可创建一个整数列表,一般用在for循环中
range函数的语法:
range(start, stop[, step]) -> range object
start 计数从start开始。默认是从0开始。
stop 计数到stop结束,但不包括stop。
step 步长,默认位1.
索引序列
a = ['Nina','Jim','Rainman','Hello']
for i in range(len(a)):
print(i,a[i])

倒序
for i in range(5,0,-1):
print(i,end=' ')

python2和python中的range()的区别
python2返回列表,python3返回迭代器,节约内存
为什么下面两段代码的结果会不同呢?
l = []
for i in range(10):
l.append({'num':i})
print(l)
s = []
a = {'num':0}
for x in range(10):
a['num'] = x
s.append(a)
print(s)

字典是可变对象,在代码2中s.append(a)的操作中是把字典a的引用传到列表s中,当后续操作修改a['num']的值的时候,s中的值也会跟着浅拷贝
xrange和range的区别
range([start,]stop[,step]),根据start和stop指定的范围以及step设定的步长,生成一个序列。xrange用法和range相同,但是,xrange生成的是一个生成器,即它的数据生成一个取出一个。在需要生成很大的数字序列的时候,用xrange会比range性能更优,因为不需要在程序开始时就开辟一块很大的内存空间。
九九乘法表
# 九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%d"%(j,i,i*j),end='\t')
print('\n')

打印三角形
#方法一:(j,k会出现异常,例如:Unused variable 'j'pylint(unused-variable))
def printGraph(n):
for i in range(1,n+1):
for j in range(1,n-i+1):
print(' ',end='')
for k in range(1,2*i):
print('*',end='')
print('')
printGraph(8)
#所以用方法二:
def printGraph(n):
for i in range(1,n+1):
print(' '*(n-i)+'*'*(2*i-1))
printGraph(8)

打印倒三角形
def printGraph(n):
for i in range(1,n+1):
print(' '*(i-1)+'*'*(2*(n-i)+1))
printGraph(8)

打印偶数三角形
def printGraph(n):
for i in range(n):
print(' '*(n-i-1)+'* '*(i+1))
printGraph(8)

简单的计算器
##简单的计算器
def add(x,y): #定义函数
"""相加"""
return x + y
def subtract(x,y):
"""相减"""
return x - y
def multiply(x,y):
"""相乘"""
return x * y
def divide(x,y):
"""相除"""
return x / y
print("""
选择运算:
\t1、相加
\t2、相减
\t3、相乘
\t4、相除
""")
choice = input("please enter your choice(1/2/3/4):")
num1 = int(input("enter first number:"))
num2 = int(input("enter secend number:"))
if choice == '1':
print(num1,'+',num2,'=',add(num1,num2))
elif choice == '2':
print(num1,'-',num2,'=',subtract(num1,num2))
elif choice == '3':
print(num1,'*',num2,'=',multiply(num1,num2))
elif choice == '4':
if num2 != 0:
print(num1,'/',num2,'=',divide(num1,num2))
else:
print("The denominator cannot be zero!")
else:
print("Illegal input!")


浙公网安备 33010602011771号