python基礎習題
python學習過程中題目很多,特寫此記錄部分習題,解題方法不一定最佳,歡迎文末討論。
T1 字符串密碼強度
題幹: “一般作爲密碼字符的主要有數字、小寫字母、大寫字母和標點符號這4個類型。假設密碼安全強度主要和字符串的複雜程度有關係:字符串包含的字符種類越多,認爲其安全強度越高。將安全強度分爲:強密碼(同時含有4個類型)、中高密碼(同時含有3個類型)、中低密碼(同時含有2個類型)、弱密碼(只含有1個類型)。編寫程序,用戶輸入一個字符串後,輸出該字符串作爲密碼時的安全強度。”
基礎階段的題目都比較簡單,簡單分析本題:遍歷字符串的所有單個字符,設定計數列表來統計不同類型的出現與否,從而判斷出密碼的安全強度。
# 編寫程序,用戶輸入一個字符串後,輸出該字符串作爲密碼時的安全強度。
for j in range(4):
n = input("輸入一個字符串:")
n = "".join(n)
count = [0,0,0,0]
for i in n:
if i.isdigit():
count[0] = 1
elif i.islower():
count[1] = 1
elif i.isupper():
count[2] = 1
else:
count[3] = 1
if sum(count) == 4:
print("強密碼")
elif sum(count) == 3:
print("中高密碼")
elif sum(count) == 2:
print("中低密碼")
else:
print("弱密碼")
運行的截圖:
T2 複製文檔並添加行號
題幹: “編寫一個程序demo.py,要求運行該程序後,生成demo_new.py文件:與demo.py一樣,只是在每一行的後面加上該行的行號。要求行號以#開始(例如第1行後面註明#1),並且所有行的#對齊。”
本題我的做法應該不是最好的做法,只能算一般:首先計算得整個文檔每行字符最多的一行,求其長度爲max_len,然後給每一行都補齊。要注意的是每一行末尾還有一個/n(最後一行除外),所以在追加#+行號的時候需要進行特別處理。
# 編寫一個程序demo.py,要求運行該程序後,生成demo_new.py文件
count = "1"
max_len = 0
source = open("demo.py","r",encoding = "UTF-8")
back = open("demo_new.py","w")
s = source.readlines()
for i in range(len(s)):
if len(s[i]) >= max_len:
max_len = len(s[i])
for i in range(len(s)):
temp_s = list(s[i])
for j in range(max_len - len(s[i])):
temp_s.insert(-1," ")
s[i] = temp_s
for line in s:
line = list(line)
line.insert(-1,"#")
line.insert(-1,count)
back.write("".join(line))
count = str(int(count) + 1)
source.close()
back.close()
運行後文檔的截圖:
T3 MD5
題幹: “MD5是一個對文件求哈希值的算法,不論原始信息長度如何,總是計算得到一個固定長度的二進制串。(MD5算法對原文的改動非常敏感,原文哪怕做微小改動,重新計算得到的MD5會有巨大變化。該算法常用於數字簽名、文件完整性校驗等應用中)。請編寫程序:a)要求用戶輸入一個文件名(包含完整路徑),輸出該文件名對應文件的MD5值;b)對用戶選擇的文件做任意微小改動(可自由選擇如何改動),輸出新文件的MD5值.
提示: Python標準庫的md5()函數可以用來計算字符串的MD5值,如果是要計算其他類型數據的MD5值,要先將其轉換爲字符串。”
# MD5題
import os
import hashlib
source = input("請輸入文件路徑:")
while True:
f = open(source,'r')
res = f.read()
print("md5:",hashlib.md5(res.encode(encoding='UTF-8')).hexdigest())
print("是否進行編輯?Y/...")
n = input()
if n == "Y":
os.system(source)
else:
break
T4 excel操作
前提: “請先將下面表格數據存入excel文件。”
姓名 | 語文 | 數學 | 英語 | 物理 |
---|---|---|---|---|
小張 | 86 | 95 | 86 | 70 |
小明 | 76 | 90 | 66 | 76 |
小劉 | 100 | 96 | 66 | 70 |
小王 | 96 | 100 | 90 | 66 |
小鄭 | 96 | 90 | 66 | 100 |
題幹: “編寫程序:a)統計每個學生的課程最高分(註明課程名)、課程最低分(註明課程名)和課程平均分,並寫入新的excel文件。b) 統計每門課程的最高分(註明學生名字)和最低分(註明學生名字),並寫入新的excel文件。”
# 表格題
from openpyxl import load_workbook
import openpyxl
# 獲取原表格數據
excel = load_workbook('demo.xlsx')
table = excel['Sheet1']
rows = table.max_row
cols = table.max_column
data_content = []
data = []
for i in range(1,rows + 1):
for j in range(1,cols + 1):
data_content.append(table.cell(row = i,column = j).value)
data.append(data_content)
data_content = []
# 運算
temp_list = []
temp_data = [["姓名","最高分課程","最高分分數","最低分課程","最低分分數","平均分"]]
for k in range(1,rows):
temp_list.append(data[k][0])
temp_list.append(data[0][data[k].index(max(data[k][1:]))])
temp_list.append(max(data[k][1:]))
temp_list.append(data[0][data[k].index(min(data[k][1:]))])
temp_list.append(min(data[k][1:]))
s = 0
for m in data[k][1:]:
s += m
temp_list.append(s / (len(data[k]) - 1))
temp_data.append(temp_list)
temp_list = []
# 寫入新的表格
wb = openpyxl.Workbook()
sheet1 = wb.create_sheet(index=0, title="sheet1")
for p in range(1,len(temp_data[1]) + 1):
for q in range(1,len(temp_data) + 1):
directionCell = sheet1.cell(row = p, column = q)
directionCell.value = temp_data[p - 1][q - 1]
wb.save("demo_1.xlsx")
# 獲取原數據
data_content_1 = []
data_1 = []
for i in range(1,cols + 1):
for j in range(1,rows + 1):
data_content_1.append(table.cell(row = j,column = i).value)
data_1.append(data_content_1)
data_content_1 = []
# 運算
temp_list_1 = []
temp_data_1 = [["課程名","最高分","最高分姓名","最低分","最低分姓名"]]
for k in range(1,cols):
temp_list_1.append(data_1[k][0])
temp_list_1.append(max(data_1[k][1:]))
temp_list_1.append(data_1[0][data_1[k].index(max(data_1[k][1:]))])
temp_list_1.append(min(data_1[k][1:]))
temp_list_1.append(data_1[0][data_1[k].index(min(data_1[k][1:]))])
temp_data_1.append(temp_list_1)
temp_list_1 = []
# 寫入新的表格
wb = openpyxl.Workbook()
sheet1 = wb.create_sheet(index=0, title="sheet1")
for p in range(1,len(temp_data_1[1]) + 1):
for q in range(1,len(temp_data_1) + 1):
directionCell = sheet1.cell(row = p, column = q)
directionCell.value = temp_data_1[p - 1][q - 1]
wb.save("demo_2.xlsx")
總結
- 同步更新至CSDN,僅作實驗記錄之用。
- 水平有限,解題有需要改正之處還望指出。
- 更新中。