实验4 函数与异常处理编程
task1
print(sum) sum = 42 print(sum) def inc(n): sum = n+1 print(sum) return sum sum = inc(7) + inc(7) print(sum)
运行结果:

task2.1
def func1(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] 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)) 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) ) 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) )
运行结果:

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))
运行结果:

task3
def solve(a, b, c): delta = b*b - 4*a*c delta_sqrt = abs(delta)**0.5 p1 = -b/2/a p2 = delta_sqrt/2/a if delta >= 0: root1 = p1 + p2 root2 = p1 - p2 else: root1 = complex(p1, p2) root2 = complex(p1, -p2) return root1, root2 while True: try: t = input('输入一元二次方程系数a b c, 或者,输入#结束: ') if t == '#': print('结束计算,退出') break a, b, c = map(float, t.split()) if a == 0: raise ValueError('a = 0, 不是一元二次方程') except ValueError as e: print(repr(e)) print() except: print('有其它错误发生\n') else: root1, root2 = solve(a, b, c) print(f'root1 = {root1:.2f}, root2 = {root2:.2f}') print()
运行结果:

task4
def list_generator(a,b,c=1): lst=[] while a<=b: lst.append(a) a+=c return lst list1 = list_generator(-5, 5) print(list1) list2 = list_generator(-5, 5, 2) print(list2) list3 = list_generator(1, 5, 0.5) print(list3)
运行结果:

task5
def is_prime(s):
sum=0
for i in range(2,s):
if s%i==0:
sum+=i
ans=sum==0
return ans
for i in range(2,21,2):
s=[]
for j in range(2,i):
if is_prime(j)==True:
s.append(j)
for m in s:
if (i-m)in s:
print(f'{i}={m}+{i-m}')
break
运行结果:

task6
list_s=['a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] list_b=['A','B','C','D','E','F','G','H','I','J','K', 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] def encoder(x): re=[] for i in str(x): if i in list_s: a=list_s.index(i) if a<=20: i=list_s[a+5] re.append(i) else: i=list_s[a+5-26] re.append(i) elif i in list_b: a=list_b.index(i) if a<=20: i=list_b[a+5] re.append(i) else: i=list_b[a+5-26] re.append(i) else: re.append(i) re=''.join(re) return re def decoder(x): re=[] for i in str(x): if i in list_s: a=list_s.index(i) if a>=5: i=list_s[a-5] re.append(i) else: i=list_s[a+26-5] re.append(i) elif i in list_b: a=list_b.index(i) if a>=5: i=list_b[a-5] re.append(i) else: i=list_b[a+26-5] re.append(i) else: re.append(i) re=''.join(re) return re x=input('输入英文文本:') print(f'编码后的文本:{encoder(x)}') y=encoder(x) print(f'对编码后的文本解码:{decoder(y)}')
运行结果:


task7:
def collatz(n): re=[n] while True: if n==1: break if n%2==0: n=int(n/2) re.append(n) else: n=3*n+1 re.append(n) return re n=input('Enter a positive intefer:') try: n=int(n) if n<=0 : raise except: print('Error: must be a positive integer') else: print(collatz(n))
运行结果:


task8:
def func(n): if n==0: return 0 else: return 2*(func(n-1)+1)-1 while True: x=input() if x=='#': print('计算结束') break n=int(x) ans=func(n) print(f'n={n},ans={ans}')
运行结果:


浙公网安备 33010602011771号