[PYTHON] Lassen Sie uns die Luft Gacha drehen

Einführung

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.

Luft-Gacha-Emissionsrate

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.

Quellcode

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]))

Ausführungsergebnis

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

Aufmerksamkeitspunkt

Gleitkommazahl Fehler

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.

Zufällige Erstellung

[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)

Formen Sie die "Fluktuation" von Zeichen durch halbe und volle Breite

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]))

Impressionen

Die Wahrscheinlichkeit ist voreingenommen.

Recommended Posts

Lassen Sie uns die Luft Gacha drehen
Lassen Sie uns von der Linie suchen
Schalten Sie die Brühwarnung aus
Django-TodoList② ~ Lassen Sie uns die Detailseite ~ anzeigen
Schneiden wir das Gesicht aus dem Bild
Lassen Sie uns die Karte mit der Grundkarte anzeigen
Lassen Sie uns den Gewinner des Bingo bestimmen