如何用Python高效生成符合规则的化学复合材料组分表
生成符合规则的复合材料组分表的Python代码
规则回顾
- 表中数值为各原料在复合材料中的质量百分比
- 仅涉及原料A、B、C,最多使用两种原料制备复合材料
- 每个数值必须是
x的倍数,且每行数值总和≤y - 需列出所有符合上述规则的组合
Python实现代码
import itertools def generate_composite_table(x, y): # 生成单个原料的所有合法取值:0, x, 2x,...不超过y max_single_val = y // x valid_values = [i * x for i in range(max_single_val + 1)] composite_list = [] # 情况1:仅使用一种原料(包含全0组合) for val in valid_values: composite_list.append((val, 0, 0)) composite_list.append((0, val, 0)) composite_list.append((0, 0, val)) # 情况2:使用两种不同原料,且总和不超过y for a, b in itertools.combinations(valid_values, 2): if a + b <= y: composite_list.append((a, b, 0)) composite_list.append((a, 0, b)) composite_list.append((0, a, b)) # 去重(全0组合会被重复添加三次) composite_list = list(set(composite_list)) # 排序让输出更规整 composite_list.sort() # 打印表头 print(f"{'':<15} {'Material A':<12} {'Material B':<12} {'Material C':<12}") # 打印所有组合 for idx, comp in enumerate(composite_list, 1): print(f"Composite{idx:<6} {comp[0]:<12} {comp[1]:<12} {comp[2]:<12}") # 测试示例:x=1,y=2 generate_composite_table(1, 2)
代码说明
- 先计算单个原料的合法取值范围,步长为
x,最大值不超过y - 分两类生成组合:单原料(含全0)、双原料且总和符合要求
- 对组合去重并排序,避免重复条目且让输出更整齐
- 格式化打印出规范的组分表
修改函数参数x和y的数值,即可快速生成任意大小限制下的合规组分表,完全满足批量生成需求。
内容的提问来源于stack exchange,提问作者hiro
相关产品推荐
相关产品推荐

