Python+ tkinter实现小学整数乘法和除法竖式演算式

Python+ tkinter实现小学整数乘法和除法竖式演算式

整数的乘法与除法是小学数学中的重要内容,它们是数学运算中的基础部分。 本文将使用python 和Python 的标准 GUI(图形用户界面)包tkinter,实现整数乘法与除法的竖式演示。供有兴趣的读者测试完善。

一、小学整数乘法竖式演算式

界面上有两个整数输入框,单击“计算”按钮,显示小学生整数演示竖式,效果图:

源码如下:

import tkinter as tk
from tkinter import messagebox# 乘法计算函数
def multiply(factor1, factor2):lines = []  # 存储每一行的内容len1 = len(factor1)len2 = len(factor2)carry = 0  # 进位值product = 0  # 单个乘积# 添加第一行(第一个因数)lines.append(f"{factor1}\n")# 添加第二行(第二个因数)lines.append(f"x{factor2.rjust(len1)}\n")lines.append("-" * (len1 + len2) + "\n")  # 分隔线# 竖式计算for j in range(len2 - 1, -1, -1):line = ""carry = 0for i in range(len1 - 1, -1, -1):product = int(factor1[i]) * int(factor2[j]) + carrycarry = product // 10line = str(product % 10) + lineif carry > 0:line = str(carry) + linecarry = 0line += "0" * (len2 - 1 - j)  # 对齐lines.append(line.rjust(len1 + len2) + "\n")# 计算最终结果的长度final_result = str(int(factor1) * int(factor2))max_length = max(len(line.strip()) for line in lines)# 添加最终分隔线lines.append("-" * max_length + "\n")# 添加最终结果(右对齐)lines.append(final_result.rjust(max_length) + "\n")return "".join(lines)# GUI计算函数
def calculate():factor1 = entry_factor1.get()factor2 = entry_factor2.get()if not factor1 or not factor2:messagebox.showwarning("输入错误", "请输入两个因数!")returntry:result = multiply(factor1, factor2)result_text.delete(1.0, tk.END)  # 清空结果文本框result_text.insert(tk.END, result)  # 显示结果except ValueError:messagebox.showwarning("输入错误", "请输入有效的整数!")# GUI界面设置
root = tk.Tk()
root.title("整数乘法竖式演算式")
root.geometry("400x500")
root.configure(bg="#4682B4")# 容器框架
container = tk.Frame(root, bg="#4682B4")
container.pack(pady=20)# 标题
label_title = tk.Label(container, text="小学整数乘法竖式演算", font=("Courier New", 18), bg="#4682B4", fg="#dbc5c5")
label_title.pack()# 输入框(因数1)
entry_factor1 = tk.Entry(container, font=("Courier New", 18), width=20, justify="right", bd=0, bg="white")
entry_factor1.pack(pady=10)# 输入框(因数2)
entry_factor2 = tk.Entry(container, font=("Courier New", 18), width=20, justify="right", bd=0, bg="white")
entry_factor2.pack(pady=10)# “计算”按钮
button_calculate = tk.Button(container, text="计算", font=("Courier New", 18), bg="#98FB98", fg="#4682B4", bd=0,command=calculate)
button_calculate.pack(pady=10)# “结果”文本框
result_text = tk.Text(container, font=("Courier New", 14), width=30, height=15, bd=0, bg="white", fg="#4682B4")
result_text.pack(pady=10)# GUI主循环
root.mainloop()

二、小学整数除法竖式演算式

界面上有两个整数输入框每次单击“计算”按钮,要显示小学数学整数整除竖式效果。效果图:

源码如下:
 

