实验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}')
测试结果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库