0e 1er 2ème 3e Histoire finale
Maintenant que nous avons défini les fonctions principales requises, nous allons les implémenter lentement!
Pour le moment, voici un résumé des fonctions créées jusqu'à présent et de la détermination du nombre de joueurs.
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("Entrez votre numéro à 3 chiffres préféré avec tous les numéros différents")
X=input()
if len(X) != 3:
print("Veuillez utiliser 3 chiffres")
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("Veuillez saisir les trois chiffres différemment")
else:
player=[int(X[0]) , int(X[1]) , int(X[2])]
break
else:
print("Veuillez utiliser un «numéro» à 3 chiffres")
Continuons à écrire le programme.
Le tour est Je vais le gérer avec une variable appelée teban teban = 1: premier tour teban = -1: Ce sera le deuxième tour. Lorsque le tour de chaque tour est terminé, vous pouvez le gérer en le définissant comme turn * -1.
Donc, la suite du programme ci-dessus est la suivante
for i in range(10*9):
if teban==1:
Traitement au premier tour
Une fois terminé, teban*-1
else:
Traitement post-tour
Une fois terminé, teban*-1
Par conséquent, le reste est complété en créant le traitement du premier tour (joueur) et le traitement du deuxième tour (com).
Écrivons concrètement. Mais c'est facile "Entrez le numéro que vous souhaitez appeler ()" Et Afficher "EAT, BITE" C'est tout. Écrivons un peu
print("C'est un appel de joueur")
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("joueur gagne")
exit()
teban*=(-1)
C'est bon. Allons après le problème
La grande différence est que le numéro à appeler n'est pas input (). Cependant, comme j'ai défini une fonction qui répertorie les numéros à appeler la dernière fois, il est correct de choisir les numéros Mais comme vous le savez tous, python est lent. Si vous cochez 720 pièces, vous devrez attendre longtemps. Donc je vais juste dire les nombres au hasard pour le premier coup! (Parce que le premier mouvement ne change pas quoi que vous disiez)
Sur cette base, le traitement du deuxième tour est
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("C'est un appel de 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 gagner")
exit()
else:
print("restant"+str(len(KOUHO))+"rue")
C'est tout ce qu'on peut en dire! !!
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("Entrez votre numéro à 3 chiffres préféré avec tous les numéros différents")
X=input()
if len(X) != 3:
print("Veuillez utiliser 3 chiffres")
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("Veuillez saisir les trois chiffres différemment")
else:
player=[int(X[0]) , int(X[1]) , int(X[2])]
break
else:
print("Veuillez utiliser un «numéro» à 3 chiffres")
teban=1
KOUHO=ALL
count=0
for i in range(10**9):
if teban==1:
print("C'est un appel de joueur")
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("joueur gagne")
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("C'est un appel de 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 gagner")
exit()
else:
print("restant"+str(len(KOUHO))+"rue")
teban*=(-1)
Jouons un peu
#Entrez votre numéro à 3 chiffres préféré avec tous les numéros différents
017
Et c'est au tour de l'appel
#C'est un appel de joueur
012
#1EAT//0BITE
#C'est un appel de com
#[2, 7, 3]
#0EAT//1BITE
#252 rues restantes
Je suis 1-0, donc ça devrait être supérieur à com. Aller au 034
#C'est un appel de joueur
034
#0EAT//0BITE
#C'est un appel de com
#[5, 3, 7]
#1EAT//0BITE
#72 voies à gauche
034 est 0-0. En d'autres termes, c'est x1y ou xy2 et 0,3,4 n'est pas utilisé. L'autre partie se réduit à 72 façons, vous ne pouvez donc pas être alerte Aller au 567
#C'est un appel de joueur
567
#0EAT//1BITE
#C'est un appel de com
#[0, 6, 7]
#2EAT//0BITE
#8 voies à gauche
Ne jouez pas avec les 8 méthodes restantes () Pour résumer les informations 1,2 5,6,7 8,9 Un est utilisé de chaque ... Allez voir le chien au 618.
#C'est un appel de joueur
618
#2EAT//0BITE
#C'est un appel de com
#[0, 4, 1]
#1EAT//1BITE
#1 voie à gauche
Il semble que vous puissiez frapper l'adversaire au prochain tour () Cependant, je suis aussi dans les virages. Si 6 et 8 sont EAT, une contradiction se produira, donc EAT de 1 est confirmé. En d'autres termes, il y a deux choix, 619 ou 718 (probablement) Passer par 718
#C'est un appel de joueur
718
#3EAT//0BITE
#joueur gagne
Oh, j'ai gagné. (Je peux gagner)
Eh bien, je suis heureux que cela fonctionne tel quel> <
C'était la première fois que je créais de l'IA (est-ce correct de dire IA? Je ne comprends pas bien les termes techniques), mais c'était plutôt bien. J'en suis satisfait car je peux le deviner 6 fois. Je pensais que si je faisais de mon mieux, même pendant un mois d'histoire de programme, je serais capable de faire quelque chose à ce sujet.
Cependant, le deuxième appel est de toute façon lent. Si le premier coup est 0-1, il y a 252 candidats, donc Lorsque vous pensez à votre prochain mouvement, vous effectuez 720 * 10 * 252 = 1814400 calculs en interne. Désormais, mon objectif est d'étudier de nombreux algorithmes et de réduire la quantité de calcul. À ce rythme, l'IA à 4 chiffres sera difficile ...
Merci d'avoir parcouru jusqu'à présent. J'étais convaincu que je pouvais exécuter le programme jusqu'à la fin même s'il n'était pas connecté. Cependant, j'aimerais devenir plus fort dans le programme, alors j'apprécierais que vous me donniez un commentaire avec l'amour des conseils et des encouragements.
Merci pour votre relation! !!
Recommended Posts