实验四

实验任务一

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

 

posted @ 2022-05-11 15:30  朗格里格朗  阅读(22)  评论(3编辑  收藏  举报