其他分享
首页 > 其他分享> > (教学类-07-02)20220122 破译电话号码-图形篇(图形随机重复)(大班主题《我要上小学》)

(教学类-07-02)20220122 破译电话号码-图形篇(图形随机重复)(大班主题《我要上小学》)

作者:互联网

思路:

第一种《破译电话号码》:手机号码和拆分后的号码(图案)都在同一个EXCEL里。这一份里手机号码拆分后的号码存在另一份表格里。并且选择图案不是按列固定选择(第一列固定用●,第二列固定用△),而是随机(第一列数字1,但用了不同的图形,)。

破解难题:

依旧感谢马先生优化了代码

一、基本材料准备

1.三个文件放在同一个文件夹下,

2.  EXCEL-1的样式-phoneNumber.xlsx

(这些号码是随机生成的=RANDBETWEEN(13200000000-13900000000)

 2.  EXCEL-2的样式-coderesult.xlsx

 3.word模板的样式-phonedoc.docx

(学号N,上排是爸爸手机号,共11位,下排是爸爸手机号,共11位

4.py 代码的内容

""" 
@author: 马清新
@file: 马清新 手机号码数字批量变图形.py
@time: 2022/1/27 8:30
"""
# -*- coding: utf-8 -*-
import openpyxl
import random

try:    #情况一先执行 
    wb = openpyxl.load_workbook(r'D:\test\04破译电话号码\04马先生_不同表_随机\phoneNumber.xlsx')
    # 打开原始文件,电话号码在第2列B列
    result = openpyxl.load_workbook(r'D:\test\04破译电话号码\04马先生_不同表_随机\coderesult.xlsx')
     # 结果保存在其他excelli 
    phone = wb.active
    # 提取原始文件WB的内容
    codeResult = result.active
    # 提取生成文件result的内容

    # 父亲电话号码
    symbol = ['▣','✽','✦', '♢', '▲', '●','♢', '✦','▣','✽','●']    #图形符号的列表
    # 生成的11位号码的样式
    for i in list(phone.columns)[1]:        #phone的B列为手机号码, 按012345排序为1 
        phonestr = str(i.value)#phone电话号码的字符串从i的值里提取
        print(phonestr)#打印 phonestr
        col = 1#在新表,第一个号码填在A列上
        for _ in phonestr[:]:            # 在phonestr里面取空值
            if i.value != 'dad':# 第一行的内容不要
                if int(_) !=0:# 如果不等于0 1-9
                    str_temp = int(_) * random.choice(symbol) #打印symbol里随机的图形
                else:#如果等于0
                    str_temp = '零'#如打印“'零'
                codeResult.cell(row = i.row ,column = col).value = str_temp#存储在codeResult的EXCEL里面
                col += 1                # 列数不断增加,直到11列用完
    # 母亲电话号码
    symbol = ['●']    #图形符号的列表
    # 生成的11位号码的样式
    for i in list(phone.columns)[2]:        #phone的C列为手机号码, 按012345排序为1 
        phonestr = str(i.value)#phone电话号码的字符串从i的值里提取
        print(phonestr)#打印 phonestr
        col = 12#在新表,第一个号码填在L列上
        for _ in phonestr[:]:            # 在phonestr里面取空值
            if i.value != 'mum':# 第一行的内容不要
                if int(_) !=0:# 如果不等于0 1-9
                    str_temp = int(_) * random.choice(symbol) #打印symbol里随机的图形
                else:#如果等于0
                    str_temp = '零'#如打印“'零'
                codeResult.cell(row = i.row ,column = col).value = str_temp#存储在codeResult的EXCEL里面
                col += 1                # 列数不断增加,直到11列用完
    result.save(r'D:\test\04破译电话号码\04马先生_不同表_随机\coderesult.xlsx')#存储在codeResult的EXCEL里面
    print('保存完毕...')
except Exception as e: #情况二先执行 
    print('执行错误,错误代码' , e)

    # 第二部分:把EXCEL表格里面的数字图形逐一填入word模板内,生成大班幼儿作业题
# 本段为阿夏参考CSDN上的代码修改而成,版权归原作者。

from docxtpl import DocxTemplate
import pandas as pd
import os
zpath=os.getcwd()+'\\'
zpath=r'D:\test\04破译电话号码\04马先生_不同表_随机'+'\\'

file_path=zpath+r'\电话号码单'

# 二、遍历excel,逐个生成word(form.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

tpl = DocxTemplate(zpath+'phonedoc.docx')
# 打开doc模板
phonedoc = pd.read_excel(zpath+'coderesult.xlsx')
# 压缩的EXCEL文档
N=phonedoc["N"] #N是学号
b1 = phonedoc["b1"]#根据word模板上的提示,把Excel的列字母与word列字母一一对应
b2 = phonedoc["b2"]  
b3 = phonedoc["b3"]
b4 = phonedoc["b4"]
b5 = phonedoc["b5"]
b6 = phonedoc["b6"]
b7 = phonedoc["b7"]
b8 = phonedoc["b8"]
b9 = phonedoc["b9"]
b10 = phonedoc["b10"]
b11 = phonedoc["b11"]#b1-b11是爸爸的手机号码 word第一行
c1 = phonedoc["c1"]
c2 = phonedoc["c2"] 
c3 = phonedoc["c3"]
c4 = phonedoc["c4"]
c5 = phonedoc["c5"]
c6 = phonedoc["c6"]
c7 = phonedoc["c7"]
c8 = phonedoc["c8"]
c9 = phonedoc["c9"]
c10 = phonedoc["c10"]
c11 = phonedoc["c11"]#c1-c11是妈妈的手机号码 word第二行
 # str.rstrip()用于去掉换行符

# 遍历excel行,逐个生成
num = phonedoc.shape[0]
for i in range(num):
    context = {
       "N": N[i],#N是学号
       "b1": b1[i],#b1-b11是爸爸的手机号码 word第一行
       "b2": b2[i],
       "b3": b3[i],
       "b4": b4[i],
       "b5": b5[i],
       "b6": b6[i],
       "b7": b7[i],
       "b8": b8[i],
       "b9": b9[i],
       "b10": b10[i],
       "b11": b11[i],
       "c1": c1[i],#c1-c11是妈妈的手机号码 word第二行
       "c2": c2[i],
       "c3": c3[i],
       "c4": c4[i],
       "c5": c5[i],
       "c6": c6[i],
       "c7": c7[i],
       "c8": c8[i],
       "c9": c9[i],
       "c10": c10[i],
       "c11": c11[i],
       #    "eng": eng[i] 原作者模板上的内容
    }
    tpl = DocxTemplate(zpath+'phonedoc.docx')#使用已有的模板
    tpl.render(context)
    tpl.save(file_path+r"\{} 的电话号码.docx".format(N[i]))#保存为XX学号的电话号码word

# 三、把word所在文件夹打包压缩,便于发送。
import zipfile
# 设定压缩后的压缩包地址和名称
zipName = zpath + '破译电话号码.zip'
z = zipfile.ZipFile(zipName,'w',zipfile.ZIP_DEFLATED)
for dirpath,dirnames,filenames in os.walk(file_path):
    for filename in filenames:
        print(filename)
        z.write(os.path.join(dirpath, filename),filename)
z.close()# 要记得close

# 附解压:
#将打包的文件解压
f = zipfile.ZipFile(zipName, 'r')
for file in f.namelist():
    f.extract(file)

二、运行结果

程序第一步生成:coderesult.xlsx

 程序第二步生成:   电话号码单

 

       万分感谢马先生的代码,让《破译电话号码》的“按图案点数”实现了三款教具选择。

一、同一图案(●)

二、不同图案(固定列出现,不重复)

三、不同图案(固定列随机出现图形,有重复)

下阶段还想试试直接根据答案,倒推2个数列示题。

    这是阿夏第8个实际运用到幼儿园教学中的Python自动化案例(教学类-07),希望能通过借鉴、实验、修改,将Python运用到幼儿园办公工作和幼儿教学中,提高工作效率,推动幼儿个性化学习和层次性学习成效。   

标签:02,word,07,04,phonestr,str,电话号码,图形,phonedoc
来源: https://blog.csdn.net/reasonsummer/article/details/122754890