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

 

posted @ 2022-05-09 22:22  星标g  阅读(24)  评论(3编辑  收藏  举报