实验4 函数与异常处理应用编程

1.任务1

print(sum)
sum=42
print(sum)

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

sum = inc(7) + inc(7)
print(sum)

不代表一个变量名,1、3、11是全局作用域,7是函数作用域

2.任务2

2_1

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]

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))

2_2

list1 = [1,9,8,4]

print(sorted(list1))
print(sorted(list1,reverse=True))
print(sorted(list1,True))

需要使用关键字传参。

2_3

def func(a,b,c,/,*,d,e,f):
    return([a,b,c,d,e,f])

print(func(1,2,3,f=6,d=4,e=5))

3.任务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:
        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.任务4

def list_generator(a,b,c=1):
    l=[a]
    while True:
        if c==None:
            a+=1
            l.append(a)
            if a==b:
                break
        else:
            a+=c
            l.append(a)
            if a==b:
                break
    return l
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.任务5

from math import sqrt

def is_prime(n):
    if n==1 or n==0:
        return False
    for i in range(2,int(sqrt(n)+1)):
        if n%i==0:
            return False
    return True
def gd(x):
    for i in range(2,x):
        if is_prime(i):
            if is_prime(x-i):
                print(x,'=',i,'+',x-i)
                return True
    return False
i=4
while(gd(i) and i<20):
    i+=2

6.任务6

 

def encoder(s):
    s=list(s)
    for i in range(len(s)):
        if s[i].isalpha():
            if 'a'<=s[i].lower()<'v':
                s[i]=chr(ord(s[i])+5)
            else:
                s[i]=chr(ord(s[i])-21)
        else:
            s[i]=s[i]
    s=''.join(s)
    return s
def decoder(s):
    s=list(s)
    for i in range(len(s)):
        if s[i].isalpha():
            if 'a'<=s[i].lower()<='e':
                s[i]=chr(ord(s[i])+21)
            elif 'e'<s[i].lower()<='z':
                s[i]=chr(ord(s[i])-5)
        else:
            s[i]=s[i]
    s=''.join(s)
    return s
s=input('输入英文文本: ')
print(f'编码后的文本:{encoder(s)}')
print(f'对编码后的文本解码:{decoder(encoder(s))}')

7.任务7

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

 实验总结:

1.复习了判断素数的函数

2.学会了证明哥德巴赫猜想的函数

3.复习了try-except-raise的用法

4.知道了位置传参、关键字传参的区别

  

  

  

posted on 2022-05-07 15:38  马可菠萝堡  阅读(22)  评论(1编辑  收藏  举报

导航