Numer0n mit Elementen, die mit Python erstellt wurden

Dies ist mein zweiter Beitrag zu Qiita. Vielen Dank.

Dieses Mal haben wir das Spiel "Numer0n", das einst die Welt beherrschte, in Python implementiert.

1 Was ist Numer0n?

Zitiert aus Wikipedia:

Jeder Spieler verwendet 3 von 10 Karten mit Zahlen von 0 bis 9, um eine dreistellige Zahl zu erstellen. Da keine Karten dupliziert werden, können Sie keine Nummer erstellen, die zwei oder mehr derselben Nummern verwendet, z. B. "550" und "377". Der erste Spieler errät die Nummer des Gegners und ruft an. Der andere Teilnehmer vergleicht die angerufene Nummer mit seiner eigenen Nummer und gibt bekannt, wie gut die angerufene Nummer übereinstimmt. Wenn die Zahlen und Ziffern übereinstimmen, ist es "EAT", und wenn die Zahlen übereinstimmen, aber die Ziffern nicht übereinstimmen, ist es "BITE". Wenn beispielsweise die Nummer der anderen Partei "765" und die angerufene Nummer "746" ist, ist "7" von den drei Ziffern EAT, da die Ziffernpositionen übereinstimmen, und "6" ist die Nummer selbst. BITE, weil es übereinstimmt, aber die Position der Ziffer unterschiedlich ist. Da es einen EAT und einen BITE gibt, wird es zu "1EAT-1 BITE". Dies wird durch den ersten Angriff und den zweiten Angriff wiederholt, und der Spieler, der die Nummer des Gegners zuerst vollständig trifft (wenn es 3 Ziffern sind, lassen Sie den Gegner 3EAT ankündigen), gewinnt.

Dieses Mal haben wir ein Programm implementiert, mit dem Sie die Anzahl der Ziffern angeben können (auch für diejenigen, die mit 3 Ziffern nicht zufrieden sind).

2 Grundprogramm

Numer0n_Basic.py


#Numer0n_Basic
import random

#Die Nummer des Betreffs wird festgelegt
proper = 0
while proper == 0:
    print("Digit?")
    #Bestimmen Sie die Anzahl der Ziffern
    D = int(input())
    N = []
    #Die Anzahl der Stellen muss zwischen 1 und 10 Stellen liegen
    if 1 <= D <= 10:
        while len(N) < D:
            n = random.randint(0,9)
            if n in N:
                pass
            else:
                N.append(n)
        proper += 1
    else:
        print("Improper.")

#Zahlen-Ratespiel gestartet
count = 1
eat = 0
bite = 0

while eat < D:
    print("Call " + str(count) )
    call = input()
    #Treffen Sie eine Entscheidung, wenn der Anruf korrekt ist
    if len(call) == D and len(set(call)) == len(call):
        eat = 0
        bite = 0
        for i in range(D):
            for j in range(D):
                if str(N[i]) == call[j]:
                    if i == j:
                        eat += 1
                    else:
                        bite += 1
        if eat == D:
            print(str(D) + " EAT")
            #Ein Spezialeffekt wird nur hinzugefügt, wenn EIN ANRUF erreicht ist.
            if count == 1:
                print("ONE CALL")
            else:
                print("Numer0n in " + str(count) + " Calls")
        else:
            print(str(eat) + " EAT " + str(bite) + " BITE")
            count += 1
    #Korrespondenz im Falle von Miss Call
    else:
        print("Again!")

Durch Ändern der Anzahl der Ziffern D können Sie das Spiel des Erraten von Zahlen mit 5 oder mehr Ziffern zusätzlich zu den 3 Ziffern und 4 Ziffern, die in der ursprünglichen Familie vorkamen, herausfordern. Da es sich im Grunde genommen um ein Spiel handelt, das Sie nur angreifen, fügen Sie ein Score-Angriffselement hinzu, indem Sie die Anzahl der Anrufe anzeigen, z. B. "Wie oft wurden Sie getroffen". Streben Sie einen Anruf an!

