Gacha geschrieben in Python -BOX Gacha-

Inhalt

Lassen Sie uns eine BOX-Gacha erstellen. Die folgenden Quellen werden verwendet. (Gacha geschrieben in Python-Data Design-)

Was ist BOX Gacha?

Es gibt eine feste Anzahl von Lottoscheinen in der Lotteriebox, und die Gacha endet, wenn ** alle gezogen ** sind. (Bitte beachten Sie, dass die BOX-Gacha, die die Lotterie der unteren Rarität automatisch auffüllt, eine Fälschung ist. Sie brennt groß.)

Wahrscheinlichkeit von BOX Gacha

Es gibt keine Gewichtseinstellung für jeden Gegenstand in der Lotterie. Die Wahrscheinlichkeit, einen Artikel zu zeichnen, basiert auf der Gesamtzahl der Blätter (n) in der BOX.

  p = \frac{1}{n}

Die Wahrscheinlichkeit nach dem Zeichnen ist wie folgt

  p = \frac{1}{n-1}

Implementierung von BOX Gacha

gacha_box.py


import random

#Verwenden Sie einen Verschluss, um den BOX-Status beizubehalten
def gacha_box(gacha_items: dict):
    #ID extrahieren
    #Gewicht wird nicht verwendet
    items = [key for key in gacha_items.keys()]

    def lottery(times: int=1):
        #Wenn die Anzahl der Lotterien größer als die verbleibende Anzahl ist, stimmen Sie mit der verbleibenden Anzahl überein
        if len(items) < times:
            times = len(items)
        #Nicht überlappende Lotterie
        ids =  random.sample(items, k=times)
        #Löschen Sie die aus dem Artikel gezogene ID
        for key in ids:
            items.remove(key)
        return ids

    return lottery

def gacha(gacha_items: dict, times: int=1) -> list:
    #Erstellen Sie ein Wörterbuch mit IDs und Gewichten, die für die Lotterie erforderlich sind
    lots = {key: info["weight"] for key, info in gacha_items.items()}
    return random.choices(tuple(lots), weights=lots.values(), k=times)

def main():
    #Gacha-Artikelinformationen
    gacha_items = {
        1: {"weight": 1, "rarity": 5, "item_name": "UR_HOGE"},
        2: {"weight": 1, "rarity": 5, "item_name": "UR_FUGA"},
        3: {"weight": 9, "rarity": 4, "item_name": "SSR_HOGE"},
        4: {"weight": 9, "rarity": 4, "item_name": "SSR_FUGA"},
        5: {"weight": 20, "rarity": 3, "item_name": "SR_HOGE"},
        6: {"weight": 20, "rarity": 3, "item_name": "SR_FUGA"},
        7: {"weight": 30, "rarity": 2, "item_name": "R_HOGE"},
        8: {"weight": 30, "rarity": 2, "item_name": "R_FUGA"},
        9: {"weight": 40, "rarity": 1, "item_name": "N_HOGE"},
        10: {"weight": 40, "rarity": 1, "item_name": "N_FUGA"}
    }

    #Seltenheitsname
    rarity_names = {5: "UR", 4: "SSR", 3: "SR", 2: "R", 1: "N"}

    #Anzahl der Lotterien
    times = 10

    #Holen Sie sich eine Liste der IDs per Lotterie
    ids = gacha(gacha_items, times)

    #Ergebnisausgabe
    print("Normale Gacha")
    for id in ids:
        print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))

    print("=======")
    #Speichern Sie die Lotteriefunktion in func
    func = gacha_box(gacha_items)
    times = 3
    box_ids = func(times)
    print("BOX Gacha: 1. Mal,Anzahl der Lotterieeinstellungen:%d,Anzahl der Lotterieergebnisse:%d" %(times,len(box_ids)))
    for id in box_ids:
        print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))

    times = 8
    box_ids = func(times)
    print("BOX Gacha: Zum zweiten Mal,Anzahl der Lotterieeinstellungen:%d,Anzahl der Lotterieergebnisse:%d" %(times,len(box_ids)))
    for id in box_ids:
        print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))

if __name__ == '__main__':
    main()

Ausführungsergebnis

