实验4
实验任务1
print(sum) sum = 42 print(sum) def inc(n): sum = n+1 print(sum) return sum sum = inc(7) + inc(7) print(sum)

question:task1.py源码中,共有4处有python语句print(sum)(line1, line3, line7, line11)。这4处使用的标识符sum是代表一个变量名吗?如果不是,请分别指出这4行中变量sum的作用域。
answer:不是。
1.Built-in
2.Global
3.Local
4.Global
实验任务2
task2_1
1 def func1(a,b,c,d,e,f): 2 ''' 3 返回参数a,b,c,d,e,f构成的列表 4 默认,参数按位置传递;也支持关键词传递 5 ''' 6 return [a,b,c,d,e,f] 7 8 9 def func2(a,b,c,*,d,e,f): 10 ''' 11 返回参数a,b,c,d,e,f构成的列表 12 *后面的参数只能按关键词传递 13 ''' 14 return [a,b,c,d,e,f] 15 16 17 def func3(a,b,c,/,d,e,f): 18 ''' 19 返回参数a,b,c,d,e,f构成的参数 20 /前面的参数只能按位置传递 21 ''' 22 return[a,b,c,d,e,f] 23 24 25 # func1调用:按位置传递、按参数传递都可以 26 print( func1(1,9,2,0,5,3)) 27 print( func1(a = 1,b = 9,c = 2,d = 0,e = 5,f = 3)) 28 print( func1(1,9,2,f = 3,d = 0,e = 5)) 29 30 31 # func2调用:d,e,f必须按关键字传递 32 print( func2(11,99,22,d = 0,e = 55,f = 33)) 33 print( func2(a = 11,b = 99,c = 22,d = 0,e = 55,f = 33)) 34 35 36 # func3调用:a,b,c必须按位置传递 37 print( func3(111,999,222,0,555,333)) 38 print( func3(111,999,222,d = 0,e = 555,f = 333))

在line33后,增加一行函数调用,重新运行后出现错误提示信息

在line38后,增加一行函数调用,重新运行后出现错误提示信息

task2_2
list1 = [1,9,8,4] print( sorted(list1)) print( sorted(list1,reverse = True)) print( sorted(list1,True))

questionr:python内置函数sorted()中,参数reverse的传递方式是否必须使用关键字传递?
answer:是
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))

实验任务3
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 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()

实验任务4
def list_generator(a, b, c=1): ans = [] i = a while i <= b: ans.append(i) i += c return ans 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): if n <= 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True even_numbers = list(range(4, 21, 2)) for num in even_numbers: for i in range(2, num // 2 + 1): if is_prime(i) and is_prime(num - i): print(f'{num} = {i} + {num - i}') break

实验任务6
def encoder(text): encoded_text = "" for char in text: if char.isalpha(): if char.islower(): encoded_char = chr((ord(char) - ord('a') + 5) % 26 + ord('a')) else: encoded_char = chr((ord(char) - ord('A') + 5) % 26 + ord('A')) else: encoded_char = char encoded_text += encoded_char return encoded_text def decoder(text): decoded_text = "" for char in text: if char.isalpha(): if char.islower(): decoded_char = chr((ord(char) - ord('a') - 5) % 26 + ord('a')) else: decoded_char = chr((ord(char) - ord('A') - 5) % 26 + ord('A')) else: decoded_char = char decoded_text += decoded_char return decoded_text # 主体代码逻辑 text = input('输入英文文本: ') encoded_text = encoder(text) print('编码后的文本: ', encoded_text) decoded_text = decoder(encoded_text) print('对编码后的文本解码: ', decoded_text)

实验任务7
def collatz(n): if n % 2 == 0: return n // 2 else: return n * 3 + 1 try: num = int(input("请输入一个正整数: ")) if num <= 0: raise ValueError sequence = [num] while num != 1: num = collatz(num) sequence.append(num) print(sequence) except ValueError: print("Error: must be a positive integer")

实验任务8
def func(n): if n > 0: return (func(n-1)+1)*2-1 else: return 0 while True: x = input() if x == '#': print('计算结束') break n = int(x) ans = func(n) print(f'n = {n}, ans = {ans}')


浙公网安备 33010602011771号