实验4

task1:

复制代码
print(sum)
sum=42
print(sum)

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

sum=inc(7)+inc(7)
print(sum)
复制代码

 

 回答问题:这四处的sum不是一个变量名。

第一个是系统内置函数的‘sum’,作用于数的求和

第二个是以‘sum’命名的数

第三个定义函数中的值

第四个是计算后的值

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]

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) )
复制代码

 

 task2_2:

list1 = [1, 9, 8, 4]

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

 

 回答问题:

python内置函数sorted()中,参数reverse的传递方式必须使用关键字传递。
task2_3
def func(a,b,c,/,*,d,e,f):
    return( [a,b,c,e,d,f] )

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

 

 task3:

复制代码
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()
复制代码

 

 

若在While前加print(solve.__doc__),结果仍然能被打印出来

复制代码
def list_generator(a,b,step=1):
    list=[]
    while True:
        if a>=b:
            break
        else:
            list.append(a)
            a+=step
    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)
复制代码

task5:

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

for i in range(2,21,2):
    for j in range(2,i):
        if is_prime(i-j):
            print(f'{i}={j}+{i-j}')
            break
复制代码

 

 

 

 task_6:

 

复制代码
def encoder(text):
    text1=[]
    str(text1)
    for i in text:
        if i.islower():
            text1.append(chr((ord(i)-92)%26+97))
        elif i.isupper():
            text1.append(chr((ord(i)-60)%26+65))
        else:
            text1.append(i)
    return ''.join(text1)

text=input("输入英文文本:")
print(f'编码后的文本:{encoder(text)}')
print(f'对编码后的文本解码:{text}')
复制代码

 

 

 task7:

复制代码
def collatz(n):
    list=[n]
    while list[-1]!=1:
        if list[-1]%2==0:
            list.append(int(list[-1]/2))
        else:
            list.append(int(list[-1]*3+1))
    return list


try :
    n=eval(input("Enter a posive interger:"))
    if n<=0 or int(n)!=n:
         raise
except:
    print("Error: must be a positive integer")
else:
    print(collatz(n))
复制代码

 

 

 

 

 

 

 

 

 
posted @ 2022-05-11 18:49  MeiKoY  阅读(36)  评论(3编辑  收藏  举报