In diesem Programm ist die ursprüngliche Nummer "N" vom Typ "int", die eingegebene Nummer "call" ist vom Typ string, und im Vergleichsteil wird "N" in einen Typ string konvertiert und die Beurteilung erfolgt. Ich werde. Der Grund, warum ich so etwas lästiges mache, ist der ** "Gegenstand" **, den ich später implementieren werde.

3 Artikel

Was Numer0n von Hit and Blow unterscheidet, ist das Vorhandensein von ** Gegenständen **.

In Numer0n gibt es verschiedene Elemente, mit denen Sie angreifen und verteidigen können. Dieses Mal werden wir drei davon implementieren, Angriffsgegenstände.

3.1 HIGH & LOW

Sie können entweder "HIGH (5-9)" oder "LOW (0-4)" für alle Ziffern der anderen Partei kennen. Die andere Partei muss in der Reihenfolge von der linken Ziffer aus deklarieren (Beispiel: "HIGH (8), LOW (0), HIGH (9)" für "809"). Sie können die Zahlen in den frühen Phasen bis zu einem gewissen Grad eingrenzen, und es kann nützlich sein, die Zahlen in den letzten Phasen festzulegen. (Wikipedia)

Ein mächtiger Gegenstand, der alle Ziffern eingrenzen kann. Für 3 Ziffern können Sie zuerst HIGH & LOW verwenden, um die Kandidaten von 720 auf 100 im schlimmsten Fall und hoffentlich auf 60 einzugrenzen.

Wenn Sie dieses Element in Python implementieren, sieht es folgendermaßen aus.

high_and_low.py


#HIGH and LOW
N = [int(input()) for _ in range(3)]
HL = ""
for i in range(len(N)):
    if N[i] <= 4:
        HL += 'L '
    else:
        HL += 'H '
print(HL)

Die Eingabe einer Nummer für jede Ziffer gibt die Nummer HIGH / LOW zurück.

Eingang 5 2 9

Ausgabe H L H

Es ist einfach, weil Sie nur die Größe mit 4 vergleichen.

3.2 SLASH

Sie können nach der "Schrägstrichnummer" fragen, die die maximale Anzahl ist, die von der anderen Partei verwendet wird, abzüglich der minimalen Anzahl. Wenn es beispielsweise "634" ist, ist die maximale Anzahl "6" - die minimale Anzahl ist "3" = die Schrägstrichnummer ist "3". Wenn der Schrägstrich "9" ist, besteht nur die Möglichkeit, dass die maximale Anzahl "9" und die minimale Anzahl "0" ist, sodass die Verwendung von 0 und 9 bestätigt wird. Wenn es "2" ist, versteht es sich unweigerlich, dass es aus drei aufeinanderfolgenden Arten von Zahlen wie "012" und "123" besteht. Abhängig davon, wie Sie es verwenden, können Sie viele Personen sehen, und Sie können es als Abschreckung gegen "Verwendung von 9 und 0" und "Verwendung von fortlaufenden Zahlen" verwenden, indem Sie es einfach halten, ohne es zu verwenden. Es wurde benannt, weil es die möglichen Verwendungsmuster von Zahlen "wegwerfen" kann. (Wikipedia)

Dies ist auch ein Element, mit dem Sie die Anzahl der anderen Teilnehmer gleichzeitig eingrenzen können. Es ist schwieriger zu verwenden als HIGH & LOW, aber wenn Sie es in dieser Situation verwenden, können Sie die Anzahl, die Sie verwenden, sofort bestimmen. Wie Sie im zitierten Teil sehen können, ist der Effekt insbesondere für bestimmte Arrangements wie "Kombination von 9 und 0" hervorragend.

Wenn Sie dieses Element in Python implementieren, sieht es folgendermaßen aus.

slash.py


#SLASH
N = [int(input()) for _ in range(3)]
SN = max(N) - min(N)
print(SN)

Wenn Sie eine Zahl Ziffer für Ziffer eingeben, wird die Schrägstrichnummer für diese Zahl zurückgegeben.

Eingang 5 2 9

Ausgabe 7

Das ist auch keine so große Sache. Max Funktion ist das Beste! Übrigens wird die Schrägstrichzahl von 7 auf die Muster "7,0 und die Zahl zwischen", "8,1 und die Zahl zwischen" und "9,2 und die Zahl zwischen" eingegrenzt. Abhängig vom bisherigen Ergebnis des Anrufs können Sie die Möglichkeit von hier aus ausschließen.

