1. 程式人生 > 其它 >實驗4:函式與異常處理應用程式設計

實驗4:函式與異常處理應用程式設計

任務實驗1:

1 print(sum)
2 sum=42
3 print(sum)
4 def inc(n):
5     sum=n+1
6     print(sum)
7     return sum
8 sum=inc(7) +inc(7)
9 print(sum)

問題答案:程式碼中的sum並不是同一個變數名,line1的sum是內建作用域,line3的sum是全域性作用域,line7的sum是區域性作用域,line9的sum是全域性作用域。

任務實驗2.1:

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

任務實驗2.2:

list1= [1, 9, 8, 4]

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

問題答案:

python內建函式sorted()中,引數reverse的傳遞方式必須使用關鍵字傳遞

任務實驗2.3:

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

任務實驗3:

 1 def solve(a, b, c):
 2     '''求解一元二次方程, 返回方程的兩個根
 3     :para: a,b,c: int 方程係數
 4     :return: tuple
 5     '''
 6     delta=b*b-4*a*c
 7     delta_sqrt=abs(delta)**0.5
 8     p1=-b/2/a;
 9     p2=delta_sqrt/2/a
10 
11     if delta>=0:
12         root1=p1+p2
13         root2=p1-p2
14     else:
15         root1=complex(p1, p2)
16         root2=complex(p1, -p2)
17     return root1, root2
18 
19 while True:
20     try:
21         a,b,c=eval(input('Enter eqution coefficient: '))
22         if a==0:
23             raise
24     except:
25         print('invalid input, or, a is zero')
26         break
27     else:
28         root1, root2=solve(a, b, c)
29         print(f'root1 = {root1:.2f}, root2 = {root2:.2f}')
30         print()

任務實驗4:

def list_generator (begin,end,step=1):
    list=[]
    while begin<=end:
        list.append(begin)
        begin=begin+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)

任務實驗5:

def isPrime(x):
    i=2
    while i<=x-1 and x%i!=0:
        i=i+1
    if i==x:
        return True
    else:
        return False
for j in range(4,21,2):
    for n in range(2,j):
        if isPrime(n) and isPrime(j-n):
            print(f'{j}={n}+{j-n}')
            break

任務實驗6:

 1 def encoder(x):
 2     a=5
 3     b=''
 4     for i in x:
 5         if 65<=ord(i)<=85:
 6             b+=chr(ord(i)+5)
 7         elif 97<=ord(i)<=117:
 8             b+=chr(ord(i)+5)
 9         elif 85<ord(i)<=90:
10             b+=chr(65+(a-(90-ord(i))))
11         elif 117<ord(i)<=122:
12             b+=chr(97+(a-(122-ord(i))))
13         else:
14             b+=i
15     return b
16 def decoder(y):
17     c=5
18     d=''
19     for j in y:
20         if 70<=ord(j)<=90:
21             d+=chr(ord(j)-5)
22         elif 102<=ord(j)<=122:
23             d+=chr(ord(j)-5)
24         elif 65<=ord(j)<70:
25             d+=chr(90-(c-(ord(j)-65)))
26         elif 97<=ord(j)<102:
27             d+=chr(122-(c-(ord(j)-97)))
28         else:
29             d+=j
30     return d
31 x=input('輸入英語文字:')
32 print('編碼後的文字:',encoder(x))
33 print('對編碼後的文字解碼:',decoder(encoder(x)))

任務實驗7:

 1 def collatz(n):
 2     x=[n]
 3     while n!=1: 
 4         if n%2==0:
 5             n=n/2
 6         else:
 7             n=3*n+1
 8         x.append(int(n))
 9     return x
10 try:
11     n=int(input('Enter a positive integer:'))
12     if n<=0:
13         raise
14 except:
15     print('Error: must be a positive integer')
16 else:
17     print(collatz(n))