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

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)
复制代码

测试结果

问题:task1.py源码中,共有4处有python语句 print(sum) (line1, line3, line7, line11)。 

这4处使用的标识符sum是同一个对象的名称吗?如果不是,请以文字方式回答这4处中标识符
sum的作用域。
答:不是。line1为内置作用域 ,line3和line11为全局作用域,line7为局部作用域
 
task2-1
源码
复制代码
def func1(a, b, c, d, e, f):
    '''
    返回参数a,b,c,d,e,f构成的列表
    默认,参数按位置传递; 也支持关键字传递
    '''
    return[a, b, c, d, e, f]

def func2(a, b, c,*, d, e,f):
    '''
    返回参数a,b,c,d,e,f构成的列表
    *后面的参数只能按关键字传递
    '''
    return[a, b, c, d, e, f]

def func3(a, b, c, /, d, e, f):
    '''
    返回参数a,b,c,d,e,f构成的列表
    /前面的参数只能按位置传递
    '''
    return [a, b, c, d, e, f]

# func1调用:按位置传递、按参数传递都可以
print(func1(1,9,2,0,5,3))
print(func1(a=1, b=9, c=2, d=0, e=5, f=3))
print(func1(1, 9, 2, f=3, d=0, e=5))

# func2调用:d,e,f必须按关键字传递
print(func2(11, 99, 22, d=0, e=55, f=33))
print(func2(a=11, b=99, c=22, d=0, e=55, f=33))

# func3调用:a,b,c必须按位置传递
print(func3(111, 999, 222, 0, 555, 333))
print(func3(111, 999, 222, d=0, e=555, f=333))
复制代码

测试结果

task2-2

源码

list1 = [1, 9, 8, 4]

print(sorted(list1))
print(sorted(list1, reverse=True))
print(sorted(list1, True))

测试结果

 

问题:python内置函数sorted()中,参数reverse的传递方式是否必须使用关键字传递?

答:是。
 
task2-3
源码
def func(a, b, c, /, *, d, e, f):
    return ([a,b,c,d,e,f])
print(func(1, 2, 3,d=4,e=5,f=6))

测试结果

 

 

 

task4

复制代码
 1 print(solve.__doc__)
 2 
 3 
 4 while True:
 5     print(solve.__doc__)
 6     try:
 7         t = input('输入一元二次方程系数a b c, 或者,输入#结束:')
 8         if t == '#':
 9             print('结束计算,退出')
10             break
11         a, b, c = map(float, t.split())
12         if a == 0:
13             raise ValueError('a = 0, 不是一元二次方程')
14     except ValueError as e:
15         print(repr(e))
16         print()
17     except:
18         print('有其它错误发生\n')
19     else:
20         root1, root2 = solve(a, b, c)
21         print(f'root1 = {root1:.2f}, root2 = {root2:.2f}')
22         print()
复制代码

测试结果

 

task5

源码

复制代码
 1 def is_prime(n):
 2     if n < 3:
 3         if n == 2:
 4             return True
 5         return False
 6     else:
 7         for i in range(2, n):
 8             if n%i == 0:
 9                 return False
10             else:
11                 return True
12 
13 primes = []
14 for j in range(2, 21):
15 
16     if is_prime(j) is True:
17         primes.append(j)
18 
19 for m in range(4, 21, 2):
20     for i in range(len(primes)):
21         n = m - primes[i]
22 
23         if is_prime(n) is True:
24             print(f'{m} = {primes[i]} + {n}')
复制代码

测试结果

改进:

源码

复制代码
 1 def is_prime(n):
 2     if n < 3:
 3         if n == 2:
 4             return True
 5         return False
 6     else:
 7         for i in range(2, n):
 8             if n%i == 0:
 9                 return False
10             else:
11                 return True
12 
13 for i in range(4,21,2):
14     for x in range(2,i):
15         y = i - x
16         if is_prime(x) and is_prime(y):
17             print(f'{i}={x}+{y}')
18             break
复制代码

测试结果

 

task6

源码

复制代码
 1 def encoder(text):
 2 
 3     new_text = []
 4 
 5     for i in text:
 6         if i.isalpha():
 7 
 8             if'a' <= i <= 'u':
 9                 new_text.append(chr(ord(i)+5))
10             elif 'v' <= i <= 'z':
11                 new_text.append(chr(ord('a')+ord(i)+4 - ord('z')))
12             elif'A' <= i <= 'U':
13                 new_text.append(chr(ord(i)+5))
14             elif 'V' <= i <= 'Z':
15                 new_text.append(chr(ord('A')+ord(i)+4 - ord('Z')))
16         else:
17             new_text.append(i)
18     return ''.join(new_text)
19 
20 def decoder(text):
21     new_text = []
22 
23     for i in text:
24         if i.isalpha():
25 
26             if 'f' <= i <= 'z':
27                 new_text.append(chr(ord(i) - 5))
28             elif 'a' <= i <= 'e':
29                 new_text.append(chr(ord('z') - (4-ord(i) + ord('a'))))
30             elif 'F' <= i <= 'Z':
31                 new_text.append(chr(ord(i)-5))
32             elif 'A' <= i <= 'E':
33                 new_text.append(chr(ord('Z') - (4-ord(i) + ord('A'))))
34         else:
35             new_text.append(i)
36     return ''.join(new_text)
37 
38 
39 text = input('输入英文文本: ')
40 encoded_text = encoder(text)
41 print('编码后的文本: ', encoded_text)
42 
43 decoded_text = decoder(encoded_text)
44 print('对编码后的文本解码: ', decoded_text)
复制代码

测试结果

 

task7

源码

复制代码
 1 def Collatz(n):
 2     if n%2 ==0:
 3         return n//2
 4     else:
 5         return n*3+1
 6 
 7 
 8 
 9 
10 try:
11     n = int(input('Enter a positive integer:'))
12     if n <= 0:
13         raise ValueError
14     num = [n]
15     while True:
16         n = Collatz(n)
17         num.append(n)
18         if n == 1:
19 
20             print(num)
21             break
22 
23 
24 except ValueError:
25     print('Error: must be a positive integer')
复制代码

测试结果

 

task8

源码

复制代码
 1 def func(n):
 2     while True:
 3 
 4         if n==1:
 5            return 1
 6         else:
 7             return 2*func(n-1)+1
 8 
 9 
10 while True:
11     x = input()
12     if x == '#':
13         print('计算结束')
14         break
15     n = int(x)
16     ans = func(n)
17     print(f'n = {n}, ans = {ans}')
复制代码

测试结果

 

 

 

 

 

 

 
posted @   田羽翼  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示