【教学类-64-08】20240629彩棒鱼骨图(五)AAB排列 6.5*1CM 6选2根 30种

news2024/10/6 8:21:41

  47cbbb7fb5e8468ca3bd7139e086c8c9.png

 

 

背景需求:

【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种-CSDN博客文章浏览阅读897次,点赞23次,收藏13次。【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种https://blog.csdn.net/reasonsummer/article/details/139813897?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139813897%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/139813897?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139813897%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/139813897?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139813897%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/139813897?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139813897%22%2C%22source%22%3A%22reasonsummer%22%7D

【教学类-64-05】20240625彩棒鱼骨图(二)AB排列 6.5*1CM 6选2根 30种-CSDN博客文章浏览阅读669次,点赞12次,收藏8次。【教学类-64-05】20240625彩棒鱼骨图(二)AB排列 6.5*1CM 6选2根 30种https://blog.csdn.net/reasonsummer/article/details/139998667?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139998667%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/139998667?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139998667%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/139998667?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139998667%22%2C%22source%22%3A%22reasonsummer%22%7D

 

【教学类-64-06】20240625彩棒鱼骨图(三)ABC排列 6.5*1CM 6选2根 120种-CSDN博客文章浏览阅读454次,点赞13次,收藏6次。【教学类-64-06】20240625彩棒鱼骨图(三)ABC排列 6.5*1CM 6选2根 120种https://blog.csdn.net/reasonsummer/article/details/140021632?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140021632%22%2C%22source%22%3A%22reasonsummer%22%7Dhttps://blog.csdn.net/reasonsummer/article/details/140021632?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140021632%22%2C%22source%22%3A%22reasonsummer%22%7D【教学类-64-07】20240625彩棒鱼骨图(四)ABB排列 6.5*1CM 6选2根 30种-CSDN博客文章浏览阅读732次,点赞29次,收藏11次。【教学类-64-07】20240625彩棒鱼骨图(四)ABB排列 6.5*1CM 6选2根 30种https://blog.csdn.net/reasonsummer/article/details/140022754?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140022754%22%2C%22source%22%3A%22reasonsummer%22%7D

前期制作了6根彩色冰棍棒的不重复排列720种。

ABAB的排序方式30种

ABCABC排序方式120种。

ABBABB排序30种

再做AABAAB

也就是从6种颜色中任意选择2个颜色,第1个颜色*2,将AAB样式*2,测算发现6选2一共有30种不重复的排列。

 

与AB相同,但是B需要多一个,所以就AB*2,删除第3个数字,然后将ABB*2,一共只有6个鱼骨位置,就(AA+B)*2次

 

7191e79e39ab4000a76a4e0bb9c35e82.png

代码展示

'''
冰棍棒六色720种 鱼骨图 红橙黄绿蓝紫 AAB排序系列6抽3不重复30种 短款)6.5*1(长款) 11.5*1 大号(15*1.8) -乱序
时间:2024年6月26日
作者:星火讯飞 阿夏

'''
from PIL import Image, ImageDraw
import os,random
from PIL import ImageFont

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\鱼骨图'
new_path=path+r'\01jpg(6.5乘1)'
os.makedirs(new_path,exist_ok=True)

# nnn=int(input('1.固定、2、随机'))

name='6.5乘1'

print('-----1、制作图卡--------')
# 六色所有排序方式 720种
import itertools
colors = ['01red', '02orange', '03yellow', '04green', '05blue', '06purple']
# 使用itertools.permutations生成所有不重复排序方式
combinations = list(itertools.permutations(colors,2))
result = sorted(combinations)

print(result)
print(len(result))# 30种
# '01red', '02orange',

# ()元祖里的内容乘以3
new_perms = [t * 2 for t in result]
print(new_perms)
print(len(new_perms))
# ('01red', '02orange','01red', '02orange',)

news_perms = [(t[0], t[2],t[3]) for t in new_perms]
print(news_perms)
print(len(news_perms))
# ('01red', '02orange','02orange',)