Normale Gacha
ID:9, N, N_HOGE
ID:4, SSR, SSR_FUGA
ID:3, SSR, SSR_HOGE
ID:10, N, N_FUGA
ID:9, N, N_HOGE
ID:4, SSR, SSR_FUGA
ID:7, R, R_HOGE
ID:5, SR, SR_HOGE
ID:9, N, N_HOGE
ID:9, N, N_HOGE
=======
BOX Gacha: 1. Mal,Anzahl der Lotterieeinstellungen:3,Anzahl der Lotterieergebnisse:3
ID:2, UR, UR_FUGA
ID:8, R, R_FUGA
ID:4, SSR, SSR_FUGA
BOX Gacha: Zum zweiten Mal,Anzahl der Lotterieeinstellungen:8,Anzahl der Lotterieergebnisse:7
ID:6, SR, SR_FUGA
ID:1, UR, UR_HOGE
ID:5, SR, SR_HOGE
ID:9, N, N_HOGE
ID:10, N, N_FUGA
ID:3, SSR, SSR_HOGE
ID:7, R, R_HOGE

Erwägung

Das Ausführungsergebnis von BOX Gacha unterscheidet sich von normalem Gacha und es gibt keine Duplizierung der ID während des ersten und zweiten Mal. Darüber hinaus wird beim zweiten Mal eine Kontrolle durchgeführt, wenn die Anzahl der Lotterieeinstellungen und die Anzahl der Lotterieergebnisse unterschiedlich sind und Sie sehen, dass die Lotterie innerhalb der verbleibenden Anzahl in der BOX durchgeführt wird. Tatsächlich besteht die richtige Methode darin, die verbleibende Nummer in der BOX zu überprüfen, bevor die Gacha ausgeführt wird, und sie so zu steuern, dass keine weiteren Gachas ausgeführt werden können. Es ist eine gute Idee, eine Funktion hinzuzufügen, um die verbleibende Nummer in der BOX auf den Rückgabewert der Funktion gacha_box zu bringen.

#Verwenden Sie einen Verschluss, um den BOX-Status beizubehalten
def gacha_box(gacha_items: dict):
    #ID extrahieren
    #Gewicht wird nicht verwendet
    items = [key for key in gacha_items.keys()]

    def lottery(times: int=1):
        #Wenn die Anzahl der Lotterien größer als die verbleibende Anzahl ist, stimmen Sie mit der verbleibenden Anzahl überein
        if len(items) < times:
            times = len(items)
        #Nicht überlappende Lotterie
        ids =  random.sample(items, k=times)
        #Löschen Sie die aus dem Artikel gezogene ID
        for key in ids:
            items.remove(key)
        return ids

    #Holen Sie sich die verbleibende Nummer in die BOX
    def remain():
        return len(items)

    return lottery, remain
   func, remain = gacha_box(gacha_items)
   times = 10
   if remain() < times:
       print("BOX Restnummer Fehler")
       return False
   box_ids = func(times)

Recommended Posts

Gacha geschrieben in Python -BOX Gacha-
Einfache Gacha-Logik in Python geschrieben
Gacha geschrieben in Python-Übung 1-
Gacha geschrieben in Python-Data Design-
Einfaches Passwortfeld in Python
Cooles Lisp geschrieben in Python: Hy
Kompatibilitätsdiagnoseprogramm in Python geschrieben
Quadtree in Python --2
Python in der Optimierung
CURL in Python
In Python geschriebener Fourier-Serien-Verifizierungscode
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Stresstest mit Locust in Python geschrieben
Metaanalyse in Python
Unittest in Python
Übergangswahrscheinlichkeit der in Python geschriebenen Markov-Kette
Epoche in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Gacha in Python-Rarity geschrieben mit Bonus bestätigt
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Gacha geschrieben in Python-Implementierung in grundlegende Datenstruktur-
Konstante in Python
Gacha geschrieben in Python-Übung 2 ・ Grundlagen der Step-up-Gacha-
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Gacha geschrieben in Python-Übung 3 ・ Hinzufügen von Step-up-Gacha-Funktionen-
Gacha geschrieben in Python-Addition der Periodeneinstellungsfunktion-
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python