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,仅作实验记录之用。
- 水平有限,解题有需要改正之处还望指出。
- 更新中。
上一篇: Java中面向对象的知识点总结
下一篇: 获取属性 - attr()