欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python正交表运用

程序员文章站 2024-03-22 16:48:28
...

1.首先制作一个简单的可视化界面,使用python自带库tkinter,代码如下

from tkinter.scrolledtext import ScrolledText
from tkinter import *
import tkinter as tk
import os


window = Tk()
window.title("正交表")  # title()  定义这个窗口的标题
window.geometry("700x600")  # geometry()  定义窗口的大小
Label(window, text="--输入数据--",font=("隶书", 14)).place(x=270, y=1)
scr = scrolledtext.ScrolledText(window, width=80, height=15, font=("隶书", 12))  # 滚动文本框(宽,高(这里的高应该是以行数为单位),字体样式)
scr.place(x=15, y=25)  # 滚动文本框在页面的位置
Label(window, text="--输出结果为--",font=("隶书", 14)).place(x=265, y=270)
scr1 = scrolledtext.ScrolledText(window, width=80, height=15, font=("隶书", 12))  # 滚动文本框(宽,高(这里的高应该是以行数为单位),字体样式)
scr1.place(x=15, y=300)  # 滚动文本框在页面的位置
button2 = Button(window, text="运 行",bg="green",font=("隶书", 20), command=yunxin)  #按键
button2.place(x=540, y=560, width=80, height=30)  #按键位置
button1 = Button(window, text="删 除",bg="red", font=("隶书", 20), command=cancelMsg)  #anjian
button1.place(x=40, y=560, width=80, height=30)  #按键位置
window.mainloop()

2.按键功能实现

def cancelMsg():          #删除功能
    scr.delete('0.0', END)
    scr1.delete('0.0', END)



def yunxin():      #运行
    dop = []       #保存最终数据
    doon = []      #保存正交表
    don = []       #输入数据处理
    counts = dict()   # 字典类型
    if scr.get('0.0', END) != "":      #判定是否为空
        di = scr.get('0.0', END).split("\n")      #进行行分割
        '''
        for jox in di:
            if jox!='':
                w_x=w_x+1
        '''
        #print(di)
        for i in di:       #进行列分割
          if i !="":
            d=i.split(":")
            dm=d[1].split(" ")
            don.append(dm)
            counts[len(dm)] = counts.get(len(dm), 0) + 1      #字典类型保存
        print(don)        #测试结果输出
        print(counts)     #测试结果输出
        print(len(counts))    #测试结果输出
        #print(counts.keys())
        fo = open("G:\\python\\zhen.txt", "r", encoding='UTF-8')     #打开正交表文件
        m = 0     #开关按钮
        for line in fo.readlines():       #按行输入
            if m==1 and line!="\n":
                doon.append(line.split("\n")[0])    #保存正交表
            if m == 1 and line == "\n":          #正交表存入完后跳出循环
                break
            if str(w_y)+"^"+str(w_x) in line  and "n="+str(w_y*w_y)  in line:
                m=1       #开关按钮
            if m==0:        #寻找合适正交表
              for no in counts.keys():
                #print(str(no)+'^'+str(counts[no]))
                if str(no)+'^'+str(counts[no]) in line:
                    print(str(no) + '^' + str(counts[no]))
                    m=1     #开关按钮
                else:
                    m=0     #开关按钮
                    break   #关闭内部for循环

        print(doon)   #测试结果输出
        for fo in doon:                        #将结果输出到输出框
            np=0
            dp=[]
            for jo in fo:
                dp.append(don[np][eval(jo)])
                np=np+1
            dop.append(dp)
        print(dop)
        scr1.delete('0.0', END)
        #scr1.insert(END, txtMsg1.get('0.0', END))
        for jj in dop:
            scr1.insert(END,jj)
            scr1.insert(END, "\n")

运行结果如下。
python正交表运用本人新手,如有bug,还望提醒,我好进一步改良代码,谢谢。

相关标签: 正交表 python