perms = [t * 2 for t in news_perms]
print(perms)
print(len(perms))
# [('01red', '02orange', '02orange', '01red', '02orange', '02orange'),



# 打乱
random.shuffle(perms)
print(perms)
print(len(perms))
# 720个不重复的方法
# 720有几位数(个数)

num_digits = len(str(len(perms)))
# 120
print(num_digits)
# 720就是3位数

for a in range(len(perms)):
        # 打开图片
    image = Image.open(path+r'\鱼骨图.jpg')
    # 创建一个800*600的画布
    long=844
    wide=378
    s=6
    # 6根棒子

    canvas = Image.new('RGB', (long, wide), 'white')
    draw = ImageDraw.Draw(canvas)

    # 定义圆角矩形的参数

    # 棒子的圆心
    radius = 20
    # 左侧间距
    left = 220
    #  右侧间距
    right = 180
    # 棒子的间距
    padding = 30
    # 棒子的宽
    rect_width = float((long-left-right-padding*7)/6)
    print(rect_width)
    # 40
    # 棒子的高
    rect_height = float(rect_width*6.5)

    # 棒子的高度坐标
    padding2=float((wide- rect_height-20))
    # wide-padding*2



    # 计算每个圆角矩形的位置
    rect_positions = [
        (padding+left, padding2),
        (rect_width + padding * 2+left, padding2),
        (rect_width * 2 + padding * 3+left, padding2),
        (rect_width * 3 + padding * 4+left, padding2),
        (rect_width * 4 + padding * 5+left, padding2),
        (rect_width * 5 + padding * 6+left, padding2)
    ]


    colors = perms[a]  
    #  绘制圆角矩形
    draw = ImageDraw.Draw(image)

    # 绘制圆角矩形
    for i, position in enumerate(rect_positions):
        x, y = position
        draw.rounded_rectangle([x, y, x + rect_width, y + rect_height], radius, fill=colors[i][2:], outline='black', width=1)
    
    # 设置字体路径和大小
    font_path = r'C:\Windows\Fonts\AdobeHeitiStd-Regular.otf'
    font_size = 40

    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    # 在指定位置绘制文字
    draw.text((200, 30), f'彩色鱼骨图AAB({name}CM)-{a+1:03d}', font=font, fill='black')
    
    # 保存图片
    image.save(new_path + fr'\{a+1:0{num_digits}d}.png')

print('-----2、制作大图--------')
# 六色所有排序方式 720种

# 使用itertools.permutations生成所有不重复排序方式


from PIL import Image, ImageDraw
import itertools

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\鱼骨图'
new_path_jpg = path + r'\02jpg(6.5乘1)'
os.makedirs(new_path_jpg, exist_ok=True)

name = '6.5乘1'

for b in range(2):
    image = Image.open(path + r'\鱼骨图.jpg')
    long = 844
    wide = 378
    s = 6
    canvas = Image.new('RGB', (long, wide), 'white')
    draw = ImageDraw.Draw(canvas)

    radius = 20
    left = 220
    right = 180
    padding = 30
    rect_width = float((long - left - right - padding * 7) / 6)
    print(rect_width)
    rect_height = float(rect_width * 6.5)
    padding2 = float((wide - rect_height - 20))

    rect_positions = [
        (padding + left, padding2),
        (rect_width + padding * 2 + left, padding2),
        (rect_width * 2 + padding * 3 + left, padding2),
        (rect_width * 3 + padding * 4 + left, padding2),
        (rect_width * 4 + padding * 5 + left, padding2),
        (rect_width * 5 + padding * 6 + left, padding2)
    ]

    colors = perms[a]
    draw = ImageDraw.Draw(image)

    # 绘制圆角矩形
    for i, position in enumerate(rect_positions):
        x, y = position
        draw.rounded_rectangle([x, y, x + rect_width, y + rect_height], radius, fill='white', outline='black', width=1)

    # 设置字体路径和大小
    font_path = r'C:\Windows\Fonts\AdobeHeitiStd-Regular.otf'
    font_size = 40

    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    # 在指定位置绘制文字
    draw.text((150, 30), f'彩色鱼骨图AAB({name}CM)-操作图{b+1}', font=font, fill='black')

    # 保存图片    
    image.save(new_path_jpg + fr'\鱼骨图{name}_大图{b+1}.png')