import tkinter as tk
from tkinter import messageboxdef division_steps(dividend, divisor):steps = []dividend_str = str(dividend)dividend_len = len(dividend_str)temp_dividend = 0current_position = 0result_started = False  # 标记是否已经开始有效计算while current_position < dividend_len:temp_dividend = temp_dividend * 10 + int(dividend_str[current_position])current_position += 1# 如果当前部分不足以进行除法,则跳过该步骤if temp_dividend < divisor:continue# 标记已经开始有效计算result_started = Truequotient_digit = temp_dividend // divisorsubtrahend = divisor * quotient_digitremainder = temp_dividend - subtrahend# 计算缩进# 缩进 = 除数长度 + 3(用于“ ) ”) + 当前被除数部分的偏移量 - 1(对齐被除数的第一个有效数字)indent = len(str(divisor)) + 3 + (current_position - len(str(subtrahend)) - 1)# 特殊处理第一步:避免显示多余的被减数和减法内容if len(steps) == 0:  # 第一条竖式步骤step_str = f"{' ' * indent}-{subtrahend}\n"   # 减去的值step_str += f"{' ' * indent}{'-' * len(str(subtrahend))}\n"  # 减号线条else:  # 后续步骤正常缩进step_str = f"{' ' * (indent + 1)}{temp_dividend}\n"  # 当前部分被减数,此处需要 + 1step_str += f"{' ' * indent}-{subtrahend}\n"   # 减去的值step_str += f"{' ' * indent}{'-' * len(str(subtrahend))}\n"  # 减号线条steps.append(step_str)temp_dividend = remainderreturn steps, temp_dividend  # 返回步骤和最终的余数def calculate():result_text.delete(1.0, tk.END)  # 清空结果文本框dividend = dividend_entry.get()  # 获取被除数输入divisor = divisor_entry.get()    # 获取除数输入try:dividend = int(dividend)     # 将被除数转换为整数divisor = int(divisor)       # 将除数转换为整数if divisor == 0:raise ValueError("除数不能为零")  # 除数为零时抛出异常except ValueError:messagebox.showwarning("输入错误", "请输入有效的整数,且除数不能为零")  # 弹出警告对话框returnsteps, remainder = division_steps(dividend, divisor)  # 计算除法步骤和余数dividend_str = str(dividend)              # 被除数字符串divisor_str = str(divisor)                # 除数字符串quotient = dividend // divisor            # 计算商quotient_str = str(quotient)              # 商的字符串表示result_text.config(state=tk.NORMAL)  # 设置文本框为可编辑状态# 计算商的对齐位置# 商的第一位应该与被除数的第一个有效数字对齐# 除数长度 + 3(用于“ ) ”) + 被除数长度 - 商长度indent_quotient = len(divisor_str) + 3 + (len(dividend_str) - len(quotient_str))result_text.insert(tk.END, f"{' ' * indent_quotient}{quotient_str}\n")# 显示除数和被除数的格式化表示result_text.insert(tk.END, f"{divisor_str} ) {dividend_str}\n")# 显示除法步骤,格式化输出for step in steps:result_text.insert(tk.END, step)# 显示竖式的余数#result_text.insert(tk.END, f" {remainder}\n")# 计算余数的缩进,使其与商的末尾对齐# 余数的缩进 = 商的对齐缩进 + 商的长度 - 余数的长度indent_remainder = indent_quotient + len(quotient_str) - len(str(remainder))result_text.insert(tk.END, f"{' ' * indent_remainder}{remainder}\n")# 显示最终的商和余数result_text.insert(tk.END, f"商: {quotient}, 余数: {remainder}\n")#result_text.config(state=tk.DISABLED)  # 设置文本框为只读状态# 创建主窗口
root = tk.Tk()
root.title("整数除法竖式演算")
root.geometry("450x500")
root.configure(bg="#4682B4")  # 设置背景颜色# 创建框架,用于容纳其他控件
frame = tk.Frame(root, bg="#4682B4")
frame.pack(pady=20)# 被除数标签和输入框
dividend_label = tk.Label(frame, text="被除数:", bg="#4682B4", fg="white", font=("Courier", 14))
dividend_label.grid(row=0, column=0, padx=10, pady=5)
dividend_entry = tk.Entry(frame, width=15, justify="right", font=("Courier", 14))
dividend_entry.grid(row=0, column=1, padx=10, pady=5)# 除数标签和输入框
divisor_label = tk.Label(frame, text="除数:", bg="#4682B4", fg="white", font=("Courier", 14))
divisor_label.grid(row=1, column=0, padx=10, pady=5)
divisor_entry = tk.Entry(frame, width=15, justify="right", font=("Courier", 14))
divisor_entry.grid(row=1, column=1, padx=10, pady=5)# 计算按钮
calculate_button = tk.Button(frame, text="计算", command=calculate, bg="#98FB98", fg="#4682B4", font=("Courier", 14))
calculate_button.grid(row=2, column=0, columnspan=2, pady=10)# 结果文本框
result_text = tk.Text(frame, width=40, height=20, font=("Courier", 12), wrap=tk.NONE)
result_text.grid(row=4, column=0, columnspan=2)root.mainloop()  # 进入主事件循环

OK!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4657.html

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

相关文章

线程池遇到未处理的异常会崩溃吗?

线程池中的 execute 和 submit 方法详解 目录 引言execute 方法 使用示例代码 submit 方法 2.1 提交 Callable 任务2.2 提交 Runnable 任务 遇到未处理异常 3.1 execute 方法遇到未处理异常3.2 submit 方法遇到未处理异常 小结 引言 在多线程编程中&#xff0c;线程池是提高性…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作&#xff0c;包括CRUD&#xff08;增加、读取、更新、删除&#xff09;。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;product.kylinos.cn 开发者专区&#xff1a;developer.kylinos.cn 文档中心&#xff1a;document.kylinos.cn 交流论坛&#xff1a;forum.kylinos.cn 服务器环境以及配置 【内核版本…

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中&#xff0c;仿射变换&#xff08;Affine Transformation&#xff09;和透视变换&#xff08;Perspective Transformation&#xff09;是两种常用的图像几何变换方法。 变换方…

