[Letzte Geschichte] Anfänger haben Numeron AI mit Python ausprobiert

0th 1. 2. 3. Letzte Geschichte

Über diesen Artikel

Nachdem wir die erforderlichen Hauptfunktionen definiert haben, werden wir sie langsam implementieren!

Eine Kampfumgebung schaffen

Im Folgenden finden Sie eine Zusammenfassung der bisher erstellten Funktionen und der Ermittlung der Spielernummern.

import random

def NUMERON(CALL,ANS):
    EAT=0
    BITE=0
    for i in range(3):
        if CALL[i]==ANS[i]:
            EAT+=1
        elif CALL[i] in ANS and CALL[i]!=ANS[i]:
            BITE+=1
    return [EAT,BITE]

def change(a,b,c):
    return [[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]]
ALL=[]
for i in range(0,10):
    for j in range(i+1,10):
        for k in range(j+1,10):
            ALL+=change(i,j,k)

EB=[[3,0],[2,1],[2,0],[1,2],[1,1],[1,0],[0,3],[0,2],[0,1],[0,0]]

def CHECK(CALL,EAT,BITE,KOUHO):
    X=len(KOUHO)
    group=[]
    for i in range(X):
        if NUMERON(CALL,KOUHO[i])==[EAT,BITE]:
            group.append(KOUHO[i])
    return group

def BAD(CALL,KOUHO):
    CHECK_LIST=[0]*10
    for i in range(10):
        EAT=EB[i][0]
        BITE=EB[i][1]
        CHECK_LIST[i]=len(CHECK(CALL,EAT,BITE,KOUHO))
    return max(CHECK_LIST)

def CALL_LIST(KOUHO):
    LIST=[]
    EATLIST=[]
    cnt=1000
    for i in range(720):
        if BAD(ALL[i],KOUHO)<cnt:
            cnt=BAD(ALL[i],KOUHO)
            LIST=[]
            EATLIST=[]
            if len(CHECK(ALL[i],3,0,KOUHO))>=1:
                EATLIST.append(ALL[i])
            else:
                LIST.append(ALL[i])
        elif BAD(ALL[i],KOUHO)==cnt:
            if len(CHECK(ALL[i],3,0,KOUHO))>=1:
                EATLIST.append(ALL[i])
            else:
                LIST.append(ALL[i])
    if len(EATLIST)==0:
        return LIST
    else:
        return EATLIST

NUMBERS=[0,1,2,3,4,5,6,7,8,9]
random.shuffle(NUMBERS)
com=NUMBERS[0:3]

for i in range(10**9):
    print("Geben Sie Ihre dreistellige Lieblingsnummer ein, wobei alle Nummern unterschiedlich sind")
    X=input()
    if len(X) != 3:
        print("Bitte verwenden Sie 3 Ziffern")
    else:
        if int(X[0]) in NUMBERS and int(X[1]) in NUMBERS and int(X[2]) in NUMBERS:
            if X[0] == X[1] or X[0] == X[2] or X[2] == X[3]:
                print("Bitte geben Sie alle drei Zahlen unterschiedlich ein")
            else:
                player=[int(X[0]) , int(X[1]) , int(X[2])]
                break
        else:
            print("Bitte verwenden Sie eine dreistellige "Nummer"")

Lassen Sie uns das Programm weiter schreiben.

Verwalten Sie Ihren Zug

Die Wende ist Ich werde es mit einer Variablen namens Teban verwalten teban = 1: Erste Runde teban = -1: Es wird die zweite Runde sein. Wenn die Runde jeder Runde beendet ist, können Sie sie verwalten, indem Sie sie als Runde * -1 festlegen.

Die Fortsetzung des obigen Programms ist also wie folgt

for i in range(10*9):
   if teban==1:
Verarbeitung der ersten Runde

Wenn Sie fertig sind, Teban*-1
   else:
Post-Turn-Verarbeitung

Wenn Sie fertig sind, Teban*-1

Daher wird der Rest abgeschlossen, indem die Verarbeitung der ersten Runde (Spieler) und die Verarbeitung der zweiten Runde (com) erstellt werden.

Verarbeitung der ersten Runde

Schreiben wir konkret. Das ist aber einfach "Geben Sie die Nummer ein, die Sie anrufen möchten ()" Und Anzeige "EAT, BITE" Das ist es. Lass uns ein wenig schreiben

        print("Es ist ein Spieleranruf")
        x=input()
        CALL=[int(x[0]),int(x[1]),int(x[2])]
        X=NUMERON(CALL,com)
        print(str(X[0])+"EAT//"+str(X[1])+"BITE")
        if X==[3,0]:
            print("Spieler gewinnt")
            exit()
        teban*=(-1)

Das ist in Ordnung. Gehen wir dem Problem nach

Post-Turn-Verarbeitung

Der große Unterschied besteht darin, dass die anzurufende Nummer nicht eingegeben wird (). Da ich jedoch eine Funktion definiert habe, die die Nummern auflistet, die beim letzten Mal aufgerufen werden sollen, ist es in Ordnung, die Nummern auszuwählen Aber wie Sie alle wissen, ist Python langsam. Wenn Sie 720 Stück prüfen, müssen Sie lange warten. Also sage ich die Zahlen für den ersten Zug nur zufällig! (Weil sich der erste Zug nicht ändert, egal was du sagst)

