手动汇总python的基础练习题

python基础习题


python学习过程中题目很多,特写此记录部分习题,解题方法不一定最佳,欢迎文末讨论。

索引

  • python基础习题
  • T1 字符串密码强度
  • T2 复制文档并添加行号
  • T3 MD5
  • T4 excel操作
  • 总结

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("弱密码")

运行的截图:
手动汇总python的基础练习题_第1张图片

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

运行后文档的截图:
手动汇总python的基础练习题_第2张图片

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

在这里插入图片描述
手动汇总python的基础练习题_第3张图片
手动汇总python的基础练习题_第4张图片

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,仅作实验记录之用。
  • 水平有限,解题有需要改正之处还望指出。
  • 更新中。

你可能感兴趣的:(学习记录)