ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-30 19:32:31  阅读:141  来源: 互联网

标签:02 word 07 04 phonestr str 电话号码 图形 phonedoc


思路:

第一种《破译电话号码》:手机号码和拆分后的号码(图案)都在同一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有