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

源码中,共有4处有python语句 print(sum) (line1, line3, line7, line11)。 这4处使用的标识符sum是代表一个变量名吗?如果不是,请分别指出这4行中变量sum的作用域。

不是,1.Built-in2.Global全局变量42 3.Local(n+1)4.Global(inc(7) + inc(7))

task2.py

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

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

 

 

 

 task4.py 

def list_generator(begin, end, step=1):
    ls = []
    a = begin
    b = end
    while a <= b:
        ls.append(a)
        a += step
    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(a):
  for i in range(2, int(a)+1):
    if not n%i:
      return False  
    else:
      return True


ls = []
for i in range(20):
    if is_prime(i):
        ls.append(i)


def summary(x):
    i = 0
    while True:
        for j in range(i, len(ls)):
            s = ls[i]+ls[j]
            if x == s:
                s = f"{s} = {ls[i]} + {ls[j]}"
                return s
        i += 1


for i in range(4, 21, 2):
    print(summary(i))

 task6.py

z=0
x=str(input('输入英文文本:'))
for i in range(len(x)):
    if 128>ord(x[i])+5>122 or 96>ord(x[i])+5>90:
        a=ord(x[i])-21
        z=z+1
    elif 65<=ord(x[i])<=85 or 97<=ord(x[i])+5<=117:
        a=ord(x[i])+5
        z=z+1
    else:
        a=ord(x[i])
        z=z+1
    if z==1:
        print('编码后的文本',end='')
    print(chr(a),end='')
print()
print('对编码后的文本解码',x)

 

 

task7.py

def collatz(a):
    """验证Collatz猜想"""
    if not a % 2:
        return a / 2
    else:
        return 3 * a + 1


try:
    n = int(input("Enter a positive integer: "))
    if n <= 0:
        raise ValueError
    ls = [n]
    while n != 1:
        n = collatz(n)
        ls.append(n)
    print([int('{:.0f}'.format(i)) for i in ls])
except ValueError:
    print("Error:must be a positive integer")

 

posted @ 2022-05-11 14:31  思杰  阅读(21)  评论(2编辑  收藏  举报