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

软件课题: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.rhkb.cn/news/326743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实践】使用vscode来debug go程序的尝鲜

配置 首先,当然得配置好vscode 的go环境, 装个go插件就基本满足了 配置 launch.json, 可以配置多个环境的程序启动参数(很友好) {"version": "0.2.0","configurations": [{"name": &…

享元模式详解

享元模式 1 概述 定义: ​ 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。 2 结构 享元(Flyweight )模式中存…

linux学习:视频输入+V4L2

目录 V4L2 视频采集流程 代码例子 核心命令字和结构体 VIDIOC_ENUM_FMT VIDIOC_G_FMT / VIDIOC_S_FMT / VIDIOC_TRY_FM VIDIOC_REQBUFS VIDIOC_QUERYBUF VIDIOC_QBUF /VIDIOC_DQBUF VIDIOC_STREAMON / VIDIOC_STREAMOFF V4L2 是 Linux 处理视频的最新标准代码模块&…

力扣HOT100 - 45. 跳跃游戏 II

解题思路&#xff1a; 贪心 class Solution {public int jump(int[] nums) {int end 0;int maxPosition 0;int steps 0;for (int i 0; i < nums.length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]);if (i end) {end maxPosition;steps;}}return steps;…

Java | Leetcode Java题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode partition(ListNode head, int x) {ListNode small new ListNode(0);ListNode smallHead small;ListNode large new ListNode(0);ListNode largeHead large;while (head ! null) {if (head.val < x…

java sql中 大于 小于 大于等于 小于等于 代替符号

在写java时sql会经常会忘记大于小于号的表示方法导致无法运行&#xff0c;总结一下 第一种方法&#xff1a; < &#xff1a;< < &#xff1a; < &#xff1a;> &#xff1a; > sql如下&#xff1a; create_at > #{startTime} and create_at < #{end…

Linux系统编程:进程控制

1.进程创建 1.1 fork函数 fork&#xff08;&#xff09;通过复制调用进程来创建一个新进程。新进程称为子进程&#xff0c;是调用进程的精确副本 进程&#xff0c;但以下几点除外&#xff1a; 子进程有自己的PID&#xff0c;此PID与任何现有进程组的ID不匹配子进程的父进程ID…

【全开源】废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp

介绍 一款基于FastAdminThinkPHPUniApp开发的废品回收系统&#xff0c;适用废品回收站、再生资源回收公司上门回收使用的小程序 功能特性 1、会员注册 支持小程序授权注册和手机号注册 2、回收品类 可设置回收品类&#xff0c;废纸、废金属、废玻璃、旧衣服等 3、今日指导价…

简单实现---基于STL的演讲比赛流程管理系统(C++实现)

前言 事先声明&#xff1a;本文章中编写的代码仅用于学习算法思想和编写基础形式使用&#xff0c;并未进行太多的代码优化&#xff0c;因此&#xff0c;若需要对代码进行优化以及异常处理的小伙伴们&#xff0c;可自行添加相关操作&#xff0c;谢谢&#xff01; 一、题…

jenkins使用gitLab(极狐)认证登陆

jenkins安装 GitLab Authentication插件 我因为java版本和最新GitLab Authentication 1.19版本不兼容&#xff0c;选择了本地安装 找个历史版本1.13版本&#xff0c;然后下载到电脑上 - 本地上传插件并安装 在极狐上创建一个应用 - 配置应用信息 应用名&#xff1a;jenkinsLo…

[Linux][网络][高级IO][一][五种IO模型][同步通信][异步通信][非阻塞IO]详细讲解

目录 0.预备知识 && 思考问题1.五种IO模型0.形象理解五种模型1.阻塞IO2.非阻塞IO3.信号驱动IO4.多路转接/多路复用5.异步IO 2.高级IO重要概念1.同步通信 vs 异步通信2.阻塞 vs 非阻塞 3.非阻塞IO1.fcntl()2.实现SetNonBlock 0.预备知识 && 思考问题 网络通信本…

了解 GaussDB SQL 中 CASE 表达式

一、前言 SQL 是用于访问和处理数据库的标准计算机语言。GaussDB 支持 SQL 标准&#xff08;默认支持 SQL2、SQL3 和 SQL4 的主要特性&#xff09;。 本系列将以《云数据库 GaussDB—SQL 参考》在线文档为主线进行介绍。 二、CASE Expression&#xff08;CASE 表达式&#x…

sCrypt受邀在中国人民大学举办《区块链与数字经济》课程讲座

4月17日&#xff0c;可一科技特邀美国sCrypt公司的开发工程师周全&#xff0c;在中国人民大学的《区块链与数字经济》课程上进行了讲座。周全讲解了区块链的分布式设计、不可篡改特性&#xff0c;以及智能合约的基本原理&#xff0c;利用“智能家居触发机制”等生动比喻&#x…

laravel 使用 MongoDB

MongoDB MongoDB是一个基于分布式文件存储的数据库。由C语言编写。MongoDB 提供了面向文档的存储方式&#xff0c;操作起来比较简单和容易&#xff0c;支持“无模式”的数据建模&#xff0c;可以存储比较复杂的数据类型&#xff0c;是一款非常流行的文档类型数据库 使用场景 …

IDEA中git的常用操作(保姆级教学)

IDEA中git的常用操作&#xff08;保姆级教学&#xff09; 以下是git的工作原理&#xff0c;觉得繁琐的可以跳过不看 Workspace&#xff1a;工作区 (平时存放代码的地方) Index / Stage&#xff1a;暂存区&#xff08;用于临时存放存放你的改动&#xff0c;事实上就是一个文件&…

OSPF虚链路

原理概述 通常情况下&#xff0c;一个OSPF网络的每个非骨干区域都必须与骨干区域通过ABR路由器直接连接&#xff0c;非骨干区域之间的通信都需要通过骨干区域进行中转。但在现实中&#xff0c;可能会因为各种条件限制&#xff0c;导致非骨干区域和骨干区域无法直接连接&#x…

Unity自定义动画-Animation动画数据-How is “fileIDToRecycleName“ generated

一般美术和程序分工明确的项目 fbx确实是和动画一一对应的&#xff1b; 但一些独立&#xff0c;或者小工作室的项目&#xff0c;就没法保证了&#xff0c;关键还是在于 Unity的 .meta 目录 查找和对比了一下 .fbx 和 .meta&#xff1a; 缓存和不缓存Animation 具体的Animat…

记录MySQL数据库查询不等于xxx时的坑

目录 一、背景 二、需求 三、方法 四、示例 一、背景 在使用MySQL数据库查询数据时&#xff0c;需要查询字段name不等于xxx的记录&#xff0c;通过where name ! xxx查询出来的记录不符合预期&#xff0c;通过检查发现少了name字段为null的记录&#xff0c;后经查询得知在My…

安全加固

目录 1.文件锁定管理 2.设置用户账户有效期 3.查看并清除命令历史记录 4.设置用户超时登出时间 5.用户切换 6.用户提权 7.禁用重启热键CtrlAltDel 8.设置单用户模式密码 9.调整BIOS引导设置 10.禁止root用户从本地登录&#xff1a; 11.禁止root用户通过ss…

IDM下载器激活

文章目录 1、Internet Download Manager简介2、Internet Download Managery应用3、Internet Download Managery下载 1、Internet Download Manager简介 Internet Download Manager (IDM) 是一款功能强大的下载管理软件&#xff0c;旨在帮助用户更高效地管理和加速其下载任务。它…