print('-----3、图卡制作成图片格式----------')

import os
import random
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfFileMerger


new_folder = path + r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

image_files = [os.path.join(new_path, file) for file in os.listdir(new_path) if file.endswith('.png')]
# random.shuffle(image_files)

grouped_files = [image_files[i:i + 6] for i in range(0, len(image_files), 6)]

for group_index, group in enumerate(grouped_files):
    doc = Document(path + r'\鱼骨图题卡.docx')
    table = doc.tables[0]

    for cell_index, image_file in enumerate(group):
        cell = table.cell(int(cell_index / 2), cell_index % 2)
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(image_file, width=Cm(13.92), height=Cm(6.49))

    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))

# pdf_output_path = path + fr'\\鱼骨图AAB({name})题卡{len(perms)}张_固定顺序.pdf'
pdf_output_path = path + fr'\\鱼骨图AAB({name})题卡{len(perms)}张_随机顺序.pdf'

for docx_file in os.listdir(new_folder):
    if docx_file.endswith('.docx'):
        docx_path = os.path.join(new_folder, docx_file)
        convert(docx_path, docx_path.replace('.docx', '.pdf'))

merger = PdfFileMerger()
for pdf_file in os.listdir(new_folder):
    if pdf_file.endswith('.pdf'):
        pdf_path = os.path.join(new_folder, pdf_file)
        merger.append(pdf_path)

merger.write(pdf_output_path)
merger.close()

import shutil,time
shutil.rmtree(new_folder)


print('-----4、图卡制作成操作图格式----------')

import os
import random
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfFileMerger


new_folder = path + r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

image_files = [os.path.join(new_path_jpg, file) for file in os.listdir(new_path_jpg) if file.endswith('.png')]
# random.shuffle(image_files)

grouped_files = [image_files[i:i + 2] for i in range(0, len(image_files), 2)]

for group_index, group in enumerate(grouped_files):
    doc = Document(path + r'\鱼骨图操作图.docx')
    table = doc.tables[0]

    for cell_index, image_file in enumerate(group):
        cell = table.cell(int(cell_index / 1), cell_index % 1)
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(image_file, width=Cm(21.62), height=Cm(9.7))

    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))

# pdf_output_path = path + fr'\\鱼骨图AAB({name})操作卡2张_固定顺序.pdf'
pdf_output_path = path + fr'\\鱼骨图AAB({name})操作卡2张_随机顺序2.pdf'

for docx_file in os.listdir(new_folder):
    if docx_file.endswith('.docx'):
        docx_path = os.path.join(new_folder, docx_file)
        convert(docx_path, docx_path.replace('.docx', '.pdf'))

merger = PdfFileMerger()
for pdf_file in os.listdir(new_folder):
    if pdf_file.endswith('.pdf'):
        pdf_path = os.path.join(new_folder, pdf_file)
        merger.append(pdf_path)

merger.write(pdf_output_path)
merger.close()
time.sleep(5)

import shutil
shutil.rmtree(new_folder)
shutil.rmtree(new_path)
shutil.rmtree(new_path_jpg)

 

 

一共有两种抽取方式

第一种是固定抽取,从"红"开始选择

我默认“红橙黄绿蓝紫”为固定顺序,这里的颜色前面加了01、02,因为如果按照字母,blue排在最前面,而不是red,就会出现乱序。

8cf8c792e83f4ee68d63efc3464931af.png

742786ed4dfa4677b613ead7678cee96.png

第一根棒子都是“红色”,依次配对“橙黄绿蓝紫”

8299bf2d317140718e80ffe2afd1a0e8.png

 

