实验4 函数与异常处理应用编辑
作者:互联网
Task 1
print(sum) sum = 42 print(sum) def inc(n): sum = n+1 print(sum) return sum sum = inc(7) + inc(7) print(sum)
不是
1.sum函数未创建,内建函数作用域中不能改变
2.sum被赋予全局变量42
3.sum被赋予局部变量n+1
4.sum被inc(7)+inc(7)改变
Task 2_1
def func1(a, b, c, d, e, f): ''' 返回参数a,b,c,d,e,f构成的列表 默认,参数按位置传递; 也支持关键字传递 ''' return [a,b,c,d,e,f] def func2(a, b, c,*, d, e, f): ''' 返回参数a,b,c,d,e,f构成的列表 *后面的参数只能按关键字传递''' return [a,b,c,d,e,f] def func3(a, b, c, /, d, e, f): ''' 返回参数a,b,c,d,e,f构成的列表 /前面的参数只能按位置传递''' return [a,b,c,d,e,f] #func1调用:按位置传递、按参数传递都可以 print( func1(1,9,2,0,5,3) ) print( func1(a=1, b=9, c=2, d=0, e=5, f=3) ) print( func1(1,9,2, f=3, d=0, e=5)) #func2调用:d,e,f必须按关键字传递 print( func2(11, 99, 22, d=0, e=55, f=33) ) print( func2(a=11, b=99, c=22, d=0, e=55, f=33) ) #func3调用:a,b,c必须按位置传递 print( func3(111, 999, 222, 0, 555, 333)) print( func3(111, 999, 222, d=0, e=555, f=333))
line33后加一行函数调用
print( func2(11, 99, 22, 0, 55, 33))
line38后加一行函数调用
print(func3(a=111, b=999, c=222, 0, 555, 333) )
Task 2_2
list1 = [1,9,8,4] print(sorted(list1)) print(sorted(list1,reverse=True)) print(sorted(list1,True))
参数reverse的传递方式必须用关键字传递
Task 2_3
def func(a,b,c,/,*,d,e,f): return([a,b,c,d,e,f]) print(func(1,2,3,d=4,e=5,f=6))
Task 3
def solve(a, b, c): ''' 求解一元二次方程, 返回方程的两个根 :para: a,b,c: int 方程系数 :return: tuple ''' delta = b*b - 4*a*c delta_sqrt = abs(delta)**0.5 p1 = -b/2/a; p2 = delta_sqrt/2/a if delta>=0: root1 = p1 + p2 root2 = p1 - p2 else: root1 = complex(p1, p2) root2 = complex(p1, -p2) return root1, root2 while True: try: a,b,c = eval(input('Enter eqution coefficient: ')) if a == 0: raise except: print('invalid input, or, a is zero') break else: root1, root2 = solve(a, b, c) print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') print()
测试一
测试二
line22前加入一行代码:
print(solve.__doc__)
Task 4
def list_generator(x,y,z=1): list_1=[] while x<=y: list_1.append(x) x+=z return list_1 list1=list_generator(-5,5) print(list1) list2=list_generator(-5,5,2) print(list2) list3=list_generator(1,5,0.5) print(list3)
Task 5
def is_prime(n): if n == 1: return False elif n == 2: return True else: for i in range(2,n): if n%i == 0: return False return True k = 0 for i in range(2,21,2): for j in range(1,i): m = i-j if is_prime(m) and is_prime(j) and j<=m: print(i,'=',j,'+',m,) k += 1 if k%6==0: print('\n')
Task 6
x=str(input('输入英文文本:')) z=0 for i in range(len(x)): if 128>ord(x[i])+5>122 or 96>ord(x[i])+5>90: a=ord(x[i])-21 z=z+1 elif 65<=ord(x[i])<=85 or 97<=ord(x[i])+5<=117: a=ord(x[i])+5 z=z+1 else: a=ord(x[i]) z=z+1 if z==1: print('编码后的文本',end='') print(chr(a),end='') print() print('对编码后的文本解码',x)
Task 7
def collatz(n): l=[n] while l[-1] != 1: if l[-1] % 2 == 0 : l.append((l[-1])//2) else: l.append((l[-1])*3+1) return l try: x=int(input('enter a positive integer:')) if x <= 0: raise except: print('Error: must be a positive integer') else: print(collatz(x))
总结
通过本次学习,对于编写,调用函数有了更深的理解,操作更熟练,有一定能力针对具体问题编写函数,并且进行异常处理。
但对于较复杂的问题,还无法熟练的编写调用函数来解决问题,对于作用域理解还不够深刻。
标签:Task,return,函数,sum,编辑,实验,print,root1,def 来源: https://www.cnblogs.com/haze529/p/16251736.html