实验四 函数与异常编程处理

实验任务1

task1-1

实验源码

print(sum)
sum = 42
print(sum)
def inc(n):
    sum = n+1
    print(sum)
    return sum
sum = inc(7) + inc(7)
print(sum)

  实验截图

问题:task1.py源码中,共有4处有python语句 print(sum) (line1, line3, line7, line11)。 这4处使用的标识符sum是同一个对象的名称吗?如果不是,请以文字方式回答这4行中标识符sum的作用域。 

回答:不是,line1是Built-in内置作用域,line3和line11是Global全局作用域,line7是Local局部作用域。

实验任务2

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):
    return [a,b,c,d,e,f]
def func3(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) )

  实验截图

问题:python内置函数sorted()中,参数reverse的传递方式是否必须使用关键字传递? 

回答:是的。

task2-2

实验源码

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

task3-1

实验源码

def solve(a, b, c):
    '''
    求解一元二次方程, 返回方程的两个根:para: a,b,c: float 方程系数: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

task4-1

实验源码

def list_generator(x,y,z=1):
    list=[]
    while x<=y:
        list.append(x)
        x=x+z
    return list


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

task5-1

实验源码

def is_prime(n):
    if n==2:
        return True
    else:
        for i in range(2,int((n**0.5)+1)):
            if n%i==0:
                return False
        return True


for i in range(4,21,2):
    for x in range(2,i):
        if is_prime(i-x):
            print(f'{i}={x}+{i-x}')
            break

  实验截图

实验任务6

task6-1

实验源码

def encoder(text):
    text=list(text)
    i=0
    while i< len(text):
        if text[i].isalpha():
            if text[i].islower():
                if ord(text[i])<=117:
                    text[i]=chr(ord(text[i])+5)
                else:
                    text[i]=chr(ord(text[i])+5-26)
            if text[i].isupper():
                if ord(text[i])<=85:
                    text[i] = chr(ord(text[i]) + 5)
                else:
                    text[i] = chr(ord(text[i]) + 5 - 26)
        i+=1
    return ''.join(text)
def decoder(text):
    text = list(text)
    i = 0
    while i < len(text):
        if text[i].isalpha():
            if text[i].islower():
                if ord(text[i]) >= 102:
                    text[i] = chr(ord(text[i]) - 5)
                else:
                    text[i] = chr(ord(text[i]) - 5 + 26)
            if text[i].isupper():
                if ord(text[i]) >= 46:
                    text[i] = chr(ord(text[i]) - 5)
                else:
                    text[i] = chr(ord(text[i]) - 5 + 26)
        i += 1
    return ''.join(text)
for i in range(3):
    title='Remote Interpreter Reinitialized'
    print(title.center(60,'*'))
    text=input('输入英文文本:')
    encoded_text=encoder(text)
    print('编码后的文本:',encoded_text)
    decoded_text=decoder(encoded_text)
    print('对编码后的文本解码:',decoded_text)

  实验截图

实验任务7

task7-1

实验源码

def collatz(n):
    lst = [n]
    while lst[-1] != 1:
        if lst[-1] % 2 == 0:
            lst.append(lst[-1]//2)
        else:
            lst.append(lst[-1]*3+1)
    return lst


try:
    n = int(input('Enter a positive integer:'))
    if n <= 0:
        raise
except:
    print('Error: must be a positive integer')
else:
    print(collatz(n))

  实验截图

实验任务8

task8-1

实验源码

def func(n):
    if n ==1:
        return 1
    else:
        return 1+2*func(n-1)


while True:
    x = input()
    if x == '#':
        print('计算结束')
        break
    n = int(x)
    ans = func(n)
    print(f'n = {n}, ans = {ans}')

  实验截图

 

posted @ 2023-05-22 13:28  赖鑫  阅读(41)  评论(0)    收藏  举报