3.3 TARGET

Sie können eine von 10 verschiedenen Nummern angeben, um die andere Person zu fragen. Wenn die Nummer in der Kombination der anderen Partei enthalten ist, ist auch bekannt, in welcher Ziffer sie sich befindet. Insbesondere wenn Sie "eine Zahl im BITE-Status angeben, von der Sie wissen, dass sie enthalten ist, aber Sie nicht wissen, um welche Ziffer es sich handelt", können Sie genau wissen, wo sich die Ziffer befindet. Im Gegenteil, wenn die von Ihnen angeforderte Nummer nicht enthalten ist, können Sie sie durch Verwendung anderer Nummern eingrenzen. (Wikipedia)

Dieser Gegenstand wird von der Mitte bis zum Ende des Spiels verwendet. Es ist effektiv, um die Möglichkeit einzugrenzen, dass nur noch wenig übrig ist.

Wenn Sie dieses Element in Python implementieren, sieht es folgendermaßen aus.

target.py


#TARGET
N = [int(input()) for _ in range(3)]
TN = int(input())
judge = 0
for i in range(len(N)):
    if N[i] == TN:
        print("Place " + str(i+1))
        judge = 1
if judge == 0:
    print("Nothing.")

Geben Sie eine Zahl ein und geben Sie dann eine TN (dies ist eine Abkürzung für TARGET NUMBER) aus 10 Arten von Zahlen ein. Wenn diese enthalten ist, ihre Position (welche Nummer von links), falls sie nicht enthalten ist, Nothing. Kehrt zurück.

Eingang 5 2 9

Zielnummer 1 2

Ausgabe 1 Place 2

Zielnummer 2 7

Ausgabe 2 Nothing.

Sie können break verwenden, aber es ist in Ordnung, da Sie die Schleife höchstens 10 Mal drehen müssen.

Numer0n mit 4 Artikeln

Hier ist das Numer0n-Programm, das die oben genannten drei Elemente enthält.

Als Regel

Numer0n_Item.py


#Numer0n_Item
import random

#Entscheiden Sie, welche Nummer das Thema sein soll
proper = 0
while proper == 0:
    print("Digit?")
    #Die Anzahl der Ziffern wird festgelegt
    D = int(input())
    N = []
    #Die Anzahl der Stellen muss zwischen 1 und 10 Stellen liegen
    if 1 <= D <= 10:
        while len(N) < D:
            n = random.randint(0,9)
            if n in N:
                pass
            else:
                N.append(n)
        proper += 1
    else:
        print("Improper.")

#Zahlen-Ratespiel gestartet
count = 1
eat = 0
bite = 0
#Gegenstände können insgesamt nur einmal verwendet werden
item = 1
while eat < D:
    print("Call " + str(count) )
    call = input()
    #Treffen Sie eine Entscheidung, wenn der Anruf korrekt ist
    if len(call) == D and len(set(call)) == len(call):
        eat = 0
        bite = 0
        for i in range(D):
            for j in range(D):
                if str(N[i]) == call[j]:
                    if i == j:
                        eat += 1
                    else:
                        bite += 1
        if eat == D:
            print(str(D) + " EAT")
            #Ein Spezialeffekt wird nur hinzugefügt, wenn EIN ANRUF erreicht ist.
            if count == 1:
                print("ONE CALL")
            else:
                print("Numer0n in " + str(count) + " Calls")
        else:
            print(str(eat) + " EAT " + str(bite) + " BITE")
            count += 1
            
    #HIGH AND LOW
    elif call == "HIGH AND LOW":
        if item == 1:
            HL = ""
            for i in range(len(N)):
                if N[i] <= 4:
                    HL += 'L '
                else:
                    HL += 'H '
            print(HL)
            item = 0
        else:
            print("Already used.")
                
    #SLASH
    elif call == "SLASH":
        if item == 1:
            SN = max(N) - min(N)
            print(SN)
            item = 0
        else:
            print("Already used.")
    
    #TARGET
    elif call == "TARGET":
        if item == 1:
            print("TARGET Number?")
            TN = int(input())
            judge = 0
            for i in range(len(N)):
                if N[i] == TN:
                    print("Place " + str(i+1))
                    judge = 1
            if judge == 0:
                print("Nothing.")
            item = 0
        else:
            print("Already used.")
    #Korrespondenz im Falle von Miss Call
    else:
        print("Again!")

