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

news2024/11/24 4:56:10

软件课题: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) # 确保结果不超过100
    else:
        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_height

def 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.coloradmin.cn/o/1673082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言手把手教你进行支持向量机分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知…

云粒智慧实时数仓的架构演进分享:OceanBase + Flink CDC

4月20日,在2024 OceanBase开发者大会上,云粒智慧的高级技术专家付大伟,分享了云粒智慧实时数仓的构建历程。他讲述了如何在传统数仓技术框架下的相关努力后,选择了OceanBase Flink CDC架构的实时数仓演进历程。 业务背景及挑战 …

企业数据治理过程有哪些挑战?该如何克服?

在数字化时代,数据已成为企业最宝贵的资产之一。随着大数据、云计算和人工智能等技术的兴起,企业积累的数据量呈指数级增长。这些数据中蕴含着巨大的商业价值,对于推动企业发展、优化决策制定、增强市场竞争力具有不可替代的作用。然而&#…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数? 1、type函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、type函…

企业微信hook接口协议,ipad协议http,获取群成员列表简洁版

获取群成员列表简洁版 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955016166 } 返回示例 {"data": {&q…

政安晨:【Keras机器学习示例演绎】(四十四)—— 使用序列到序列转换器实现英语到西班牙语的翻译

目录 简介 设置 下载数据 解析数据 文本数据矢量化 建立模型 训练我们的模型 解码测试句子 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之…

智慧管家物业管理系统(小组项目)

目录 前言 一、项目介绍 1、目的和背景 2、项目主要内容 3、技术介绍 二、功能模块 1、重要文件结构 2、功能实现(部分个人负责模块功能) 2.1 展示房源信息页面 2.2 房屋详情页面 2.3 房源信息管理 三、功能模块页面 1、前台模块 2、后台…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

M-有效算法

在赛场上&#xff0c;脑子就两个字“二分”&#xff0c;一点思路都没&#xff0c;完全不知道二分谁&#xff0c;怎么二分&#xff0c;从哪入手。隐隐约约也知道要变换公式&#xff0c;可惜没坚持这个想法。脑子里全是把k分离出来&#xff0c;赛后看了题解才知道&#xff0c;应该…

Electron + GitHub Actions | 自动化流程详解(下)

自动化部署 上篇介绍了 Electron Forge 打包应用教程。在实际开发中&#xff0c;自动化是提升效率和产出质量的关键。本篇我们将详细介绍如何将构建和发布 Electron 应用的过程自动化。 代码挂在 GitHub 仓库上&#xff0c;如果有帮助&#xff0c;记得给仓库点个赞&#xff1a…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…

【MQTT】paho.mqtt.cpp 库的 介绍、下载、交叉编译、MQTT客户端例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-13 1…

盘他系列——oj!!!

1.Openjudge 网站: OpenJudge 2.洛谷 网站: 首页 - 洛谷 | 计算机科学教育新生态 3.环球OJ 网站: QOJ - QOJ.ac 4. 北京大学 OJ:Welcome To PKU JudgeOnline 5.自由OJ 网站: https://loj.ac/ 6.炼码 网站:LintCode 炼码 8.力扣 网站: 力扣 9.晴练网首页 - 晴练网

安科瑞AIM-D100-ES光伏储能系统直流绝缘监测仪

概述 AIM-D100-ES 型直流绝缘监测仪主要用于在线监测直流不接地系统正负极对地绝缘电阻&#xff0c;当绝缘电阻低于设定值时&#xff0c;能发出预警和报警信号。 产品可测 100-1500V 的直流系统&#xff0c;可应用于储能直流系统、电动汽车充电装置、UPS 供电系统、光伏直流系…

第十一届蓝桥杯大赛软件类决赛 Java C 组

文章目录 发现宝藏【考生须知】试题 A: 美丽的 2试题 B: 合数个数试题 C: 扩散试题 D: 阶乘约数试题 E: 本质上升序列试题 F 天干地支试题 G 皮亚诺曲线距离试题 H 蓝肽子序列试题 I: 画廊试题 J 答疑 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&a…

本地运行《使用AMD上的SentenceTransformers构建语义搜索》

Building semantic search with SentenceTransformers on AMD — ROCm Blogs 这篇博客解释了如何在Sentence Compression数据集上训练SentenceTransformers模型来执行语义搜索。使用BERT基础模型&#xff08;不区分大小写&#xff09;作为基础的变换器&#xff0c;并应用Huggi…

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小…

Spring AI项目Open AI绘画开发指导

Spring AI项目创建 Spring AI简介创建Spring AI项目配置项目pom和application文件controller接口开发运行测试 Spring AI简介 Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于 AI&#xff0c;并推广…

自作聪明的AI? —— 信息处理和传递误区

一、背景 在人与人的信息传递中有一个重要问题——由于传递人主观处理不当&#xff0c;导致信息失真或产生误导。在沟通交流中&#xff0c;确实存在“自作聪明”的现象&#xff0c;即传递人在转述或解释信息时&#xff0c;根据自己对信息的理解、经验以及个人意图进行了过多的…

SpringSecurity6实现动态权限,rememberMe、OAuth2.0授权登录,退出登录等功能

本文章对应视频可在B站查看SpringSecurity6对应视频教程&#xff0c;记得三连哦&#xff0c;这对我很重要呢&#xff01; 温馨提示&#xff1a;视频与文章相辅相成&#xff0c;结合学习效果更强哦&#xff01; 系列文章链接 1、初识SpringSecurity&#xff0c;认识主流Java权限…