最后一根棒子都是“紫色”,依次配对“红橙黄绿蓝”

fab865ca62fc4ee78c6b7d0c75566342.png

 

操作图

566557ea3aec411b9d7aefbf2a0a0a18.png

 

 第二种是随机抽取,打乱顺序,每次出现顺序都不同

0432717991924ed79c98f248f0536a08.png

我默认“红橙黄绿蓝紫”为固定顺序,这里的颜色前面加了01、02,因为如果按照字母,blue排在最前面,而不是red,就会出现乱序。

d8d8c2dbb5b34689b08219e6e3f232fc.png

 

 

第1次随机 001-006

c28c637e49af4e7586d633ebb258bf36.png

第2次随机 001-006

59893d39a7934f8fa1f963f212efb724.png

 

操作图

566557ea3aec411b9d7aefbf2a0a0a18.png

 

 

因为一共是6根棒子

有ABCDEF(1*6)、ABABAB(2*3)、ABCABC(3*2)、ABBABB((1+2)*2)、AABAAB ((2+1)*2)五种排序方式

 

 

 

 

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

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

相关文章

Java学习 - Redis开发规范与安全

开发规范 key设计 因素说明键名可读性,可管理性业务名:表名:字段名键名简洁性user:{uid}:friends:message:{mid}简化为u:{uid}🇫🇷m:{mid}与embstr和raw有关键名不包含特殊字符比如空格,制表符等,最好只有字母&#…

【Lua】第三篇:基本变量类型介绍

文章目录 一. 变量类型介绍二. 基本知识三. 基本类型介绍1. 空类型(nil)2. 数值类型(number)3. 字符串类型(string)4. 布尔类型(boolean) 一. 变量类型介绍 Lua中一共有如下8中变量…

Linux:RAID磁盘阵列

目录 一、RAID(磁盘阵列) 1.1、概念 1.2、RAID 0(条带化存储) 1.3、RAID 1(镜像存储) 1.4、RAID 5 1.5、RAID 6 1.6、RAID 10 (先做镜像,再做条带) 二、创建RAID 2.1、建立RAID 0 …

利用 Docker 简化 Nacos 部署:快速搭建 Nacos 服务

利用 Docker 简化 Nacos 部署:快速搭建 Nacos 服务 引言 在微服务架构中,服务注册与发现是确保服务间通信顺畅的关键组件。Nacos(Dynamic Naming and Configuration Service)作为阿里巴巴开源的一个服务发现和配置管理平台&…

Spring事务及其传播机制(一)

目录 1.事务回顾 1.1什么是事务 1.2事务的四大重要特性(ACID) 1.3事务的操作 2.Spring中事务的实现 2.1编程式事务(了解) 2.2声明式事务Transactional 3.Transactional作用 3.1重新抛出异常 3.2手动回滚事务 1.事务回顾…

【Redis】SpringBoot连接Redis

1. 创建项目并配置文件 勾选NoSQL中的 Spring Data Redis。当然,把 Web 中的 SpringWeb 也勾选一下.方便写接口进行后续测试。 在 application.yml 中配置 2. 不同数据类型使用Demo 在SpringBoot中,为我们提供了StringRedisTemplate类,供我们处理一些文…

详细介绍MySQL的索引(上)

索引 索引概述 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结…

VisualStudio2019受支持的.NET Core

1.VS Studio2019受支持的.NET Core? 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com) Visual Studio 2019 默认并不直接支持 .NET 6 及以上版本。要使用 .NET 6 或更高版本,你需要在 Visual Studio 2019 中采取额外步骤,比如安装相应…

<电力行业> - 《第9课:输电(二)》

4 输送电能流程 输送电能总共有:发电站→升压变压器→高压输电线→降压变压器→用电单位等五个流程。 电力工业初期,发电厂建在电力用户附近,直接向用户送电,所以那个时候只有发电和用电两个环节。 随着电力生产规模和负荷中心规…

QTreeView第一列自适应

通过setStretchLastSection(bool stretch)可以设置最后一列自适应,对于QTreeView,stretch默认为true。但有时候我们需要设置第一列自适应,比如文件浏览器,共有名称、大小和修改日期三列,大小和日期的宽度几乎是固定的,但名称却可长可短,此时我们希望在窗口大小变化时,第…

一元线性回归-R语言

# # 安装包 # install.packages(ggplot2) # library(ggplot2) Sys.setlocale(category LC_ALL, locale English_United States.1252) # Sys.setlocale("LC_ALL","Chinese") x <- c(18, 20, 22, 24, 26, 28, 30) y <- c(26.86, 28.35, 28.87,28.75,…

【源码+文档+调试讲解】actual self 服装店的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统服装销售信息管理难度大&#xff0c;容错率低&#xff0c…

封装了一个iOS滚动厨窗效果

效果图 背景 我们要实现如图的厨窗效果&#xff0c;不能通过在tableView底部添加一个背景图片的方式&#xff0c;因为这需要修改整个tableView的背景色为透明&#xff0c;影响到的范围太大&#xff0c;只能将这个效果局限在这个cell 中&#xff0c;然后通过监听tableView的滚动…

Python应用开发——30天学习Streamlit Python包进行APP的构建(12)

st.checkbox 显示复选框部件。 Function signature[source] st.checkbox(label, valueFalse, keyNone, helpNone, on_changeNone, argsNone, kwargsNone, *, disabledFalse, label_visibility"visible") Returns (bool) Whether or not the checkbox is checked. …

认识100种电路之放大电路

在电子技术的广袤世界中&#xff0c;放大电路犹如一颗璀璨的明珠&#xff0c;发挥着至关重要的作用。那么&#xff0c;为什么电路需要放大&#xff1f;放大的原理又是什么&#xff1f;实现放大又需要用到哪些元器件以及数量如何呢&#xff1f;接着往下看&#xff0c;会解开你的…

leetCode.93. 复原 IP 地址

leetCode.93. 复原 IP 地址 题目思路&#xff1a; 代码 // 前导零的判断方法&#xff1a;如果第一个数是0&#xff0c;且第二个数还有数据&#xff0c;那就是前导0&#xff0c;要排除的 // 注意跟单个 0 区分开 class Solution { public:vector<string> res;vector<…

redis实战-缓存雪崩问题及解决方案

定义理解 缓存雪崩是指在同一时间段&#xff0c;大量缓存的key同时失效&#xff0c;或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力 和缓存击穿的区别&#xff1a; 缓存雪崩是由于缓存中的大量数据同时失效或缓存服务器故障引起的&#xff1b…

ESP32-C3模组上跑通MQTT(6)—— tcp例程(1)

接前一篇文章:ESP32-C3模组上跑通MQTT(5) 《ESP32-C3 物联网工程开发实战》 一分钟了解MQTT协议 ESP32 MQTT API指南-CSDN博客 ESP-IDF MQTT 示例入门_mqtt outbox-CSDN博客 ESP32用自签CA进行MQTT的TLS双向认证通信_esp32 mqtt ssl-CSDN博客 特此致谢! 本回开始正式讲…

python进阶函数

目录 函数多返回值函数多种传参方式匿名函数 函数多返回值 问&#xff1a;如果一个函数如些两个return&#xff08;如下所示&#xff09;&#xff0c;程序如何执行&#xff1f; def return_num():return 1return 2result return_num() print(result)答&#xff1a;只执行了第…

玩游戏就能学习亚马逊云科技AWS技术并通过热门技术认证考试??

亚马逊AWS限时活动&#xff0c;玩免费游戏Cloud Quest Practitioner送AWS云从业证书考试25%折扣券(价值171元)&#xff0c;玩游戏的同时还能学知识一举两得。Cloud Quest是AWS出的一款3D角色扮演游戏/虚拟城市建造形式的实验课程(游戏画面有点像天际线)&#xff0c;大家通过完成…