5.4 实践作业

2022-05-04
print(sum)     #<built-in function sum> 内置函数冲突 print sum嵌套但是sum没有输入参数 作用于该行代码
sum = 42       # 全局变量 
print(sum)     #全局变量名
def inc(n):
    sum = n+1
    print(sum)   #区域变量 只在def inc(n)内部起作用
    return sum
sum = inc(7) + inc(7)
print(sum)      #全局变量作用其已经以下的sum (更新了上面的全局变量sum)

 

 task2

# task——2

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) )      #没有按照要求传递参数

 

 

task-3

# task——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()
# b=被打印出来

 

task——4

# task _ 5
def list_generator(a,b,c=1):
if c!=1:
l=[]
while a<=b :
l.append(a)
a+=c
return l
else:
return [i for i in range(a, b + 1)]

list1 = list_generator(-5, 5)
print(list1)

list2 = list_generator(-5, 5, 2)
print(list2)

list3 = list_generator(1, 5, 0.5)
print(list3)

 

 


 


 

task——5

# # task _ 5
def is_prime(x):
    n = 0
    for i in range(2,x):
        if x%i == 0:
            n+=1
    if n==0:
        return 'True'
    else:
        return 'False'
print(is_prime(4))


prime = []
for i in range(1,21):
    if is_prime(i) =='True':
        prime.append(i)
    else:
        pass
print(prime)

# for j in prime:

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

 

 

task_6

# task_6
def encoder(n):
    text = []
    for i in n:
        if i.isupper():
            text.append(chr((ord(i) - 60) % 26 + 65))
        elif i.islower():
            text.append(chr((ord(i) - 92) % 26 + 97))
        else:
            text.append(i)
    return ''.join(text)

def decoder(n):
    text = []
    for i in n:
        if i.isupper():
            text.append(chr((ord(i) - 44) % 26 + 65))
        elif i.islower():
            text.append(chr((ord(i) - 76) % 26 + 97))
        else:
            text.append(i)
    return ''.join(text)


n = input(":")
print(f'英文文本:{n}\n编码后的文本:{encoder(n)}\n对编码后的文本解码:{decoder(encoder(n))}')

 

 

task_7

# task——7
def Collatz(n):
    list1 = [n]
    while list1[-1] != 1:
        if list1[-1]%2 == 0:
            list1.append(int(list1[-1]/2))
        else:
            list1.append(int(3*list1[-1]+1))
    return list1


print(Collatz(5))

try:
    n =eval(input('Enter a positive integer:'))
    if n<=0 or n !=int(n):
        raise
except:
    print('Error: must be a positive integer')
else:
    print(Collatz(n))

 

 


 

posted @ 2022-05-04 22:03  奈落——  阅读(60)  评论(3编辑  收藏  举报