J'ai beaucoup appris dans la merde, alors je l'ai partagé
Idée ancêtre Composant aérien 30 gacha consécutifs
Jusqu'où pouvez-vous dire les éléments qui composent l'air? Azote, oxygène, dioxyde de carbone, argon ... Je ne connaissais pas le reste.
Vous pouvez faire tourner le gacha sur ce site.
Les composants qui composent l'air sont [Air-Wikipedia](https://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B0%97#%E6%88%90%E5%88% Selon 86)
composant | Formule chimique | Rapport de rapport de volume (vol%) |
---|---|---|
azote | N2 | 78.084 |
oxygène | O2 | 20.9476 |
Argon | Ar | 0.934 |
gaz carbonique | CO2 | 0.0390 |
néon | Ne | 0.001818 |
hélium | He | 0.000524 |
méthane | CH4 | 0.000181 |
krypton | Kr | 0.000114 |
Le dioxyde de soufre | SO2 | 0.0001 |
hydrogène | H2 | 0.00005 |
Monoxyde de diazote | N2O | 0.000032 |
xénon | Xe | 0.0000087 |
ozone | O3 | 0.000007 |
Dioxyde d'azote | NO2 | 0.000002 |
Iode | I2 | 0.000001 |
Le rapport volumique des composants qui composent l'air est le taux d'émission de gacha.
air_gacha.py
"""
https://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B0%97#%E6%88%90%E5%88%86
Tableau 1:Composition principale de l'air sec (International Standard Air, 1975)
Formule chimique du composant Rapport volumique (vol)%) Ppm ppb Remarques
Azote N2 78.084 780,840 - [12]
Oxygène O2 20.9476 209,476 - [12]
Argon Ar 0.934 9,340 - [12]
Dioxyde de carbone CO2 0.0390 390 - +*Valeur 2011[13][12][Note 2]
Néon Ne 0.001818 18.18 - [12]
Hélium He 0.000524 5.24 - [12]
Méthan CH4 0.000181 1.81 1813±2 +Valeur 2011[13][12][Note 3]
Crypton Kr 0.000114 1.14 - [12]
Dioxyde de soufre SO2 0.0001> 1> - *[12]
Hydrogène H2 0.00005 0.5 - [12]
Monoxyde de diazote N2O 0.000032 0.32 324.2±0.1 +*Valeur 2011[13][12][Remarque 4]
Xénon Xe 0.0000087 0.087 87 [12]
Ozone O3 0.000007> 0.07> 70> *[Remarque 5][12]
Dioxyde d'azote NO2 0.000002> 0.02> 20> *[12]
Iode I2 0.000001> 0.01> 10> *[12]
"""
import random
import time
from decimal import Decimal
dic = {"Azote N2":78.084, "Oxygène O2":20.9476, "Argon Ar":0.934, "Dioxyde de carbone CO2":0.0390, "Néon Ne":0.001818, "Hélium He":0.000524, "Méthan CH4":0.000181, "Crypton Kr":0.000114, "Dioxyde de soufre SO2":0.0001, "Hydrogène H2":0.00005, "一酸化二Azote N2O":0.000032, "Xenon Xe":0.0000087, "Ozone O3":0.000007, "Dioxyde d'azote NO2":0.000002, "Iode I2":0.000001}
com = ["azote", "oxygène", "Argon", "gaz carbonique", "néon", "hélium", "méthane", "krypton", "Le dioxyde de soufre", "hydrogène", "一酸化二azote", "xénon", "ozone", "二酸化azote", "Iode"]
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 correspond à 10 secondes, 10**7 prend 2 minutes
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]]
#Moitié de la taille,Caractères pleine largeur"Fluctuation"Fonction à formater
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("Air gacha" + "{:.0e}".format(que) + "(" + str(que) + ")" + "Communicant")
for i in range(len(keys)):
print(left(12, com[i]), left(3, che[i]), "{:>7}".format(out[i]))
Lorsque que = 10 ** 6
Air gacha 1e+06(1000000)Communicant
Azote N2 780580
Oxygène O2 209579
Argon Ar 9406
Dioxyde de carbone CO2 391
Néon Ne 32
Hélium He 5
Méthan CH4 3
Crypton Kr 1
Dioxyde de soufre SO2 2
Hydrogène H2 1
Monoxyde de diazote N2O 0
Xénon Xe 0
Ozone O3 0
Dioxyde d'azote NO2 0
Iode I2 0
Lorsque que = 10 ** 7
Air gacha 1e+07(10000000)Communicant
Azote N2 7809540
Oxygène O2 2092942
Argon Ar 93396
Dioxyde de carbone CO2 3808
Néon Ne 214
Hélium He 54
Méthan CH4 12
Crypton Kr 11
Dioxyde de soufre SO2 6
Hydrogène H2 10
Monoxyde de diazote N2O 6
Xénon Xe 1
Ozone O3 0
Dioxyde d'azote NO2 0
Iode I2 0
Soyez prudent lorsque vous manipulez des types de flotteurs. Dans le monde binaire des ordinateurs, lorsqu'il s'agit de fractions, il n'est pas possible de traiter des valeurs précises.
print(0.1 + 0.2)
#Résultat d'exécution: 0.30000000000000004
Où est passé 0.00000000000000004 !!!!!!!!
Donc, lorsque vous traitez des fractions en Python, c'est une bonne idée d'utiliser Decimal ()
.
15. Arithmétique en virgule flottante, ses problèmes et ses limites - Documentation Python 3.8.3
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2"))
#Résultat d'exécution: 0.3
Dans le code
for i in dic.keys():
su += int(Decimal(str(dic[i]))*(10**7))
dic[i] = int(Decimal(str(dic[i]))*(10**7))
La partie marquée de correspond à éviter les erreurs. Lorsque vous essayez de gérer le taux d'émission comme un nombre entier en multipliant par 10 ** 7, une erreur se produit s'il s'agit d'un type à virgule flottante car le calcul est en cours d'exécution.
[Time.time () n'est-il pas très précis? --Qiita]
(https://qiita.com/takeopy/items/170d0e1ddbf02ef9fbb9)
Comme l'instruction for tourne trop rapidement, time.time ()
générera probablement la même heure et aura la même valeur de départ (ce qui était le cas dans l'environnement Windows).
Par conséquent, utilisez le très précis time.perf_counter ()
.
t = time.perf_counter()
random.seed(t)
ra = random.randint(0, su)
Affiche les caractères pleine largeur et demi-largeur alignés à l'aide de la bibliothèque de données Unicode de Python --Qiita Essayez de rendre la sortie facile à voir.
for i in range(len(keys)):
print(left(12, com[i]), left(3, che[i]), "{:>7}".format(out[i]))
La probabilité est biaisée.