我想創建一個有500個或更多值對的串列,其結果如下,并有一些界限,但我在正確的語法上卡了很多。
結果應該是這樣的:
SiO2 = 35, Al2O3 = 12, CaO = 41, MgO = 12, T = 1498.
SiO2 = 38, Al2O3 = 7, CaO = 46, MgO = 9, T = 1512。
...
以此類推。
到目前為止,我得到了以下的代碼片段:
from random import randint
CaO = randint(34, 40)
SiO2= randint(30, 40)
MgO = randint(5, 15)
Al2O3 = randint(5, 15)
T = randint(1400, 1550)
liste = []
for i in range(1000)。
if not CaO SiO2 MgO Al2O3 == 100:
繼續。
elif CaO / SiO2 > 1.3 & CaO / SiO2 < 0.85:
繼續。
elif (CaO MgO) / (SiO2 Al2O3) < 0.84 & (CaO MgO)/(SiO2 Al2O3) > 1.25:
繼續。
else:
liste.append(CaO, SiO2, MgO, Al2O3, T)
print(liste)
如果有人能給我一些提示,那就太好了。
歡呼吧
uj5u.com熱心網友回復:
你可以預先計算出滿足你的條件的有效的4元組,從中進行選擇,然后再加上無約束的第5個組件,而不是采用打或不打的方法,因為97%的時間都打不中。
像這樣:
from random import randint,choice
from itertools import product
def valid(p)。
CaO, SiO2, MgO, Al2O3 = p
條件 = (CaO SiO2 MgO Al2O3 == 100,
CaO / SiO2 <= 1.3 或 CaO / SiO2 >= 0.85,
(CaO MgO) / (SiO2 Al2O3) >=0.84 or (CaO MgO) / (SiO2 Al2O3) <=1.25)
return all(條件
valids = [p for p in product(range(34, 41),range(30, 41),range(5, 16),range(5,16) if valid(p)]
liste = [choice(valids) (randint(1400, 1550) 。 ) for _ in range(1000)]
print(liste[:5])
典型的輸出:
[(36, 35, 14, 15, 1485)。) (40,34,14,12。1447),(39,39。11, 11, 1401)。) (39,34,15,12。1510),(40,32。14, 14, 1462)]
uj5u.com熱心網友回復:
其實并不清楚你想做什么,但我覺得下面的代碼片段結果已經很接近了。不過你需要仔細檢查一下這些條件。
from random import randint
from pprint import pprint
對 = []
標簽 = ('Ca0'/span>, 'SiO2'/span>, 'MgO'/span>, 'Al2O3'/span>, 'T'/span>)
for _ in range(1000)。
CaO = randint(34, 40)
SiO2 = randint(30, 40)
MgO = randint(5, 15)
Al2O3 = randint(5, 15)
T = randint(1400, 1550)
if all( )
CaO SiO2 MgO Al2O3 == 100,
0.85 <= CaO / SiO2 <=1.3。
0.84 <= (CaO MgO) / (SiO2 Al2O3) <= 1.25)。)
pairs.append(dict(
zip(labels, (CaO, SiO2, MgO, Al2O3, T)
))
pprint(pair)
而且它將列印出這樣的東西:
[{'Al2O3': 9, 'Ca0': 39, 'MgO': 15, 'SiO2': 37, 'T': 1498}。
{'Al2O3': 10, 'Ca0': 39, 'MgO': 13, 'SiO2': 38, 'T'/span>: 1426}。
{'Al2O3': 15, 'Ca0': 37, 'MgO': 10, 'SiO2': 38, 'T': 1449}。
{'Al2O3': 12, 'Ca0': 39, 'MgO': 10, 'SiO2': 39, 'T': 1500}。
{'Al2O3': 10, 'Ca0': 39, 'MgO': 15, 'SiO2': 36, 'T': 1473}。
{'Al2O3': 15, 'Ca0': 37, 'MgO': 11, 'SiO2': 37, 'T': 1534}。
{'Al2O3': 14, 'Ca0': 39, 'MgO': 13, 'SiO2': 34, 'T': 1475}。
{'Al2O3': 11, 'Ca0': 36, 'MgO': 15, 'SiO2': 38, 'T': 1412}。
{'Al2O3': 14, 'Ca0': 37, 'MgO': 10, 'SiO2': 39, 'T': 1425}。
{'Al2O3': 12, 'Ca0': 40, 'MgO'/span>: 9, 'SiO2': 39, 'T': 1471}。
{'Al2O3': 14, 'Ca0': 35, 'MgO': 14, 'SiO2': 37, 'T': 1486}。
{'Al2O3': 14, 'Ca0': 35, 'MgO': 12, 'SiO2': 39, 'T': 1466}。
{'Al2O3': 15, 'Ca0': 38, 'MgO': 8, 'SiO2': 39, 'T': 1478}。
{'Al2O3': 11, 'Ca0': 38, 'MgO': 12, 'SiO2': 39, 'T': 1532}。
{'Al2O3': 11, 'Ca0': 39, 'MgO': 14, 'SiO2': 36, 'T': 1425}。
{'Al2O3': 9, 'Ca0': 40, 'MgO': 14, 'SiO2': 37, 'T': 1511}。
{'Al2O3': 13, 'Ca0': 34, 'MgO': 15, 'SiO2': 38, 'T'/span>: 1509}。
{'Al2O3': 12, 'Ca0': 38, 'MgO': 10, 'SiO2': 40, 'T': 1444}。
{'Al2O3': 11, 'Ca0': 36, 'MgO': 15, 'SiO2': 38, 'T'/span>: 1419}。
{'Al2O3': 15, 'Ca0': 38, 'MgO': 8, 'SiO2': 39, 'T': 1546}。
{'Al2O3': 14, 'Ca0': 40, 'MgO'/span>: 6, 'SiO2': 40, 'T': 1461}。
{'Al2O3': 12, 'Ca0': 40, 'MgO'/span>: 10, 'SiO2': 38, 'T': 1445}。
{'Al2O3': 12, 'Ca0': 39, 'MgO': 9, 'SiO2': 40, 'T'/span>: 1492}。
{'Al2O3': 12, 'Ca0': 38, 'MgO': 10, 'SiO2': 40, 'T': 1530}。
{'Al2O3': 15, 'Ca0': 36, 'MgO': 14, 'SiO2': 35, 'T': 1500}。
{'Al2O3': 8, 'Ca0': 38, 'MgO': 14, 'SiO2': 40, 'T': 1426}。
{'Al2O3': 12, 'Ca0': 39, 'MgO': 12, 'SiO2': 37, 'T': 1543}。
{'Al2O3': 12, 'Ca0': 40, 'MgO'/span>: 11, 'SiO2': 37, 'T': 1533}。
{'Al2O3': 13, 'Ca0': 36, 'MgO': 12, 'SiO2': 39, 'T': 1428}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332547.html
標籤:
