温州网站建设模板下载免费,介绍网络营销,手机网站服务器,wordpress站点logo设置作品展示#xff1a;——4宫格 768套不重复模板#xff08;64页*12套题#xff09;
有错误#xff0c;实际数量小于768套 背景需求#xff1a;
测试4宫格数独基础模板有几种。 写个程序#xff0c;验算是不是真的是乘阶法的288种。
代码展示#xff1a; 768套4宫格题…作品展示——4宫格 768套不重复模板64页*12套题
有错误实际数量小于768套 背景需求
测试4宫格数独基础模板有几种。 写个程序验算是不是真的是乘阶法的288种。
代码展示 768套4宫格题目不重复每页12套64页
# 测试11*11格2*2一共4套3*3 宫格目的数独14 4宫格有758套不同的基础模板
作者阿夏
时间2024年01月03日 13:35import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,timeimport docx
from docx import Document
from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qnfrom docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor# 生成题库
import random
import math
from itertools import permutations# numint(input(生成几份\n))
# 制作单元格# 几宫格
hsall4
# int(input(3宫格数独3\n))
hshsall# kkint(input(空格数量输入5就是50%就是空一半\n))print(------第1步制作单元格-------)
ll[3,4,5,6,7,8,9] # 如果输入345
mm[43,43,32,32,32,32,32]# 3对应的套数是4*3套
nn[36,24,36,24,24,24,24]# 3对应的写入单元格的数字大小36磅
for r in range(len(ll)):if hsall int(ll[r]):# 底边几套.底边看有2份dbint(mm[r][0])# int(input(底边几套? 3\n))# 侧边几套 侧边看也是2份print(db ) cbint(mm[r][1])# int(input(侧边几套? 2\n))print(cb)sizeint(nn[r])print(size) # 写入单元格数字的大小撑满格子# 新建一个”装N份word和PDF“的临时文件夹
imagePath1rC:\Users\jg2yXRZ\OneDrive\桌面\数独\零时Word
if not os.path.exists(imagePath1): # 判断存放图片的文件夹是否存在os.makedirs(imagePath1) # 若图片文件夹不存在就创建# 计算不同模板中的单元格坐标放在bg里
# 棋盘格子数量# 如果正方形底边2*侧边2就是3*3宫格 2*24套底边边格子数量就是3*217侧边格子数量就是3*217
# 如果长方形底边3*侧边2就是3*3宫格3*26套 底边格子数量就是3*3211侧边格子数量就是3*217
# if dbcb:
db_size hs*dbdb-1
cb_size hs*cbcb-1
print({}宫格排列底{}侧{}共{}套,底边格子数{}.format(hs,db,cb,db*cb,db_size ))
print({}宫格排列底{}侧{}共{}套,侧边格子数{}.format(hs,db,cb,db*cb,cb_size ))# 确定每个宫格的左上角坐标 00 04 40 44
bgszm[]
for a in range(0,cb_size,hs1): # 0-11每隔4写一个坐标 侧边yfor b in range(0,db_size,hs1): # 0-11每隔4写一个坐标 侧边xbgszm.append({}{}.format(%02d%a,%02d%b))
print(bgszm)
# 3宫格排列底3侧2共6套,底边格子数11
# 3宫格排列底3侧2共6套,侧边格子数7
# [0000, 0004, 0008, 0400, 0404, 0408]# 转为元祖
start_coordinates [(int(s[0:2]), int(s[2:4])) for s in bgszm]
cell_coordinates []# 推算每个起始格子后面的单元格数字
for start_coord in start_coordinates:i, j start_coordsubgrid_coordinates []for x in range(hs):for y in range(hs):subgrid_coordinates.append((i x, j y))cell_coordinates.append(subgrid_coordinates)# 打印结果元祖样式
bg[]
for coordinates in cell_coordinates:# print(coordinates) # [(4, 8), (4, 9), (4, 10), (5, 8), (5, 9), (5, 10), (6, 8), (6, 9), (6, 10)]for c in coordinates:print(c) # 元组 (1, 2) 样式s .join(str(num).zfill(2) for num in c) # zfill将元组 (1, 2) 转换为字符串 0102 特别是5,10这种必须转成2个数字0510print(str(s)) # 12bg.append(s) # 0102
print(bg)print(------第2步制作3宫格的12套题的内容-------)# 制作3宫格的12套题目没有空格只有基础模板
lst[]
for b in range(1,hs1):lst.append(b)
print(lst)permutations_list list(permutations(lst))
numbers [list(permutation) for permutation in permutations_list]
# print(numbers)
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
# 6种组合# 互相组合成3组
import itertools# 计算排列数量并生成所有可能的排列
combinations2 list(itertools.permutations(numbers, hs))# 输出排列数量
# print(len(combinations2))
# 120# # 把所有数字都提取成元素
ll[]
for o1 in combinations2:for o2 in o1:for o3 in o2:ll.append(o3)
# print(ll)
# print(len(ll))
# 1080vhs*hs
# 16个数字抽取一组
f[]
for i in range(int(len(ll)/v)):f.append(ll[i*v:i*vv])
# print(f)
# print(len(f))
#120条# # # 遍历表格把0、5、10相同的内容删除,横向的数字1234都正确了现在只要排除竖向不对的P[]
zz[]
u[]
for k in f: if int(k[0])!int(k[4])!int(k[8])!int(k[12]) and int(k[0])int(k[4])int(k[8])int(k[12])10 and \int(k[1])!int(k[5])!int(k[9])!int(k[13]) and int(k[1])int(k[5])int(k[9])int(k[13])10 and \int(k[2])!int(k[6])!int(k[10])!int(k[14]) and int(k[2])int(k[6])int(k[10])int(k[14])10 and \int(k[3])!int(k[7])!int(k[11])!int(k[15]) and int(k[3])int(k[7])int(k[11])int(k[15])10 :zz.append(k)
print(z)
print(不重复题目数量{}.format(len(zz)))# 不重复题目数量768for hh in z:for ss in hh:u.append(ss)
# print(u)
print(所有元素长度{}.format(len(u)))
# 所有元素长度12288# 27个16元素在一页上
bbhs*hs*db*cb
print(bb)
# 4*4*4*3192. 64张
for kk in range(int(len(u)/int(bb))): # bb192kk0-64P.append(u[kk*bb:kk*bbbb])
print(P)
print(len(P))
# 12道题目print(------第3步写入docxword表格正好12格子写入1页12个-------)
# 这里
for z in range(len(P)):doc Document(rC:\Users\jg2yXRZ\OneDrive\桌面\数独\数独长方形({}宫格.docx.format(hs)) # table doc.tables[0] # 表0表2 写标题用的# 标题写入3、5单元格 for t in range(0,len(bg)): # 0-5是最下面一行用来写卡片数字ppint(bg[t][0:2]) # qqint(bg[t][2:4])kstr(P[z][t]) # 提取list图案列表里面每个图形 t索引数字print(pp,qq,k)# 图案符号的字体、大小参数runtable.cell(pp,qq).paragraphs[0].add_run(k) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name 黑体#输入时默认华文彩云字体# run.font.size Pt(46) #输入字体大小默认30号 换行一页一份大卡片run.font.size Pt(size) #是否加粗# run.font.color.rgb RGBColor(150,150,150) #数字小颜色深0-255run.font.color.rgb RGBColor(50,50,50) #数字小颜色深0-255run.boldTrue# paragraph.paragraph_format.line_spacing Pt(180) #数字段间距r run._elementr.rPr.rFonts.set(qn(w:eastAsia), 黑体)#将输入语句中的中文部分字体变为华文行楷table.cell(pp,qq).paragraphs[0].alignment WD_PARAGRAPH_ALIGNMENT.CENTER#居中 doc.save(rC:\Users\jg2yXRZ\OneDrive\桌面\数独\零时Word\{}.docx.format(%02d%(z1)))#保存为XX学号的电话号码word time.sleep(2)from docx2pdf import convert# docx 文件另存为PDF文件inputFile rC:/Users/jg2yXRZ/OneDrive/桌面/数独/零时Word/{}.docx.format(%02d%(z1))# 要转换的文件已存在outputFile rC:/Users/jg2yXRZ/OneDrive/桌面/数独/零时Word/{}.pdf.format(%02d%(z1)) # 要生成的文件不存在# 先创建 不存在的 文件f1 open(outputFile, w)f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)print(----------第4步把都有PDF合并为一个打印用PDF------------)# 多个PDF合并CSDN博主「红色小小螃蟹」https://blog.csdn.net/yangcunbiao/article/details/125248205
import os
from PyPDF2 import PdfMerger
target_path C:/Users/jg2yXRZ/OneDrive/桌面/数独/零时Word
pdf_lst [f for f in os.listdir(target_path) if f.endswith(.pdf)]
pdf_lst [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger PdfMerger()
for pdf in pdf_lst:print(pdf)file_merger.append(pdf)file_merger.write(C:/Users/jg2yXRZ/OneDrive/桌面/数独/打印合集05长方形数独宫格14.0 {}宫格基础模板共计{}套{}张.pdf .format(hs,zz,z1))file_merger.close()
# doc.Close()# # print(----------第5步删除临时文件夹------------)
import shutil
shutil.rmtree(C:/Users/jg2yXRZ/OneDrive/桌面/数独/零时Word) #递归删除文件夹即删除非空文件夹time.sleep(3) # 防止转换时报错预留生成时间 4宫格 程序生成了768套不重复的基础模板题目生成时间6分钟 数量太多人工无法计算验证 从以下浏览64份4宫格模型就可以发现到20页以后出现了错误题目一列两个3两个2 这套代码有错误实际数量小于768套因此需要进一步改进优化。