Der Hauptgrund, warum ich "call" als Zeichenfolge erhalten habe, war, dass ich den Namen des Elements deklarieren wollte, damit es verwendet werden kann. Es ist nicht möglich, mit Notationsschwankungen wie "ZIEL" und "Ziel", "Ziel" umzugehen, aber verzeihen Sie es.

5 Impressionen

Es gab viele Leute, die Numer0n in Python im Qiita-Artikel implementiert haben, aber ich habe das Element nicht implementiert, also habe ich es selbst versucht. Ich bin froh, dass es gut gelaufen ist.

Es klingt sogar in einem Spiel von Person zu Person interessant. Dann scheint die Bedeutung der Existenz von DOUBLE, SHUFFLE und CHANGE, die diesmal nicht implementiert wurden, zu wachsen. Das Problem ist, dass es ärgerlich zu sein scheint, und es wäre ein Problem, wenn die andere Partei die Ausgabe sehen könnte, so dass es schwierig wäre, sie zu implementieren.

Das Spiel, das die CPU auch angreift, scheint mit meinen Fähigkeiten schwierig zu sein. Wenn also jemand interessiert ist, tun Sie es bitte.

Wir freuen uns über Kommentare wie Eindrücke vom Spielen und Aufzeigen von Verbesserungen.

Na dann.

Recommended Posts

Numer0n mit Elementen, die mit Python erstellt wurden
Schaben mit Selen in Python
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Debuggen mit pdb in Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Ich habe mit Python einen Blackjack gemacht.
Othello gemacht mit Python (wie GUI)
Ich habe Wordcloud mit Python gemacht.
Zahlenerkennung in Bildern mit Python
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Testen mit Zufallszahlen in Python
Mit Flask erstellte SNS Python-Grundlagen
GOTO in Python mit erhabenem Text 3
Scraping mit Selen in Python (Basic)
CSS-Analyse mit cssutils in Python
Öffnen Sie UTF-8 mit Stückliste in Python
Ich habe mit Python eine Lotterie gemacht.
Verwenden Sie rospy mit virtualenv in Python3
Othello-Spieleentwicklung mit Python
Verwenden Sie Python in pyenv mit NeoVim
Heatmap mit Dendrogramm in Python + Matplotlib
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Lesen Sie Dateien parallel zu Python
Passwort für Lehrbuch mit Python generieren
Verwenden Sie OpenCV mit Python 3 in Window
Bis zum Umgang mit Python in Atom
Ich habe mit Python einen Daemon erstellt
Beginnen Sie mit Python mit Blender
Arbeiten mit DICOM-Bildern in Python
Unterschied im Verhalten des transparenten Frames mit tkinter im Pyinstaller [Python]
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Versuchen Sie, sich mit Python bei qiita anzumelden
Stresstest mit Locust in Python geschrieben
Python3> im Schlüsselwort> Wahr mit teilweiser Übereinstimmung?
Exklusive Steuerung mit Sperrdatei in Python
Geräteüberwachung durch On-Box Python von IOS-XE
Ich habe ein Pay-Management-Programm in Python erstellt!
HTTP Split Download Typ mit Python gemacht
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Ich habe mit Python einen Zeichenzähler erstellt
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Tipps zum Umgang mit Binärdateien in Python
Zeigen Sie Python 3 im Browser mit MAMP an
So arbeiten Sie mit BigQuery in Python
Trump-Klasse in Python (mit Vergleich)
Umgang mit "Jahren und Monaten" in Python
Verarbeiten Sie mehrere Listen mit for in Python
Ersetzen Sie Nicht-ASCII durch reguläre Ausdrücke in Python
Einzeiler webServer (mit CGI) in Python
Beginnen wir mit TopCoder in Python (Version 2020)
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow