实验四 函数与异常处理编程
task1
实验源码
1 print(sum) 2 sum = 42 3 print(sum) 4 5 def inc(n): 6 sum = n + 1 7 print(sum) 8 return sum 9 10 sum = inc(7) + inc(7) 11 print(sum)
运行截图

答:不是
1. line1 2. line2~line3 3. line5~line8 4. line10~line11
task2_1
实验源码
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 8 def func2(a, b, c,*, d, e, f): 9 ''' 10 返回参数a,b,c,d,e,f构成的列表 11 *后面的参数只能按关键字传递 12 ''' 13 return [a, b, c, d, e, f] 14 15 def func3(a, b, c, /, d, e, f): 16 ''' 17 返回参数a,b,c,d,e,f构成的列表 18 /前面的参数只能按位置传递 19 ''' 20 return [a, b, c, d, e, f] 21 22 # func1调用:按位置传递、按参数传递都可以 23 print(func1(1, 9, 2, 0, 5, 3)) 24 print(func1(a=1, b=9, c=2, d=0, e=5, f=3)) 25 print(func1(1, 9, c=2, d=0, e=5, f=3)) 26 27 # func2调用:d,e,f必须按关键字传递 28 print(func2(11, 99, c = 22, d = 0, e = 55, f = 33)) 29 print(func2(a = 11, b = 99, c = 22, d = 0, e = 55, f = 33)) 30 #pritn(func2(11, 99, 22, 0, 55, 33)) 31 32 # func3调用:a,b,c必须按位置传递 33 print(func3(111, 999, 222, d = 0, e = 555, f = 333)) 34 #print(func3(a=111, b=999, c=222, d=0, e=55, f=33) )
运行截图

task2_2
实验源码
1 list1 = [1, 9, 8, 4] 2 3 print(sorted(list1)) 4 print(sorted(list1, reverse=True)) 5 print(sorted(list1, True))
运行截图

答:是。
task2_3
实验源码
1 def func(a, b, c, /, *, d, e, f): 2 return([a, b, c, d, e, f]) 3 4 # 补足一行代码,调用func()并打印生成的列表,使得结果为[1,2,3,4,5,6] 5 print(func(1, 2, 3, e=5, d=4, f=6))
运行截图

task3
实验源码
1 def solve(a, b, c): 2 ''' 3 求解一元二次方程, 返回方程的两个根 4 :para: a,b,c: float 方程系数 5 :return: tuple 6 ''' 7 delta = b * b - 4 * a * c 8 delta_sqrt = abs(delta ** 0.5) 9 p1 = -b / a / 2 10 p2 = delta_sqrt / a / 2 11 12 if delta >= 0: 13 root1 = p1 + p2 14 root2 = p1 - p2 15 else: 16 root1 = complex(p1, p2) 17 root2 = complex(p1, -p2) 18 19 return root1, root2 20 21 22 while True: 23 try: 24 t = input('输入一元二次方程系数a b c, 或者,输入#结束:') 25 if t == '#': 26 print('结束计算,退出') 27 break 28 a, b, c = map(float, t.split()) 29 if a == 0: 30 raise ValueError('a = 0, 不是一元二次方程') 31 except ValueError as e: 32 print(repr(e)) 33 print() 34 except: 35 print('有其他错误发生\n') 36 else: 37 root1, root2 = solve(a, b, c) 38 print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') 39 print()
运行截图

补加代码后
实验源码
1 def solve(a, b, c): 2 ''' 3 求解一元二次方程, 返回方程的两个根 4 :para: a,b,c: float 方程系数 5 :return: tuple 6 ''' 7 delta = b * b - 4 * a * c 8 delta_sqrt = abs(delta ** 0.5) 9 p1 = -b / a / 2 10 p2 = delta_sqrt / a / 2 11 12 if delta >= 0: 13 root1 = p1 + p2 14 root2 = p1 - p2 15 else: 16 root1 = complex(p1, p2) 17 root2 = complex(p1, -p2) 18 19 return root1, root2 20 21 22 print(solve.__doc__) 23 while True: 24 try: 25 t = input('输入一元二次方程系数a b c, 或者,输入#结束:') 26 if t == '#': 27 print('结束计算,退出') 28 break 29 a, b, c = map(float, t.split()) 30 if a == 0: 31 raise ValueError('a = 0, 不是一元二次方程') 32 except ValueError as e: 33 print(repr(e)) 34 print() 35 except: 36 print('有其他错误发生\n') 37 else: 38 root1, root2 = solve(a, b, c) 39 print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') 40 print()
运行截图

