Ich habe viel im Mist gelernt, also habe ich es geteilt
Idee Vorfahr Luftkomponente 30 aufeinanderfolgende Gacha
Wie weit können Sie die Elemente sagen, aus denen die Luft besteht? Stickstoff, Sauerstoff, Kohlendioxid, Argon ... den Rest kannte ich nicht.
Sie können die Gacha unter dieser Site drehen.
Die Komponenten, aus denen die Luft besteht, sind Air-Wikipedia Nach 86)
Komponente | Chemische Formel | Volumenverhältnis (vol%) |
---|---|---|
Stickstoff- | N2 | 78.084 |
Sauerstoff | O2 | 20.9476 |
Argon | Ar | 0.934 |
Kohlendioxid | CO2 | 0.0390 |
Neon- | Ne | 0.001818 |
Helium | He | 0.000524 |
Methan | CH4 | 0.000181 |
Krypton | Kr | 0.000114 |
Schwefeldioxid | SO2 | 0.0001 |
Wasserstoff | H2 | 0.00005 |
Distickstoffmonoxid | N2O | 0.000032 |
Xenon | Xe | 0.0000087 |
Ozon | O3 | 0.000007 |
Stickstoffdioxid | NO2 | 0.000002 |
Jod | I2 | 0.000001 |
Das Volumenverhältnis der Komponenten, aus denen die Luft besteht, ist die Gacha-Emissionsrate.
air_gacha.py
"""
https://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B0%97#%E6%88%90%E5%88%86
Tabelle 1:Hauptzusammensetzung trockener Luft (International Standard Air, 1975)
Chemische Formel der Komponente Volumenverhältnis (vol)%) Ppm ppb Bemerkungen
Stickstoff N2 78.084 780,840 - [12]
Sauerstoff O2 20.9476 209,476 - [12]
Argon Ar 0.934 9,340 - [12]
Kohlendioxid CO2 0.0390 390 - +*2011 Wert[13][12][Anmerkung 2]
Neon Ne 0.001818 18.18 - [12]
Helium He 0.000524 5.24 - [12]
Methan CH4 0.000181 1.81 1813±2 +2011 Wert[13][12][Notiz 3]
Crypton Kr 0.000114 1.14 - [12]
Schwefeldioxid SO2 0.0001> 1> - *[12]
Wasserstoff H2 0.00005 0.5 - [12]
Distickstoffmonoxid N2O 0.000032 0.32 324.2±0.1 +*2011 Wert[13][12][Anmerkung 4]
Xenon Xe 0.0000087 0.087 87 [12]
Ozon O3 0.000007> 0.07> 70> *[Anmerkung 5][12]
Stickstoffdioxid NO2 0.000002> 0.02> 20> *[12]
Jod I2 0.000001> 0.01> 10> *[12]
"""
import random
import time
from decimal import Decimal
dic = {"Stickstoff N2":78.084, "Sauerstoff O2":20.9476, "Argon Ar":0.934, "Kohlendioxid CO2":0.0390, "Neon Ne":0.001818, "Helium He":0.000524, "Methan CH4":0.000181, "Crypton Kr":0.000114, "Schwefeldioxid SO2":0.0001, "Wasserstoff H2":0.00005, "一酸化二Stickstoff N2O":0.000032, "Xenon Xe":0.0000087, "Ozon O3":0.000007, "Stickstoffdioxid NO2":0.000002, "Jod I2":0.000001}
com = ["Stickstoff-", "Sauerstoff", "Argon", "Kohlendioxid", "Neon-", "Helium", "Methan", "Krypton", "Schwefeldioxid", "Wasserstoff", "一酸化二Stickstoff-", "Xenon", "Ozon", "二酸化Stickstoff-", "Jod"]
che = ["N2", "O2", "Ar", "CO2", "Ne", "He", "CH4", "Kr", "SO2", "H2", "N2O", "Xe", "O3", "NO2", "I2"]
keys = []
for i in dic.keys():
keys.append(i)
su = 0
for i in dic.keys():
su += int(Decimal(str(dic[i]))*(10**7))
dic[i] = int(Decimal(str(dic[i]))*(10**7))
out = [0 for i in range(len(keys))]
que = 10**6
for q in range(que): #10**6 ist 10 Sekunden, 10**7 dauert 2 Minuten
t = time.perf_counter()
random.seed(t)
ra = random.randint(0, su)
res = 0
if 0 <= ra < dic[keys[0]]:
out[0] += 1
else:
res += dic[keys[0]]
for i in range(1, len(keys)):
"""
if i >= 5:
print("!!!!!!!!!!!!")
print(out)
"""
if res <= ra < res + dic[keys[i]]:
out[i] += 1
break
res += dic[keys[i]]
#Halbe Grösse,Zeichen in voller Breite"Fluktuation"Funktion zum Formatieren
import unicodedata
def left(digit, msg):
for c in msg:
if unicodedata.east_asian_width(c) in ('F', 'W', 'A'):
digit -= 2
else:
digit -= 1
return msg + ' '*digit
print("Luft Gacha" + "{:.0e}".format(que) + "(" + str(que) + ")" + "Kommunizieren")
for i in range(len(keys)):
print(left(12, com[i]), left(3, che[i]), "{:>7}".format(out[i]))
Wenn que = 10 ** 6
Luft gacha 1e+06(1000000)Kommunizieren
Stickstoff N2 780580
Sauerstoff O2 209579
Argon Ar 9406
Kohlendioxid CO2 391
Neon Ne 32
Helium He 5
Methan CH4 3
Crypton Kr 1
Schwefeldioxid SO2 2
Wasserstoff H2 1
Distickstoffmonoxid N2O 0
Xenon Xe 0
Ozon O3 0
Stickstoffdioxid NO2 0
Jod I2 0
Wenn que = 10 ** 7
Luft gacha 1e+07(10000000)Kommunizieren
Stickstoff N2 7809540
Sauerstoff O2 2092942
Argon Ar 93396
Kohlendioxid CO2 3808
Neon Ne 214
Helium He 54
Methan CH4 12
Crypton Kr 11
Schwefeldioxid SO2 6
Wasserstoff H2 10
Distickstoffmonoxid N2O 6
Xenon Xe 1
Ozon O3 0
Stickstoffdioxid NO2 0
Jod I2 0
Seien Sie vorsichtig beim Umgang mit Schwimmertypen. In der binären Welt der Computer ist es beim Umgang mit Brüchen nicht möglich, mit genauen Werten umzugehen.
print(0.1 + 0.2)
#Ausführungsergebnis: 0.30000000000000004
Woher kam 0.00000000000000004 !!!!!!!! Wenn Sie sich also mit Brüchen in Python befassen, ist es eine gute Idee, "Decimal ()" zu verwenden. 15. Gleitkomma-Arithmetik, ihre Probleme und Einschränkungen - Python 3.8.3-Dokumentation
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2"))
#Ausführungsergebnis: 0.3
Im Code
for i in dic.keys():
su += int(Decimal(str(dic[i]))*(10**7))
dic[i] = int(Decimal(str(dic[i]))*(10**7))
Der mit gekennzeichnete Teil entspricht der Vermeidung von Fehlern. Beim Versuch, die Emissionsrate durch Multiplikation mit 10 ** 7 als Ganzzahl zu behandeln, tritt ein Fehler auf, wenn es sich um einen Gleitkommatyp handelt, da die Berechnung durchgeführt wird.
[Ist time.time () nicht sehr genau? - Qiita]
(https://qiita.com/takeopy/items/170d0e1ddbf02ef9fbb9)
Da sich die for-Anweisung zu schnell dreht, generiert time.time ()
wahrscheinlich dieselbe Zeit und denselben Startwert (was in der Windows-Umgebung der Fall war).
Verwenden Sie daher das hochgenaue time.perf_counter ()
.
t = time.perf_counter()
random.seed(t)
ra = random.randint(0, su)
Zeigt sowohl Zeichen voller Breite als auch halber Breite an, die mithilfe der Unicode-Datenbibliothek von Python - Qiita ausgerichtet wurden Versuchen Sie, die Ausgabe leicht sichtbar zu machen.
for i in range(len(keys)):
print(left(12, com[i]), left(3, che[i]), "{:>7}".format(out[i]))
Die Wahrscheinlichkeit ist voreingenommen.
Recommended Posts