实验4 函数与异常处理应用编程
实验任务1:
1 print(sum) 2 sum=42 3 print(sum) 4 def inc(n): 5 sum=n+1 6 print(sum) 7 return sum 8 sum=inc(7)+inc(7) 9 print(sum)
不是:
第一个sum作用的是一开始定义的42;
第二个sum作用的是调用的n+1;
第三个sum作用的是调用里的另一个;
第四个sum作用的是最后一个两者相加的。
实验任务2:
task2_1.py:
1 def func1(a,b,c,d,e,f): 2 ''' 3 返回参数a,b,c,d,e,f构成的列表 4 默认,参数按位置传递;也支持关键字传递 5 ''' 6 return [a,b,c,d,e,f] 7 def func2(a,b,c,*,d,e,f): 8 ''' 9 返回参数a,b,c,*,d,e,f构成的列表 10 *后面的参数只能按关键字传递 11 ''' 12 return [a,b,c,d,e,f] 13 def func3(a,b,c,/,d,e,f): 14 ''' 15 返回参数a,b,c,d,e,f构成的列表 16 /前面的参数只能按位置传递 17 ''' 18 return [a,b,c,d,e,f] 19 print(func1(1,9,2,0,5,3)) 20 print(func1(a=1,b=9,c=2,d=0,e=5,f=3)) 21 print(func1(1,9,2,f=3,d=0,e=5)) 22 print(func2(11,99,22,d=0,e=55,f=33)) 23 print(func2(a=11,b=99,c=22,d=0,e=55,f=33)) 24 print(func3(111,999,222,0,555,333)) 25 print(func3(111,999,222,d=0,e=555,f=333))
实验任务2:
task2_2.py:
1 list1=[1,9,8,4] 2 print(sorted(list1)) 3 print(sorted(list1,reverse=True)) 4 print(sorted(list1,True))
问题2:
python内置函数sorted()中,参数reverse的传递方式必须使用关键字传递。
实验任务2:
task2_3.py:
1 def func(a,b,c,/,*,d,e,f): 2 return([a,b,c,d,e,f]) 3 print(func(1,2,3,d=4,e=5,f=6))
实验任务3:
1 def solve(a,b,c): 2 ''' 3 求解一元二次方程,返回方程的两个根 4 :para:a,b,c:int 方程系数 5 :return:tuple 6 ''' 7 delta=b*b-4*a*c 8 delta_sqrt=abs(delta)**0.5 9 p1=-b/2/a; 10 p2=delta_sqrt/2/a 11 if delta>=0: 12 root1=p1+p2 13 root2=p1-p2 14 else: 15 root1=complex(p1,p2) 16 root2=complex(p1,-p2) 17 return root1,root2 18 while True: 19 try: 20 a,b,c=eval(input('Enter eqution coefficient:')) 21 if a==0: 22 raise 23 except: 24 print('invalid input,or,a is zero') 25 break 26 else: 27 root1,root2=solve(a,b,c) 28 print(f'root1={root1:2f},root2={root2:.2f}') 29 print()
实验任务4:
1 def list_generator(a,b,step=1): 2 list=[] 3 while a<=b: 4 list.append(a) 5 a=a+step 6 return list 7 list1=list_generator(-5,5) 8 print(list1) 9 list2=list_generator(-5,5,2) 10 print(list2) 11 list3=list_generator(1,5,0.5) 12 print(list3)
实验任务5:
1 def is_prime(x): 2 if x<2: 3 return False 4 for i in range(2,x): 5 if x%i==0: 6 return False 7 return True 8 for j in range(2,21,2): 9 for x in range(1,21): 10 if is_prime(x)==True and is_prime(j-x)==True and x<=j-x: 11 print(f'{j}={x}+{j-x}') 12 break
实验任务6:
1 def encoder(x): 2 list=[] 3 for i in x: 4 y=ord(i) 5 if 65<=y<=85 or 97<=y<=117: 6 y+=5 7 elif 85<=y<=90 or 118<=y<=122: 8 y-=21 9 list.append(chr(y)) 10 return ''.join(list) 11 def decoder(x): 12 list=[] 13 for i in x: 14 y=ord(i) 15 if 65<=y<=69 or 97<=y<=101: 16 y+=21 17 elif 70<=y<=90 or 102<=y<=122: 18 y-=5 19 list.append(chr(y)) 20 return ''.join(list) 21 x=input('输入英文文本:') 22 a=encoder(x) 23 print('编码后的文本:',a) 24 b=decoder(a) 25 print('对编码后的文本解码:',b)
实验任务7:
1 def collatz(n): 2 if n%2==0: 3 n=n/2 4 return int(n) 5 else: 6 return (n*3+1) 7 try: 8 n=eval(input('Enter a positive integer:')) 9 if n<=0 or type(n)!=int: 10 raise 11 except: 12 print('Error:must be a positive integer') 13 else: 14 list=[n] 15 while n!=1: 16 n=collatz(n) 17 list.append(n) 18 print(list)
实验总结:
1、进一步学习了如何异常处理以及调用函数;
2、调用函数还不够熟练,需要多多练习。