python项目:excel数据处理并打包

用一个新输入的点利用三个标准点对称出三个点,然后在所有点中找出离这对称出的三个点最近的一个点,用欧式距离

# -*- coding:utf-8 -*-
from openpyxl import Workbook, load_workbook
import math
#实例化
x=input("请输入坐标").split()
print(x)
list1=[[122,159,113],[31,92,153],[155,85,78]]
for i in range(2):
    for j in range(2):
        list1[i][j]=2*list1[i][j]-int(x[i])
print("三个对称点坐标为:")
print(list1)
wb=load_workbook("E:/color.xlsx")
#print(wb.sheetnames)
sheet=wb.get_sheet_by_name("0508")
#print(sheet["B5"].value)
#print(sheet["B"+x[0]].value)
list=[]
for row in sheet.iter_rows(min_row=2,max_row=87,min_col=4,max_col=6):
    k=0
    sum1, sum2, sum3 = 0, 0, 0
    for cell in row:
        x1=(list1[0][k]-cell.value)*(list1[0][k]-cell.value)
        x2 = (list1[1][k] - cell.value) * (list1[1][k] - cell.value)
        x3 = (list1[2][k] - cell.value) * (list1[2][k] - cell.value)
        sum1+=x1
        sum2+=x2
        sum3+=x3
        #print(cell.value,end=",")
    sum1=math.sqrt(sum1)
    sum2 = math.sqrt(sum2)
    sum3 = math.sqrt(sum3)
    list.append(sum1+sum2+sum3)
    #print()
print("各点距离列表为:")
print(list)
list2=list
lista=[]
for i in range(len(list2)):
    lista.append(i+1)
print(len(lista))
print(len(list2))
for i in range(len(list2)-1,0,-1):
    for j in range(i):
        if list2[j]>list2[i]:
            list2[j], list2[i] = list2[i], list2[j]
            lista[j], lista[i] = lista[i], lista[j]
print("排序后各点距离列表为:")
print(list2)
print("对应ID列表为:")
print(lista)
list3=[]
# for i in range(len(list2)-1):
#     for j in range(len(list)-1):
#         if list2[i]==list[j]:
#             list3.append(sheet["B"+str(i+2)].value)
for i in lista:
    list3.append(sheet["B" + str(i + 1)].value)
print("对应名字列表为:")
print(list3)
enda=input("点击退出")


知识点:# -- coding:utf-8 --必须要加,不然会报错
一个空间换时间上的优化
得在pycharm里的控制台用pyinstaller命令
要用pyinstaller打包数据文件得用绝对路径
excel操作直接看代码大概就能懂吧。。。
在这里插入图片描述
1.1修改了两个bug,range数给少了,k忘了累加1
根据业务需要改成三个分开算了:

# -*- coding:utf-8 -*-
from openpyxl import Workbook, load_workbook
import math
#实例化
x=input("请输入坐标").split()
print(x)
list1=[[122,159,113],[31,92,153],[155,85,78]]
for i in range(3):
    for j in range(3):
        list1[i][j]=2*list1[i][j]-int(x[i])
print("三个对称点坐标为:")
print(list1)
wb=load_workbook("E:/color.xlsx")
#print(wb.sheetnames)
sheet=wb.get_sheet_by_name("0508")
#print(sheet["B5"].value)
#print(sheet["B"+x[0]].value)
list=[]
# for row in sheet.iter_rows(min_row=2,max_row=87,min_col=4,max_col=6):
#     k=0
#     sum1, sum2, sum3 = 0, 0, 0
#     for cell in row:
#         x1=(list1[0][k]-cell.value)*(list1[0][k]-cell.value)
#         x2 = (list1[1][k] - cell.value) * (list1[1][k] - cell.value)
#         x3 = (list1[2][k] - cell.value) * (list1[2][k] - cell.value)
#         sum1+=x1
#         sum2+=x2
#         sum3+=x3
#         k=k+1
#         #print(cell.value,end=",")
#     sum1=math.sqrt(sum1)
#     sum2 = math.sqrt(sum2)
#     sum3 = math.sqrt(sum3)
#     list.append(sum1+sum2+sum3)
#     #print()
# print("各点距离列表为:")
# print(list)
listA,listB,listC=[],[],[]
for row in sheet.iter_rows(min_row=2,max_row=87,min_col=4,max_col=6):
    k=0
    sum=0
    for cell in row:
        x=(list1[0][k]-cell.value)*(list1[0][k]-cell.value)
        sum+=x
        k=k+1
        #print(cell.value,end=",")
    sum=math.sqrt(sum)
    listA.append(sum)
    #print()
