实验四
实验任务一
print(sum) sum = 42 print(sum) def inc(n): sum = n+1 print(sum) return sum sum = inc(7) + inc(7) print(sum)
line1 是内置作用域
line3 是全局作用域
line7 是局部作用域
line11 是全局作用域
实验任务二
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))
task1
task2
list1 = [1,9,8,4] print(sorted(list1)) print(sorted(list1,reverse=True)) print(sorted(list1,True))
参数reverse的传递方式必须使用关键字
task3
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))
实验任务三
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: 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()
实验任务4
def list_generator(a,b,c=1):
list0 = []
while True:
a=a+c
list0.append(a)
if a == b:
return list0
break
list1=list_generator(-5,5)
print(list1)
list2=list_generator(-5,5,2)
print(list2)
list3=list_generator(1,5,0.5)
print(list3)
实验任务5
def is_prime(n):
for i in range(2,n):
if n%i==0:
break
return False
else:
return True
list1=list(i for i in range(4,21,2))
for x in list1:
list2=[]
for i in range(2,x):
if is_prime(i)==True:
list2.append(i)
for i in list2:
if (x-i) in list2:
print(f'{x} = {i} + {x-i}')
break
实验任务6
def encoder(text:str): ans=[] for n in text: x=ord(n) if 65<=x<=90: ans.append(chr((x-60)%26+65)) elif 97<=x<=122: ans.append(chr((x-92)%26+97)) else: ans.append(n) return ''.join(ans) def decoder(text1): ans1=[] for n in text1: x1=ord(n) if 65 <= x1 <= 90: ans1.append(chr((x1 - 44) % 26 + 65)) elif 97 <= x1 <= 122: ans1.append(chr((x1 - 76) % 26 + 97)) else: ans1.append(n) return ''.join(ans1) text=input('输入英文文本:') text1=encoder(text) print(f'编码后的文本:{text1}') print(f'解码后的文本:{decoder(text1)}')
实验7
a=[] def Collatz(n): if n==1: a.append(1) return a if n%2==0: a.append(int(n)) return Collatz(n/2) if n%2!=0: a.append(int(n)) return Collatz(3*n+1) try: x=int(input('Enter a positive integer:')) if abs(x)+x==0 or type(x)!=int: raise except: print('Error: must be a positive integer') else: print(Collatz(x))