手動彙總python的基礎練習題

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,僅作實驗記錄之用。
  • 水平有限,解題有需要改正之處還望指出。
  • 更新中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章