csdn_export_md

牧心2發表於2021-01-01
Python最後一次作業

1、寫出下列輸出

"brouhahas"[-5 : -1] + "!"
'haha!'

“haha!”

bool("c" or "i" > "e")
True

True

#bool("c" and "i" > "e")
#True
len({"11": "racehorse", "22":"ditto"}.items())
2

2

[n for n in range(4) if n**2 > n]
[2, 3]

[2,3]

2、寫一個函式zero_sum_word(Word),它接受一個單個引數單詞(一個非空字串),如果相鄰字母之間的ASCII碼差之和為0,則返回True,否則汗會False,例如,"pomp"將返回True,-1(p->o), -2(o->m), 以及3(m->p), 最終(-1)+(-2)+3=0

#檢查首尾字母相同就可以!!
def zero_sum_word(a):
    if len(a) <= 1:
        return True
    sum = 0
    for i in range(len(a)-1):
        num1 = ord(a[i : i+1])
        num2 = ord(a[i+1])
        sum += num1 - num2
    if sum == 0:
        return True
    else:
        return False
    
    
if __name__ == '__main__':
    print(zero_sum_word('pomp'))
    print(zero_sum_word('supernaturals'))
    print(zero_sum_word('o'))
    print(zero_sum_word('disorder'))
    print(zero_sum_word('supercalifragilisticexpialidocious'))
True
True
True
False
True

3、輸出的第一行包含三個正整數N,M,K, 表示一個NM的矩陣乘以一個MK的矩陣。接下來N行,每行M個整數,表示第一個矩陣。再接下來的M行,每行K個整數,表示第二個矩陣。

輸出格式:輸出有N行,每行K個整數,表示矩陣乘法的結果。

#將每次輸入的str轉化為一個list,存為int
#在將多位數轉化為int時 使用re得到多位數而不是個位數
import re
def str_to_list(a):
    list1 = []
    a = a.split(" ")
    for i in range(len(a)):
        list1.append(int(a[i]))
    return list1

def matrix_multi():
   #定義三個二維陣列
    a = []
    a = str_to_list(input("請輸入N,M,K:"))
    
    #對三個數的數值限制
    try:
        assert a[0] > 0 and a[0] <= 100
        assert a[1] > 0 and a[1] <= 100
        assert a[2] > 0 and a[2] <= 100
    except AssertionError as e:
        print("要求0 < N,M,K <= 100,請重試!")
        return

    n,m,k = a[0],a[1],a[2]
    matrix1 = [[0 for _ in range(m)] for _ in range(n)]
    matrix2 = [[0 for _ in range(k)] for _ in range(m)]
    matrix_result = [[0 for _ in range(k)] for _ in range(n)]
    
    #傳入陣列值
    for i in range(n):
        matrix1[i] = str_to_list(input(f"請輸入第一個矩陣的第{i+1}行:"))
        #界限檢查
        try:
            for x in matrix1[i]:
                assert x >= 0 and x <= 1000
        except AssertionError as e:
                print("要求 0 <= 矩陣中的每個數 <= 1000,輸入的{matrix1[i]}數值超出了限制!")
                return
    for j in range(m):
        matrix2[j] = str_to_list(input(f"請輸入第二個矩陣的第{j+1}行:"))
        try:
            for x in matrix2[j]:
                assert x >= 0 and x <= 1000
        except AssertionError as e:
                print(f"要求 0 <= 矩陣中的每個數 <= 1000,輸入的{matrix2[j]}數值超出了限制!")
                return
    
    #計算矩陣中每一個元素的值
    for i in range(n):
        for j in range(k):
            sum = 0
            for x in range(m):
                sum += matrix1[i][x] * matrix2[x][j]
            matrix_result[i][j] = sum
            
    for i in range(n):
        for j in range(k):
            print(matrix_result[i][j],end = ' ')
        print(end = '\n')
    return


if __name__ == '__main__':
    matrix_multi()
請輸入N,M,K:2 1 3
請輸入第一個矩陣的第1行:20
請輸入第一個矩陣的第2行:2
請輸入第二個矩陣的第1行:121 555 666
2420 11100 13320 
242 1110 1332 

4、自己編寫程式碼實現棧和佇列的基本功能。

class Stack:
    def __init__(self):
        self.stack_list = []
        
    def push(self,item):
        self.stack_list.append(item)
        
    def pop(self):
        if not self.is_empty():
            a = self.stack_list[-1]
            del self.stack_list[-1]
            return a
        else:
            print("棧已經為空,無法刪除元素!")
    
    def peek(self):
        if not self.is_empty():
            return self.stack_list[-1]
        else:
            print("棧為空,棧尾無元素!")
            
    def is_empty(self):
        return len(self.stack_list) == 0
    
    def size(self):
        return len(self.stack_list)
    

class Quene:
    def __init__(self):
        self.quene_list = []
        
    def enquene(self,item):
        self.quene_list.append(item)
        
    def dequene(self):
        if not self.is_empty():
            del self.quene_list[0]
        else:
            print("佇列為空,無法刪除!")
    
    def is_empty(self):
        return len(self.quene_list) == 0

    def size(self):
        return len(self.quene_list)
    
    def get(self):
        return self.quene_list[0]
        
        
if __name__ == '__main__':
    stack1 = Stack()
    stack1.push('hello')
    stack1.push('python')
    print(stack1.pop())
    print(stack1.size())
    quene1 = Quene()
    quene1.enquene('你好')
    quene1.enquene('中國人')
    quene1.dequene()
    print(quene1.get())
        
python
1
中國人

5、編寫程式碼實現質數分解

#一個得到最小因子的函式,遞迴
n = []
def get_minism_factor(a):
    for i in range(a):
        if i == 0 or i == 1:
            continue
        if a%i == 0:
            n.append(i)
            get_minism_factor(a//i)
            return     
    n.append(a)
        

if __name__ == '__main__':
    a = int(input("請輸入需要分解的數字:"))
    get_minism_factor(a)
    print(f'{a}={n[0]}',end ='')
    for i in  range(len(n)-1):
        print("*"+str(n[i+1]),end='')
請輸入需要分解的數字:10086
10086=2*3*41*41

6、給定一個十進位制數,根據數制轉換原理將其轉換為K進位制數(2<=k<=9)。

#題目要求只需考慮正整數情況
n = []
def transform(num,k):
    if num < k:
        n.append(num)
    else:
        n.append(num%k)
        transform(num//k,k)
    return


if __name__ == '__main__':
    num = int(input("輸入正整數num:"))
    k = int(input("輸入整數k:"))
    transform(num,k)
    for i in range(len(n)):
        print(n.pop(),end='')

輸入正整數num:10086
輸入整數k:2
10011101100110