当前位置: 首页 > news >正文

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题:Python实现打印100内数学试题软件及开发过程

一、需求管理:

1.实现语言:Python

2.打印纸张:A4

3.铺满整张纸

4.打包成exe

先看效果:

1.

2.电脑打印预览

3.打印到A4纸效果(晚上拍的,和手机像素有关,实际效果是清晰的)

二、实现过程

第一版:

效果:

代码: 

from reportlab.lib.pagesizes import letter, A4
from reportlab.pdfgen import canvas
import random# 设置A4纸尺寸
width, height = A4# 定义页面边距(单位:毫米)
margin = 20# 题目数量
num_questions = 50 # 示例中设置为50道题,可根据需要调整def generate_question():"""生成一道100以内的随机加减法题目"""op = random.choice(['+', '-'])if op == '+':a = random.randint(0, 100)b = random.randint(0, 100 - a) # 确保结果不超过100else:a = random.randint(0, 100)b = random.randint(0, a) # 确保减法结果非负return f"{a} {op} {b} = "def draw_questions(c):"""在canvas上绘制题目"""question_width = (width - 2 * margin) / 2 # 每列宽度question_height = 20 # 每题高度,可调整y_position = height - margin - question_height * num_questions # 起始y坐标for i in range(num_questions):c.setFont("Helvetica", 12) # 设置字体和大小question = generate_question()c.drawString(margin, y_position, question)y_position += question_heightdef main():c = canvas.Canvas("math_test.pdf", pagesize=A4)draw_questions(c)c.save()print("PDF文件已生成。")if __name__ == "__main__":main()

第二版(最终版):

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
import random# 设置A4纸尺寸
width, height = A4# 定义页面边距(单位:毫米)
margin = 20# 题目数量(总题目数)
num_questions = 200 # 示例中设置为200道题,可根据需要调整# 每列题目数估算,这里简化处理,实际情况可能需要更精确的计算以适应不同长度的题目
questions_per_column = num_questions // 4
if num_questions % 4 != 0:questions_per_column += 1# 计算每列宽度
column_width = (width - 3 * margin) / 4 # 减去3个间隔的边距def generate_question():"""生成一道100以内的随机加减法题目"""op = random.choice(['+', '-'])if op == '+':a = random.randint(0, 100)b = random.randint(0, 100 - a)else:a = random.randint(0, 100)b = random.randint(0, a)return f"{a} {op} {b} = "def draw_questions(c):"""在canvas上绘制题目到四列"""question_height = 20 # 每题高度,可调整column_positions = [margin + i * (column_width + margin) for i in range(4)] # 四列的位置y_position = height - margin - question_height * questions_per_column # 起始y坐标for col_pos in column_positions:y_position = height - margin - question_height * questions_per_column # 重置y坐标for q in range(questions_per_column):question = generate_question()c.setFont("Helvetica", 12) # 设置字体和大小c.drawString(col_pos, y_position, question)y_position += question_height # 移动到下一行def main():c = canvas.Canvas("math_test_4_columns.pdf", pagesize=A4)draw_questions(c)c.save()print("PDF文件已生成,包含四列题目。")if __name__ == "__main__":main()

Python 版本:3.8

需要安装的Python插件及安装顺序:

chardet-5.2.0-py3-none-any.whl

reportlab-4.2.0-py3-none-any.whl

setuptools-69.5.1-py3-none-any.whl

altgraph-0.17.4-py2.py3-none-any.whl

pyinstaller_hooks_contrib-2024.6-py2.py3-none-any.whl

pefile-2023.2.7-py3-none-any.whl

pywin32_ctypes-0.2.2-py3-none-any.whl

pyinstaller-6.6.0-py3-none-win_amd64.whl

总结:

建议大家可以运行一下上面开发全部过程的代码,然后对比我上面的代码。找到出bug的地方,对比已经修复的地方。

揭开题目我敲的字母:

灰色就是编辑器提示的代码,可以按tab键直接生成,使用vscode安装fittencode插件。

(完)

http://www.lryc.cn/news/348436.html

相关文章:

  • 【C++杂货铺】红黑树
  • css--控制滚动条的显示位置
  • 华为设备display查看命令
  • 自动攻丝机进出料激光检测 进料出料失败报警循环手动及关闭报警退出无限循环
  • 2024年去除视频水印的5种方法
  • 怎么用电脑接收手机文件 用备忘录传输更舒服
  • 微信小程序、uniapp密码小眼睛
  • 【手势操作-复习前一天的内容-预习今天的内容 Objective-C语言】
  • ​​​【收录 Hello 算法】第 6 章 哈希表
  • rust类型和变量(二)
  • linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源
  • 基于门控的循环神经网络:LSTM
  • Web常见的攻击方式及其防御策略
  • 关于SQL
  • 大模型时代下两种few shot高效文本分类方法
  • Linux0.11 中全局描述符表(GDT)
  • 搜维尔科技:数据手套用于外固定虚拟现实模拟 、外固定增强现实模拟
  • 《三》菜单栏_工具栏_状态栏动作与实现
  • 基于NTP服务器获取网络时间的实现
  • Web APIs(获取元素+操作元素+节点操作)
  • Android adb shell关于CPU核的命令
  • 基于springboot+mybatis+vue的项目实战之页面参数传递
  • CSS-浮动
  • MFC:字符串处理
  • 虚拟仿真云平台在教育应用中的优势和意义
  • CPU的的处理流程如何快速记忆
  • AI视频教程下载:基于OpenAl、LangChain、 Replicate开发AI应用程序
  • 【C++】继承相关(基类与派生类的继承关系以及细节整理)
  • 【Web后端】监听器Listener
  • C/C++ 初级球球大作战练手