print("离第一个标准对称点距离列表为:")
print(listA)
for row in sheet.iter_rows(min_row=2,max_row=87,min_col=4,max_col=6):
    k=0
    sum=0
    for cell in row:
        x=(list1[1][k]-cell.value)*(list1[1][k]-cell.value)
        sum+=x
        k=k+1
        #print(cell.value,end=",")
    sum=math.sqrt(sum)
    listB.append(sum)
print("离第二个标准对称点距离列表为:")
print(listB)
for row in sheet.iter_rows(min_row=2,max_row=87,min_col=4,max_col=6):
    k=0
    sum=0
    for cell in row:
        x=(list1[2][k]-cell.value)*(list1[2][k]-cell.value)
        sum+=x
        k=k+1
        #print(cell.value,end=",")
    sum=math.sqrt(sum)
    listC.append(sum)
print("离第三个标准对称点距离列表为:")
print(listC)
print()
# print("各点距离列表为:")
# print(list)

print("关于第一个对称点:")
listA2=listA
lista=[]
for i in range(len(listA2)):
    lista.append(i+1)
# print(len(lista))
# print(len(listA2))
for i in range(len(listA2)-1,0,-1):
    for j in range(i):
        if listA2[j]>listA2[i]:
            listA2[j], listA2[i] = listA2[i], listA2[j]
            lista[j], lista[i] = lista[i], lista[j]
print("排序后各点距离列表为:")
print(listA2)
print("对应ID列表为:")
print(lista)
listA3=[]
# for i in range(len(list2)-1):
#     for j in range(len(list)-1):
#         if list2[i]==list[j]:
#             list3.append(sheet["B"+str(i+2)].value)
for i in lista:
    listA3.append(sheet["B" + str(i + 1)].value)
print("对应名字列表为:")
print(listA3)

print()
print("关于第二个对称点:")
listB2=listB
listb=[]
for i in range(len(listB2)):
    listb.append(i+1)
# print(len(listb))
# print(len(listB2))
for i in range(len(listB2)-1,0,-1):
    for j in range(i):
        if listB2[j]>listB2[i]:
            listB2[j], listB2[i] = listB2[i], listB2[j]
            listb[j], listb[i] = listb[i], listb[j]
print("排序后各点距离列表为:")
print(listB2)
print("对应ID列表为:")
print(listb)
listB3=[]
# for i in range(len(list2)-1):
#     for j in range(len(list)-1):
#         if list2[i]==list[j]:
#             list3.append(sheet["B"+str(i+2)].value)
for i in listb:
    listB3.append(sheet["B" + str(i + 1)].value)
print("对应名字列表为:")
print(listB3)
print()

print("关于第三个对称点:")
listC2=listC
listc=[]
for i in range(len(listC2)):
    listc.append(i+1)
# print(len(listc))
# print(len(listC2))
for i in range(len(listC2)-1,0,-1):
    for j in range(i):
        if listC2[j]>listC2[i]:
            listC2[j], listC2[i] = listC2[i], listC2[j]
            listc[j], listc[i] = listc[i], listc[j]
print("排序后各点距离列表为:")
print(listC2)
print("对应ID列表为:")
print(listc)
listC3=[]
# for i in range(len(list2)-1):
#     for j in range(len(list)-1):
#         if list2[i]==list[j]:
#             list3.append(sheet["B"+str(i+2)].value)
for i in listc:
    listC3.append(sheet["B" + str(i + 1)].value)
print("对应名字列表为:")
print(listC3)
enda=input("点击退出")


在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值