实验4 函数与异常处理应用编程
task1.py
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)
1.Built-in
2.Global
3.Local
4.Global
task2_2.py
1 list1 = [1, 9, 8, 4] 2 print( sorted(list1) ) 3 print( sorted(list1, reverse=True) ) 4 print( sorted(list1, True) )
参数reverse的传递方式必须使用关键字传递
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))
task3_1.py
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 19 while True: 20 try: 21 a,b,c = eval(input('Enter eqution coefficient: ')) 22 if a == 0: 23 raise 24 except: 25 print('invalid input, or, a is zero') 26 break 27 else: 28 root1, root2 = solve(a, b, c) 29 print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') 30 print()
task3_2.py
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 19 print(solve.__doc__) 20 while True: 21 try: 22 a,b,c = eval(input('Enter eqution coefficient: ')) 23 if a == 0: 24 raise 25 except: 26 print('invalid input, or, a is zero') 27 break 28 else: 29 root1, root2 = solve(a, b, c) 30 print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') 31 print()
加一行print(solve.__doc__)会把说明信息打印出来
task4.py
1 def list_generator(a,b,step=1): 2 list=[] 3 while a<=b: 4 list.append(a) 5 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)
task5.py
1 def is_prime(n): 2 for i in range(2,int(n**0.5)+1): 3 if n%i==0: 4 return False 5 else: 6 return True 7 for j in range(2,21,2): 8 for k in range(2,j): 9 if is_prime(j-k): 10 print(f'{j}={k}+{j-k}') 11 break
task6.py
1 def encoder(text:str): 2 ans=[] 3 for n in text: 4 x=ord(n) 5 if 65<=x<=90: 6 ans.append(chr((x-60)%26+65)) 7 elif 97<=x<=122: 8 ans.append(chr((x-92)%26+97)) 9 else: 10 ans.append(n) 11 return ''.join(ans) 12 13 def decoder(text1): 14 ans1=[] 15 for n in text1: 16 x1=ord(n) 17 if 65 <= x1 <= 90: 18 ans1.append(chr((x1 - 44) % 26 + 65)) 19 elif 97 <= x1 <= 122: 20 ans1.append(chr((x1 - 76) % 26 + 97)) 21 else: 22 ans1.append(n) 23 return ''.join(ans1) 24 25 26 text=input('输入英文文本:') 27 text1=encoder(text) 28 print(f'编码后的文本:{text1}') 29 print(f'解码后的文本:{decoder(text1)}')
task7.py
1 def collatz(n): 2 if n%2==0: 3 return n/2 4 else: 5 return 3*n+1 6 try: 7 n=eval(input('Enter a positive integer:')) 8 if type(n)!=int or n<=0: 9 raise ValueError and NameError 10 except ValueError and NameError: 11 print('Error: must be a positive integer') 12 else: 13 list=[n] 14 while n!=1: 15 n=collatz(n) 16 list.append(n) 17 print(list)
实验总结:python好像越来越难了,代码也越来越复杂了,但是定义好函数之后调用确实很方便,实验异常处理也是非常重要的方式,可以帮助代码更好运行。希望可以学好这一部分,运用到实际问题中去。