csdn_export_md
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