python随机生成和为定值的三个数字并写入到excel文件中

该篇文章介绍了如何使用Python中的numpy、math等库函数生成满足特定范围条件的随机数列表,对生成的数据进行处理并通过bubbleSort算法排序,最后将结果输出到Excel表格中。
摘要由CSDN通过智能技术生成
import numpy as np
import math
import random
import xlwings as xw
import tqdm
import time
import warnings
warnings.filterwarnings("ignore")
def func1(amount, num):
# amount:总和
# num:表示小数位数
# item:迭代次数
    while True:
        list1 = [];summ=0
        for j in range(2):
            a = round(random.uniform(0,amount),num)
            list1.append(a)
            summ += a
        b = amount - summ
        if b>0.0 and b<amount:
            list1.append(round(b,num))
            break
    return list1
def fun_randitem(amount,num,item):
    lst=[]
    for i in range(item):
        l=func1(amount,num)
        lst.append(l)
    return lst
# def func1(amount, n):
#     # amount:总和
#     # num:表示数字个数
#     # n:表示小数位数
#     listl = []
#     step = 10 ** (-n)
#     h = int(amount / step)
#     item = np.linspace(0, amount, h + 1)
#     for s in item:
#         for f in item:
#             for m in item:
#                 if s + f + m == amount:
#                     listl.append([s, f, m])
#     return listl

def func2(lst, inf, sup):
    # a表示符合要求
    lt=[]
    for a in lst:
        ca_si = ((a[0] * 0.34 + a[1] * 0.04) / 56) / ((a[0] * 0.345 + a[1] * 0.539 + a[2] * 0.468 + 22.41) / 60)
        si_al = ((a[0] * 0.345 + a[1] * 0.539 + a[2] * 0.468 + 22.41) / 60) / (
                (a[0] * 0.177 + a[1] * 0.311 + a[2] * 0.505) / 102)
        if ca_si >= inf[0] and ca_si <= sup[0] and si_al >= inf[1] and si_al <= sup[1]:
            a.append(round(ca_si,2))
            a.append(round(si_al,2))
            lt.append(a)
    return lt
def bubbleSort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n - i - 1):
            if arr[j][4] > arr[j + 1][4]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

def main():
    start = time.time()
    inf = [0, 2]  # 指定ca_si,si_al的最小值
    sup = [1.2, 4]  # ca_si,si_al的最大值
    step = [0.1, 0.1]  # 步长
    item=1000 #迭代次数
    amount = 450  # 总和
    num = 2  # 小数位数
    book = xw.Book()
    sheet = book.sheets('sheet1')
    sheet.range('A1').value = 'S'
    sheet.range('B1').value = 'F'
    sheet.range('C1').value = 'M'
    sheet.range('D1').value = 'Ca/Si'
    sheet.range('E1').value = 'Si/Al'
    list1 = func1(amount, num)
    list2=fun_randitem(amount,num,item)
    list3= func2(list2,inf,sup)
    bubbleSort(list3)
    length = len(list3)
    for i in range(length):
        record = list3[i]
        sheet.range(f'A{i + 2}').value = record[0]
        sheet.range(f'B{i + 2}').value = record[1]
        sheet.range(f'C{i + 2}').value = record[2]
        sheet.range(f'D{i + 2}').value = record[3]
        sheet.range(f'E{i + 2}').value = record[4]
    end = time.time()
    t = (end - start) / 100
    for i in tqdm.tqdm_notebook(range(100),desc='demo:'):
        time.sleep(t)
if __name__=='__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值