【LeetCode100】--- 寻找重复数

题目传送门 方法一&#xff1a;暴力解法&#xff08;超时&#xff09; 算法原理 双重循环&#xff0c;每次固定一个数&#xff0c;再遍历别的数。比较这两个数是否相等&#xff0c; 若相等则返回这个数。就是重复数。 复杂度分析 时间复杂度&#xff1a;O&#xff08;N方&…

RabbitMQ---TTL与死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL&#xff0c;当消息到达过期时间还没有被消费时就会自动删除 注&#xff1a;这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身&#xff0c;不是说队列过期时间…

mysql查看binlog日志

mysql 配置、查看binlog日志&#xff1a; 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启&#xff0c;修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin&#xff08;开启日志并指定日志前缀&#xff…

【QT】 控件 -- 按钮类(Button)

&#x1f525; 目录 1. 前言 2. Push Button 按钮 1、带有图标的按钮 -- 纯代码实现2、带有快捷键的按钮 -- 图形化&代码实现 3、按钮的重复触发 3. Radio Button 按钮 **1. click、press、release、toggled 的区别** **2. 单选框分组** 4. Check Box 复选 5. Tool Butto…

postman请求参数化

postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…

在 Babylon.js 中使用 Gizmo:交互式 3D 操作工具

在 3D 应用程序中&#xff0c;交互式操作对象&#xff08;如平移、旋转、缩放&#xff09;是一个常见的需求。Babylon.js 提供了一个强大的工具——Gizmo&#xff0c;用于在 3D 场景中实现这些功能。本文将介绍如何在 Babylon.js 中使用 Gizmo&#xff0c;并展示如何通过代码实…

虚幻商城 Fab 免费资产自动化入库

文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…

Ubuntu 22.04.5 修改IP

Ubuntu22.04.5使用的是netplan管理网络&#xff0c;因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改&#xff0c;需要权限&#xff0c;使用sudo vim或者其他编辑器&#xff0c;修改后的内容如下&#xff1a; # Let NetworkManager manage all devices on …

通过学习更多样化的生成数据进行更广泛的数据分发来改进实例分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 本次使用的英文整理的一些记录&#xff0c;练习一下为后续SCI发表论文打好基础 Improving Instance Segmentation by Learning Wider Data Distribution with More Diverse Generative Data Abstract In…

写作利器:如何用 PicGo + GitHub 图床提高创作效率

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…

通过Ukey或者OTP动态口令实现windows安全登录

通过 安当SLA&#xff08;System Login Agent&#xff09;实现Windows安全登录认证&#xff0c;是一种基于双因素认证&#xff08;2FA&#xff09;的解决方案&#xff0c;旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤&#xff1a; 1. 安当SLA的核心功能 安…

基于Python的多元医疗知识图谱构建与应用研究(上)

一、引言 1.1 研究背景与意义 在当今数智化时代,医疗数据呈爆发式增长,如何高效管理和利用这些数据,成为提升医疗服务质量的关键。传统医疗数据管理方式存在数据孤岛、信息整合困难等问题,难以满足现代医疗对精准诊断和个性化治疗的需求。知识图谱作为一种知识表示和管理…

疑难Tips:解决 SQL*Plus 中工具插入中文数据到Oracle数据库报错及乱码问题

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文地址&#xff1a;疑难Tips&#xff1a;解决 SQL*Plus 中工具插入中文数据到Oracle数据库报错及乱码问题在SQL*Plus执行插入语句中含有中文时&#xff0c;出现ORA-01756错误和乱码。这两个问题…

Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL

前言&#xff1a; 有许多开发的小伙伴&#xff0c;使用的是mac&#xff0c;那么在mac上如何安装&#xff0c;配置Mysql&#xff0c;以及使用Mysql了&#xff0c;今天来一个系统的教程。 安装Mysql 使用mysql前&#xff0c;我们需要先下载mysql&#xff0c;并按照以下几个步骤…

iOS中的设计模式(三)- 工厂方法

引言 几乎在每个用面向对象语言开发的应用程序中&#xff0c;都能见到工厂方法模式的身影。它是 抽象工厂模式 的核心组成部分。通过重载抽象工厂父类中定义的工厂方法&#xff0c;各种具体工厂能够创建属于自己的对象。 在工厂方法模式中&#xff0c;生产者 本身并不一定是抽…

VSCode最新离线插件拓展下载方式

之前在vscode商店有以下类似的download按钮&#xff0c;但是2025年更新之后这个按钮就不提供了&#xff0c;所以需要使用新的方式下载 ps:给自己的网站推广下~~&#xff08;国内直连GPT/Claude&#xff09; 新的下载方式1 首先打开vscode商店官网&#xff1a;vscode插件下载…