Basierend darauf ist die Verarbeitung der zweiten Runde

        if count==0:
            random.shuffle(KOUHO)
            x=KOUHO[0]
            count+=1
        else:
            com_CALL=CALL_LIST(KOUHO)
            random.shuffle(com_CALL)
            x=com_CALL[0]
        print("Es ist ein Anruf von com")
        print(x)
        X=NUMERON(x,player)
        KOUHO=CHECK(x,X[0],X[1],KOUHO)
        print(str(X[0])+"EAT//"+str(X[1])+"BITE")
        if X==[3,0]:
            print("com gewinnen")
            exit()
        else:
            print("verbleibend"+str(len(KOUHO))+"Straße")

Dies ist abgeschlossen! !!

Abschlussprogramm

import random

def NUMERON(CALL,ANS):
    EAT=0
    BITE=0
    for i in range(3):
        if CALL[i]==ANS[i]:
            EAT+=1
        elif CALL[i] in ANS and CALL[i]!=ANS[i]:
            BITE+=1
    return [EAT,BITE]

def change(a,b,c):
    return [[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]]
ALL=[]
for i in range(0,10):
    for j in range(i+1,10):
        for k in range(j+1,10):
            ALL+=change(i,j,k)

EB=[[3,0],[2,1],[2,0],[1,2],[1,1],[1,0],[0,3],[0,2],[0,1],[0,0]]

def CHECK(CALL,EAT,BITE,KOUHO):
    X=len(KOUHO)
    group=[]
    for i in range(X):
        if NUMERON(CALL,KOUHO[i])==[EAT,BITE]:
            group.append(KOUHO[i])
    return group

def BAD(CALL,KOUHO):
    CHECK_LIST=[0]*10
    for i in range(10):
        EAT=EB[i][0]
        BITE=EB[i][1]
        CHECK_LIST[i]=len(CHECK(CALL,EAT,BITE,KOUHO))
    return max(CHECK_LIST)

def CALL_LIST(KOUHO):
    LIST=[]
    EATLIST=[]
    cnt=1000
    for i in range(720):
        if BAD(ALL[i],KOUHO)<cnt:
            cnt=BAD(ALL[i],KOUHO)
            LIST=[]
            EATLIST=[]
            if len(CHECK(ALL[i],3,0,KOUHO))>=1:
                EATLIST.append(ALL[i])
            else:
                LIST.append(ALL[i])
        elif BAD(ALL[i],KOUHO)==cnt:
            if len(CHECK(ALL[i],3,0,KOUHO))>=1:
                EATLIST.append(ALL[i])
            else:
                LIST.append(ALL[i])
    if len(EATLIST)==0:
        return LIST
    else:
        return EATLIST

NUMBERS=[0,1,2,3,4,5,6,7,8,9]
random.shuffle(NUMBERS)
com=NUMBERS[0:3]

for i in range(10**9):
    print("Geben Sie Ihre dreistellige Lieblingsnummer ein, wobei alle Nummern unterschiedlich sind")
    X=input()
    if len(X) != 3:
        print("Bitte verwenden Sie 3 Ziffern")
    else:
        if int(X[0]) in NUMBERS and int(X[1]) in NUMBERS and int(X[2]) in NUMBERS:
            if X[0] == X[1] or X[0] == X[2] or X[1] == X[2]:
                print("Bitte geben Sie alle drei Zahlen unterschiedlich ein")
            else:
                player=[int(X[0]) , int(X[1]) , int(X[2])]
                break
        else:
            print("Bitte verwenden Sie eine dreistellige "Nummer"")
teban=1
KOUHO=ALL
count=0
for i in range(10**9):
    if teban==1:
        print("Es ist ein Spieleranruf")
        x=input()
        CALL=[int(x[0]),int(x[1]),int(x[2])]
        X=NUMERON(CALL,com)
        print(str(X[0])+"EAT//"+str(X[1])+"BITE")
        if X==[3,0]:
            print("Spieler gewinnt")
            exit()
        teban*=(-1)
    else:
        if count==0:
            random.shuffle(KOUHO)
            x=KOUHO[0]
            count+=1
        else:
            com_CALL=CALL_LIST(KOUHO)
            random.shuffle(com_CALL)
            x=com_CALL[0]
        print("Es ist ein Anruf von com")
        print(x)
        X=NUMERON(x,player)
        KOUHO=CHECK(x,X[0],X[1],KOUHO)
        print(str(X[0])+"EAT//"+str(X[1])+"BITE")
        if X==[3,0]:
            print("com gewinnen")
            exit()
        else:
            print("verbleibend"+str(len(KOUHO))+"Straße")
        teban*=(-1)

Lass uns ein bisschen spielen!

Lass uns ein bisschen spielen

#Geben Sie Ihre dreistellige Lieblingsnummer ein, wobei alle Nummern unterschiedlich sind
017

