实验四 函数与异常处理编程

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}')

 

运行截图

 

 

posted @ 2023-05-24 01:48  理理理  阅读(21)  评论(0)    收藏  举报