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

实验任务1

#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)
实验截图

  实验结论

    这4处使用的标识符sum不是同一个对象的名称。line1处sum的作用域是Python内置模块的名字空间(Builtin), line3处sum的作用域是函数定义所在模块(文件)的名字空间(Global), line7处sum的作用域是函数内部命名空间(Local), line11处sum的作用域是外部嵌套函数的名字空间(Enclosing function locals)。

 

 

实验任务2

#task2_1
实验内容
 1 def func1(a, b, c, d, e, f):     #默认参数按位置传递,也支持关键字传递
 2     return [a,b,c,d,e,f]
 3 
 4 def func2(a, b, c,*, d, e, f):   #*后面的参数只能按关键字传递
 5     return [a,b,c,d,e,f]
 6 
 7 def func3(a, b, c,/, d, e, f):   #/前面的参数只能按位置传递
 8     return [a,b,c,d,e,f]
 9 
10 
11 #func1调用:按位置传递、按参数传递都可以
12 print(func1(1, 9, 2, 0, 5, 3))
13 print(func1(a=1, b=9, c=2, d=0, e=5, f=3))
14 print(func1(1, 9, 2, f=3, d=0, e=5))
15 
16 #func2调用:d,e,f必须按关键字传递
17 print(func2(11, 99, 22, d=0, e=55, f=33))
18 print(func2(a=11, b=99, c=22, d=0, e=55, f=33))
19 
20 #func3调用:a,b,c必须按位置传递
21 print(func3(111, 999, 222, 0, 555, 333))
22 print(func3(111, 999, 222, d=0, e=555, f=333))
实验截图

 

#task2_2
实验内容
1 list1 = [1,9,8,4]
2 
3 print(sorted(list1))
4 print(sorted(list1,reverse = True))
5 print(sorted(list1,True))
实验截图

 实验结论

      python内置函数sorted()中,参数reverse的传递方式必须使用关键字传递,即要写出reverse = True或者直接不写。否则会像运行line5时那样报错。

 

#task2_3
实验内容
1 def func(a, b, c, /, *, d, e, f):
2     return ([a, b, c, d, e, f])
3 
4 print(func(1, 2, 3, d=4, e=5, f=6))
实验截图

 

 

实验任务3

#task3
实验内容
 1 def solve(a,b,c):
 2     '''
 3     求解一元二次方程,返回方程的两个根
 4 
 5     :para:a,b,c:float 方程系数
 6     :return: tuple
 7     '''
 8     delta = b**2 - 4*a*c
 9     delta_sqrt = abs(delta)**0.5
10     p1 = -b/2/a
11     p2 = delta_sqrt/2/a
12 
13     if delta >= 0:
14         root1 = p1 + p2
15         root2 = p1 - p2
16     else:
17         root1 = complex(p1,p2)
18         root2 = complex(p1,-p2)
19 
20     return root1,root2
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()
实验截图

 

 

实验任务4

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

 

 

 实验任务5


#task5
实验内容
 1 def is_prime(n):
 2     if n == 1:
 3         return False
 4     elif n == 2:
 5         return True
 6     else:
 7         for i in range(2,n):
 8             if n%i == 0:
 9                 return False
10                 break
11         if i == n-1:
12             return True
13 
14 oushu_lst = [i for i in range(4,20+1) if i%2 == 0]
15 prime_lst = [k for k in range(1,20+1) if is_prime(k) == True]
16 
17 index = 0
18 i = 0
19 while i < len(oushu_lst):
20     j = 0
21     while j < len(prime_lst):
22         k = 0
23         while k < len(prime_lst):
24             if oushu_lst[i] == prime_lst[j] + prime_lst[k]:
25                 print(f'{oushu_lst[i]} = {prime_lst[j]} + {prime_lst[k]}')
26                 index += 1
27                 break
28             k += 1
29         j += 1
30         if index - 1 == i:
31             break
32     i += 1
实验截图

 

 

 

 

 实验任务6

#task6
实验内容
 1 def encoder(txt):
 2     txt_lst = list(txt)
 3     encoder_lst = []
 4     for x in txt_lst:
 5         if 65 <= ord(x) <= 90:
 6             t = (ord(x) - ord('A') + 5) % 26 + ord('A')
 7             encoder_lst.append(chr(t))
 8         elif 97 <= ord(x) <= 122:
 9             t = (ord(x) - ord('a') + 5) % 26 + ord('a')
10             encoder_lst.append(chr(t))
11         else:
12             encoder_lst.append(x)
13     return ''.join(encoder_lst)
14 
15 def decoder(txt):
16     txt_lst = list(txt)
17     decoder_lst = []
18     for x in txt_lst:
19         if 65 <= ord(x) <= 90:
20             t = (ord(x) - ord('A') - 5) % 26 + ord('A')
21             decoder_lst.append(chr(t))
22         elif 97 <= ord(x) <= 122:
23             t = (ord(x) - ord('a') - 5) % 26 + ord('a')
24             decoder_lst.append(chr(t))
25         else:
26             decoder_lst.append(x)
27     return ''.join(decoder_lst)
28 
29 
30 text = input('输入英文文本: ')
31 encoded_text = encoder(text)
32 print('编码后的文本:', encoded_text)
33 decoded_text = decoder(encoded_text)
34 print('对编码后的文本解码:', decoded_text)
实验截图

 

 

 实验任务7

#task7
实验内容
 1 def collatz(n):
 2     x = n
 3     lst = [n]
 4     while x != 1:
 5         if x%2 == 0:
 6             x = x/2
 7             lst.append(int(x))
 8         else:
 9             x = 3*x + 1
10             lst.append(int(x))
11     return lst
12 
13 try:
14     n = int(input('Enter a positive integer: '))
15     if n <= 0:
16         raise ValueError
17 except ValueError:
18     print('Error: must be a positive integer')
19 else:
20     print(collatz(n))
实验截图

 

 实验任务8

#task8
实验内容
 1 def func(n):
 2     f0 = 1
 3     for i in range(n):
 4         f0 = f0*2
 5     return f0 - 1
 6 
 7 while True:
 8     x = input()
 9     if x == '#':
10         print('计算结束')
11         break
12     n = int(x)
13     ans = func(n)
14     print(f'n = {n}, ans = {ans}')
实验截图

 

posted @ 2023-05-19 23:59  林序秋-  阅读(34)  评论(0)    收藏  举报