【教学类-56-03】数感训练——数字03(寻找自己的学号数字,15-20个)

2024-05-25 07:52

本文主要是介绍【教学类-56-03】数感训练——数字03(寻找自己的学号数字,15-20个),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景需求:

在实际操作中,孩子们把数字当做了自己的学好,这个提示老师可以给每位孩子做一份“学号数感训练

【教学类-56-02】数感训练——数字02(控制指定数字出现的数量)-CSDN博客文章浏览阅读341次,点赞7次,收藏6次。【教学类-56-02】数感训练——数字02(控制指定数字出现的数量)https://blog.csdn.net/reasonsummer/article/details/139127872

用AI反复写了很久的代码,终于实现了需求。

'''
数感训练-学号1-31,指定数字至少出现10次,学号数字,左上角有灰色的答案
AI对话大师,阿夏
2024年5月22日'''import random
import math
from PIL import Image, ImageDraw, ImageFont
from collections import Counter
import os# 指定数字至少出现几次15-20之间
cs = 15
cs2 = 20# 班级没有1号和7号(转学了)
# numbers = [i for i in range(1, 31) if i not in [1, 7]]
numbers = [i for i in range(1, 32) ]
print(numbers)path = r'C:\Users\jg2yXRZ\OneDrive\桌面\数字数感训练'input_folder=path+r'\jpg'
os.makedirs(input_folder,exist_ok=True)# 创建画布
canvas_width, canvas_height = 3000, 4000
canvas = Image.new('RGB', (canvas_width, canvas_height), (255, 255, 255))
draw = ImageDraw.Draw(canvas)# 绘制黑色方框
border_color = (0, 0, 0)
border_width = 10gray_color = (200, 200, 200)# 定义左上角数字方框的边界坐标
x1, y1, x2, y2 = 0, 0, 700, 700
draw.rectangle([(x1, y1), (x2, y2)], outline=border_color, width=border_width)# 定义学号数字方框的边界坐标
x1, y1, x2, y2 = 700, 0, 1000, 700
draw.rectangle([(x1, y1), (x2, y2)], outline=border_color, width=border_width)# 定义答案方框的边界坐标
x1, y1, x2, y2 = 700, 0, 1000, 350
draw.rectangle([(x1, y1), (x2, y2)], outline=border_color, width=border_width,)x1, y1, x2, y2 = 700, 350, 1000, 700
draw.rectangle([(x1, y1), (x2, y2)], outline=border_color, width=border_width,fill=gray_color)n = 10
nn = []
for i in numbers:while True:numbers_written = []  # 存储成功绘制的圆圈内的数字# 创建白色画布canvas_color = (255, 255, 255)canvas_inner = Image.new('RGB', (canvas_width, canvas_height), canvas_color)draw_inner = ImageDraw.Draw(canvas_inner)# 将黑色方框复制到白色画布中canvas_inner.paste(canvas, (0, 0))# 在左上角绘制数字text_color = (0, 0, 0)font_path = r"C:\Windows\Fonts\simhei.ttf"  # 黑体字体路径,请根据实际情况修改font_size = 500font = ImageFont.truetype(font_path, font_size)if len(str(i))==1:draw_inner.text((230, 100), f'{i}', font=font, fill=text_color)else:draw_inner.text((90, 100), f'{i}', font=font, fill=text_color)# 生成10磅黑线白色圆圈circle_radius = 50circle_border_color = (0, 0, 0)circle_fill_color = (255, 255, 255)border_width = 5circle_distance = 60 + circle_radius * 2  # 圆圈之间的距离bj = 30  # 圆形与边框的距离# 存储圆圈的位置信息,用于检查是否相交circle_positions = []# 阿拉伯数字字体设置number_font_size = 80number_font = ImageFont.truetype(font_path, number_font_size)circle_positions = []numbers_written = []for _ in range(5000):# 生成圆心位置x = random.randint(circle_radius + border_width + bj, canvas_width - circle_radius - border_width - bj)y = random.randint(circle_radius + border_width + bj, canvas_height - circle_radius - border_width - bj)# 排除左上角区域if x <= 1100 and y <= 800:continue# 检查与已有圆圈是否相交is_intersect = Falsefor position in circle_positions:distance = math.sqrt((x - position[0]) ** 2 + (y - position[1]) ** 2)if distance < circle_distance:is_intersect = Truebreakif not is_intersect:# 绘制外圆,边线粗细为10磅outer_circle_radius = circle_radius + border_widthouter_circle_bbox = (x - outer_circle_radius, y - outer_circle_radius, x + outer_circle_radius, y + outer_circle_radius)draw_inner.ellipse(outer_circle_bbox, outline=circle_border_color, width=border_width)# 绘制内圆,填充为白色inner_circle_radius = circle_radiusinner_circle_bbox = (x - inner_circle_radius, y - inner_circle_radius, x + inner_circle_radius, y + inner_circle_radius)draw_inner.ellipse(inner_circle_bbox, fill=circle_fill_color)# 在圆圈内绘制随机生成的阿拉伯数字number = random.choice(numbers)number_width, number_height = draw_inner.textsize(str(number), font=number_font)number_x = x - number_width // 2number_y = y - number_height // 2draw_inner.text((number_x, number_y), str(number), font=number_font, fill=(0, 0, 0))# 将圆圈位置添加至列表circle_positions.append((x, y))numbers_written.append(number)number_counts = Counter(numbers_written)count_10 = number_counts[i]print("实际生成的圆圈数量:", len(circle_positions))print("生成圆圈中的数字:", numbers_written)print("每种数字的数量:", number_counts)print(f"数字 {i} 的数量:", count_10)# 绘制数字 count_10# 在左上角绘制数字text_color = (0, 0, 0)font_path = r"C:\Windows\Fonts\simhei.ttf"  # 黑体字体路径,请根据实际情况修改font_size = 180font = ImageFont.truetype(font_path, font_size)if len(str(count_10))==1:draw_inner.text((800, 430), f'{count_10}', font=font, fill=text_color)else:draw_inner.text((760, 430), f'{count_10}', font=font, fill=text_color)if count_10 >= cs and count_10 <cs2:# 保存为1.pngimage_path = input_folder + fr'\{i:02d}.png'canvas_inner.save(image_path)n += 1breakelse:print(f"数字 {i} 的数量小于 {cs} 次,重新生成圆圈。")# 删除未保存的图片image_path = input_folder + fr'\{i:02d}.png'if os.path.exists(image_path):os.remove(image_path)continue# 合并
import os
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from PyPDF2 import PdfWriter, PdfFileMerger
from PIL import Image
import img2pdfdef convert_images_to_pdf(image_folder, output_path):pdf_merger = PdfFileMerger()for image_file in os.listdir(image_folder):if image_file.endswith('.jpg') or image_file.endswith('.png'):image_path = os.path.join(image_folder, image_file)pdf_path = os.path.splitext(image_path)[0] + '.pdf'# 使用reportlab库将图片转换为单个PDF文件c = canvas.Canvas(pdf_path, pagesize=letter)c.drawImage(image_path, 0, 0, width=letter[0], height=letter[1])c.save()# 使用img2pdf库将图片转换为单个PDF文件# with open(pdf_path, "wb") as pdf_file, open(image_path, "rb") as image_file:#     pdf_file.write(img2pdf.convert(image_file))# 将单个PDF文件添加到PDF合并器中pdf_merger.append(pdf_path)# 合并所有单个PDF文件为一个最终的PDF文件with open(output_path, 'wb') as output_file:pdf_merger.write(output_file)print(f"PDF文件已生成:{output_path}")# 使用示例
image_folder = input_folder  # 替换为你的图片文件夹路径
output_path = path + fr'\学号数感训练(数量大于{cs}).pdf'  # 替换为你的输出PDF文件路径convert_images_to_pdf(image_folder, output_path)

运行时间长,因为随机抽取数量,不可能马上出现15个。这一份生成了25分钟才获得。

合并打印

这篇关于【教学类-56-03】数感训练——数字03(寻找自己的学号数字,15-20个)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000910

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

寻找身高相近的小朋友

题目描述: 小明今年升学到小学一年级,来到新班级后发现其他小朋友们身高参差不齐,然后就想基于各小朋友和自己的身高差对他们进行排序,请帮他实现排序。 输入描述: 第一行为正整数H和N,0<H<200,为小明的身高,0<N<50,为新班级其他小朋友个数。第二行为N个正整数H1-HN,分别是其他小朋友的身高,取值范围0<Hi<200(1<=i<=N),且N个正整数各不相同。 输出描述: 输出

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个