实验4 函数与异常处理应用编程
task1.py
print(sum) sum=42 print(sum) def inc(n): sum=n+1 print(sum) return sum sum = inc(7) + inc(7) print(sum)
这四处使用的标识符sum不是代表一个变量名。line1的sum是指python内置求和函数sum,line2和line3中sum是一个变量,line7的sum是指函数inc里面的临时变量,line11的sum也是指一个变量。
task2_1.py
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)) print(func2(11,99,22,0,55,33)) #func3调用:a,b,c必须按位置传递 print(func3(111,999,222,0,555,333)) print(func3(111,999,222,d=0,e=555,f=333)) print(func3(a=111,b=999,c=222,0,555,333))
task2_2.py
Ture=bool(1) list1=[1,9,8,4] print(sorted(list1)) print(sorted(list1,reverse=Ture)) print(sorted(list1,Ture))
python内置函数sorted()中,参数reverse的传递方式必须使用关键字传递。
task2_3.py
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.py
def solve(a,b,c): ''' 求解一元二次方程,返回方程的两个根 :para:a,b,c: int 方程系数 :return: tuple ''' 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 print(solve.__doc__) while bool(1): try: a,b,c = eval(input('Enter eqution coefficient: ')) if a==0: raise except: print('invalid input, or, a is zero') break else: root1,root2 = solve(a,b,c) print(f'root1 = {root1:.2f},root2 = {root2:.2f}') print()
task4.py
def list_generator(a,b,c=1): ls=[] i=a while i>=a and i<=b: ls.append(i) i+=c return ls 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.py
def is_Prime(n): if n<2: return False for i in range(2,int(n**0.5)+1): if n%i==0: return False return bool(1) k=[] for b in range(21): k.append(b) for x in k[::2]: for a in range(0,20): if is_Prime(a): if is_Prime(x-a): print('{}={}+{}'.format(x,a,x-a)) break else: a+=1 else: a+=1
task6.py
def encoder(s): ls=list(s) j=0 while j < len(s): b = ord(ls[j]) if 65<=b<=85 or 97<=b<=117: c=chr(b+5) elif 85<=b<=90 or 117<=b<=122: c=chr(b-21) else: c=chr(b) ls[j]=c j+=1 return ''.join(ls) def decoder(s): ls=list(s) j=0 while j < len(s): b = ord(ls[j]) if 70<=b<=90 or 102<=b<=122: c=chr(b-5) elif 65<=b<=70 or 97<=b<=102: c=chr(b+21) else: c=chr(b) ls[j]=c j+=1 return ''.join(ls) s=input('输入英文文本: ') print(f'编码后的文本:{encoder(s)}') print(f'对编码后的文本解码:{decoder(encoder(s))}')
task7.py
def collatz(n): if n%2==0: return n/2 else: return 3*n+1 try: n=int(input('Enter a positive integer:')) if(n<=0): rasie except: print('Error:must be a positive integer') else: ls=[n] while n!=1: n=collatz(n) ls.append(n) print(ls)