task4
实验源码
1 def list_generator(start, end, step=1): 2 i = start 3 lst = [] 4 while i < end: 5 lst.append(i) 6 i += step 7 return lst 8 9 list1 = list_generator(-5, 5) 10 print(list1) 11 list2 = list_generator(-5, 5, 2) 12 print(list2) 13 list3 = list_generator(1, 5, 0.5) 14 print(list3)
运行截图

task5
实验源码
1 def is_prime(n): 2 if n == 1: 3 return False 4 t = int(pow(n, 0.5)) 5 while t > 1: 6 if n % t == 0: 7 return False 8 t -= 1 9 else: 10 return True 11 12 13 primes = [] 14 for i in range(21): 15 if is_prime(i): 16 primes.append(i) 17 18 for o in range(3, 21): 19 if o % 2 == 0: 20 for prime in primes: 21 ans = o - prime 22 if ans in primes: 23 print(f'{o} = {prime} + {ans}') 24 break
运行截图

task6
实验源码
1 # def encoder(n): 2 # ans = '' 3 # for i in n: 4 # if i.isalpha(): 5 # ans += chr((ord(i)+5-97) % 26 + 97) 6 # else: 7 # ans += i 8 # return ans 9 # 10 # 11 # def decoder(n): 12 # ans = '' 13 # for i in n: 14 # if i.isalpha(): 15 # ans += chr((ord(i)-5-97) % 26 + 97) 16 # else: 17 # ans += i 18 # return ans 19 20 s = 'abcdefghijklmnopqrstuvwxyz' 21 22 23 def encoder(n): 24 ans = '' 25 for i in n: 26 if i.istitle(): 27 s1 = s.upper() 28 tip1 = s1.index(i) 29 ans += s1[(tip1 + 5) % 26] 30 elif i.isalpha(): 31 tip2 = s.index(i) 32 ans += s[(tip2 + 5) % 26] 33 else: 34 ans += i 35 return ans 36 37 38 def decoder(n): 39 ans = '' 40 for i in n: 41 if i.istitle(): 42 s1 = s.upper() 43 tip1 = s1.index(i) 44 ans += s1[(tip1 - 5) % 26] 45 elif i.isalpha(): 46 tip2 = s.index(i) 47 ans += s[(tip2 - 5) % 26] 48 else: 49 ans += i 50 return ans 51 52 53 #主体代码逻辑 54 text = input('输入英文文本: ') 55 encoded_text = encoder(text) 56 print('编码后的文本: ', encoded_text) 57 decoded_text = decoder(encoded_text) 58 print('对编码后的文本解码: ', decoded_text)
运行截图


task7
实验源码
1 def collatz(n): 2 lst = [n] 3 while n != 1: 4 if n % 2 == 0: 5 n /= 2 6 lst.append(n) 7 else: 8 n = n * 3 + 1 9 lst.append(n) 10 return lst 11 12 13 try: 14 x = input('输入一个正整数:') 15 if x.isdigit() == False or int(x) <= 0: 16 raise ValueError('must be a positive integer') 17 except ValueError as e: 18 print(repr(e)) 19 print() 20 else: 21 ans = collatz(int(x)) 22 print(ans)
运行截图





task8
实验源码
1 def func(n): 2 if n == 1: 3 return 1 4 else: 5 return func(n-1) * 2 + 1 6 7 8 while True: 9 x = input() 10 if x == '#': 11 print('计算结束') 12 break 13 n = int(x) 14 ans = func(n) 15 print(f'n = {n}, ans = {ans}')
运行截图


浙公网安备 33010602011771号