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()
python随机生成和为定值的三个数字并写入到excel文件中
于 2024-01-09 15:40:56 首次发布
该篇文章介绍了如何使用Python中的numpy、math等库函数生成满足特定范围条件的随机数列表,对生成的数据进行处理并通过bubbleSort算法排序,最后将结果输出到Excel表格中。
摘要由CSDN通过智能技术生成