0th 1. 2. 3. Letzte Geschichte
Nachdem wir die erforderlichen Hauptfunktionen definiert haben, werden wir sie langsam implementieren!
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.
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.
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
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! !!
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
#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> <
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.
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 ...
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