Und der Anruf ist an der Reihe

#Es ist ein Spieleranruf
012
#1EAT//0BITE
#Es ist ein Anruf von com
#[2, 7, 3]
#0EAT//1BITE
#252 verbleibende Straßen

Ich bin 1: 0, also sollte es com überlegen sein. Gehen Sie um 034

#Es ist ein Spieleranruf
034
#0EAT//0BITE
#Es ist ein Anruf von com
#[5, 3, 7]
#1EAT//0BITE
#Noch 72 Wege

034 ist 0-0. Mit anderen Worten, es ist x1y oder xy2 und 0,3,4 wird nicht verwendet. Die andere Partei beschränkt sich auf 72 Möglichkeiten, sodass Sie nicht wachsam sein können Gehen Sie bei 567

#Es ist ein Spieleranruf
567
#0EAT//1BITE
#Es ist ein Anruf von com
#[0, 6, 7]
#2EAT//0BITE
#Noch 8 Wege

Spielen Sie nicht mit den verbleibenden 8 Möglichkeiten herum () Um die Informationen zusammenzufassen 1,2 5,6,7 8,9 Von jedem wird einer verwendet ... Gehen Sie um 618 zum Hund.

#Es ist ein Spieleranruf
618
#2EAT//0BITE
#Es ist ein Anruf von com
#[0, 4, 1]
#1EAT//1BITE
#1 Weg nach links

Es scheint, dass du den Gegner in der nächsten Runde treffen kannst () Ich mache aber auch Kurven. Wenn 6 und 8 EAT sind, tritt ein Widerspruch auf, sodass EAT von 1 bestätigt wird. Mit anderen Worten, es gibt zwei Möglichkeiten, 619 oder 718 (wahrscheinlich) Fahren Sie bis 718

#Es ist ein Spieleranruf
718
#3EAT//0BITE
#Spieler gewinnt

Oh, ich habe gewonnen. (Ich kann gewinnen)

Nun, ich bin froh, dass es so funktioniert, wie es ist> <

Schließlich

Es war das erste Mal, dass KI erstellt wurde (Ist es in Ordnung, KI zu sagen? Ich verstehe die technischen Begriffe nicht gut), aber es war ziemlich gut. Ich bin damit zufrieden, weil ich es 6 Mal erraten kann. Ich dachte, wenn ich auch nur einen Monat lang mein Bestes geben würde, könnte ich etwas dagegen tun.

Aufgabe

Der zweite Anruf ist jedoch trotzdem langsam. Wenn der erste Zug 0-1 ist, gibt es also 252 Kandidaten Wenn Sie über Ihren nächsten Schritt nachdenken, führen Sie intern 720 * 10 * 252 = 1814400 Berechnungen durch. Von nun an ist es mein Ziel, viele Algorithmen zu studieren und den Rechenaufwand zu reduzieren. Bei dieser Rate wird eine 4-stellige KI schwierig sein ...

Zusammenfassung

Vielen Dank für das bisherige Surfen. Ich war zuversichtlich, dass ich das Programm bis zum Ende ausführen konnte, obwohl es nicht verbunden war. Ich würde jedoch gerne stärker im Programm werden, daher würde ich es begrüßen, wenn Sie mir einen Kommentar mit der Liebe zur Führung und Ermutigung geben könnten.

Vielen Dank für Ihre Beziehung! !!

Recommended Posts

[Letzte Geschichte] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 2] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 0] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 1] Anfänger haben Numeron AI mit Python ausprobiert
3. 3. KI-Programmierung mit Python
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Erstelle Puyopuyo AI mit Python
Stolpern Geschichte mit Python-Array
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
[IPdb] Anfänger in der Webentwicklung haben versucht, das Debuggen mit Python zusammenzufassen
Ich habe versucht, WebScraping mit Python.
[Kleine Geschichte] Holen Sie sich mit Python einen Zeitstempel
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Python-Anfänger versuchten es herauszufinden
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
INSERT in MySQL mit Python [Für Anfänger]
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
[Python] Bilder mit OpenCV lesen (für Anfänger)
WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger
Wie Python-Anfänger mit Progete beginnen
Aufbau einer KI / maschinellen Lernumgebung mit Python
Ich überarbeitete "Ich habe versucht, Othello AI zu machen, als Programmieranfänger Python studierten"
[Für Anfänger] Versuchen Sie Web Scraping mit Python
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Kausales Denken und kausale Suche von Python (für Anfänger)
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
[Python3] Eine Geschichte, die bei der Zeitzonenkonvertierung steckt
Python-Anfänger haben versucht, einen Energy-Drink zu codieren
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~
Ich habe Funktionssynthese und Curry mit Python versucht
Eine Geschichte über den Umgang mit Binärdaten in Python
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
Python-Anfänger süchtig nach Django
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
~ Tipps für Python-Anfänger mit Liebe von Pythonista ② ~
[Einführung für Anfänger] Umgang mit MySQL mit Python
Grundlegende Geschichte der Vererbung in Python (für Anfänger)
FizzBuzz in Python3
Scraping mit Python