Yo, on a un code source pour calculer les probas pour le poker, cependant il y'a quelques erreurs dans le code (que l'on a prit sur code sources) pourriez vous nous indiquez lesquelles, et comment y remedier ? (on utilise python 2.7.3)
Merci d'avance !
PS : on a modifier 2-3 petits trucs de code
from random import *
import time
tps1=time.clock()
def hand(cartes):
#The aim of this function is to determine the best 5 card hand
#out of a set of 7 cards.
#Pair
main = cartes[:]
sortie = 0
exit = 0
a = 10000
for i in range(7):
if (int(cartes[i]/100)==2):
a += 10
elif (int(cartes[i]/100)==3):
a += 100
elif (int(cartes[i]/100)==4):
a += 1000
else:
a += 1
# print a
a = str(a)
if (a[1]>='5' or a[2]>='5' or a[3]>='5' or a[4]>='5'):
# The hand present at least a flush :
if (a[1]>='5'):
for i in range(7):
if (int(cartes[i]/100)!=4):
main.remove(cartes[i])
if (len(main)==5):
break
elif (a[2]>='5'):
for i in range(7):
if (int(cartes[i]/100)!=3):
main.remove(cartes[i])
if (len(main)==5):
break
elif (a[3]>='5'):
for i in range(7):
if (int(cartes[i]/100)!=2):
main.remove(cartes[i])
if (len(main)==5):
break
elif (a[4]>='5'):
for i in range(7):
if (int(cartes[i]/100)!=1):
main.remove(cartes[i])
if (len(main)==5):
break
for i in range(len(main)):
main[i]=main[i]%100
main.sort()
main.reverse()
main2 = list(set(main))
main2.reverse()
if (len(main2)>=5):
for i in range(len(main2)-4):
if (main2[i]==main2[i+4]+4):
# print 'suited flush'
sortie = (main2[i])*10**20
exit = 1
if (exit==0):
# print main
if (main2[0]==13 and main2[-1]==1):
if (main2[-4]==main2[-1]+3):
# print 'little suite'
sortie = (main2[-4])*10**12
exit=1
if (exit==0):
for i in range(5):
# print 'flush'
sortie += (main[i])*10**(2*(4-i))
sortie = sortie*10**6
else:
# 2oaK // 3oaK // suite // Full // 4oaK
for i in range(len(main)):
main[i]=main[i]%100
main.sort()
main.reverse()
main2 = list(set(main))
main2.reverse()
if (len(main2)>=5):
for i in range(len(main2)-4):
if (main2[i]==main2[i+4]+4):
# print 'suited'
sortie = (main2[i])*10**12
exit=1
if (exit==0):
# print main
if (main2[0]==13 and main2[-1]==1):
if (main2[-4]==main2[-1]+3):
# print 'little suite'
sortie = (main2[-4])*10**12
exit=1
for i in range(len(main)-3):
if (exit==0):
if (main[i]==main[i+3]):
# print '4 of a kind'
sortie = main[i]
main.remove(main[i])
main.remove(main[i])
main.remove(main[i])
main.remove(main[i])
sortie = sortie*10**18 + main[0]
exit=1
for i in range(len(main)-2):
if (exit==0):
if (main[i]==main[i+2]):
sortie = main[i]
main.remove(main[i])
main.remove(main[i])
main.remove(main[i])
for j in range(len(main)-1):
if (main[j]==main[j+1]):
# print 'full'
sortie = sortie*10**16 + main[j]
exit=1
if (exit==0):
# print '3 of a kind'
sortie = sortie*10**10+main[0]*100+main[1]
exit=1
for i in range(len(main)-1):
if (exit==0):
if (main[i]==main[i+1]):
sortie = main[i]
main.remove(main[i])
main.remove(main[i])
for j in range(len(main)-1):
if (main[j]==main[j+1]):
# print '2 pairs'
sortie = sortie*10**8 + main[j]*10**6
main.remove(main[j])
main.remove(main[j])
sortie += main[0]
exit=1
break
if (exit==0):
# print '2 of a kind'
sortie = sortie*10**6
sortie += (main[0])*10**4+(main[1])*100+main[2]
exit=1
if (exit==0):
# print 'nothing'
for i in range(5):
sortie += main[i]
return sortie
Clubs = ['C2','C3','C4','C5','C6','C7','C8','C9','CT','CJ','CQ','CK','CA']
Diamonds = ['D2','D3','D4','D5','D6','D7','D8','D9','DT','DJ','DQ','DK','DA']
Hearts = ['H2','H3','H4','H5','H6','H7','H8','H9','HT','HJ','HQ','HK','HA']
Spades = ['S2','S3','S4','S5','S6','S7','S8','S9','ST','SJ','SQ','SK','SA']
Jeu = Clubs + Diamonds + Hearts + Spades
nplayers = input('Number of players ?')
# nplayers = 9
card1=raw_input('\n Please enter your first card :')
card2=raw_input('Please enter your second card :')
myhand=[[card1,card2]]
# myhand = [['CA','SA']]
N = 5000
gain = zeros(nplayers)
for iter in range(N):
hands=[[0,0]]
# print iter
# Jeu_1 : cards that might stay in the game
# Jeu_2 : index of theses cards
Jeu_1 = Jeu[:]
Jeu_2 = range(52)
for i in range(13):
for j in range(4):
Jeu_2[j*13+i] = 100*(j+1)+(i+1)
#
# print hands
# translation into card index :
for i in range(2):
if myhand[0][i][0]=='C':
n = Clubs.index(myhand[0][i])
carte = 100+(n+1)
elif myhand[0][i][0]=='D':
n = Diamonds.index(myhand[0][i])
carte = 200+(n+1)
elif myhand[0][i][0]=='H':
n = Hearts.index(myhand[0][i])
carte = 300+(n+1)
elif myhand[0][i][0]=='S':
n = Spades.index(myhand[0][i])
carte = 400+(n+1)
hands[0][i] = carte
#
Jeu_1.remove(Jeu_1[Jeu_2.index(hands[0][0])])
Jeu_2.remove(hands[0][0])
Jeu_1.remove(Jeu_1[Jeu_2.index(hands[0][1])])
Jeu_2.remove(hands[0][1])
#
#
# first round :
#--------------
for n in range(nplayers-1):
cards = [0,0]
for i in range(2):
rd = rand(1)
tirage=rd*(len(Jeu_2)-1)
# print n,i,int(tirage)
cards[i]=Jeu_2[int(tirage)]
Jeu_1.remove(Jeu_1[Jeu_2.index(cards[i])])
Jeu_2.remove(cards[i])
hands += [cards]
#
cards=[]
for i in range(5):
rd = rand(1)
tirage=rd*(len(Jeu_2)-1)
cards += [Jeu_2[int(tirage)]]
Jeu_1.remove(Jeu_1[Jeu_2.index(cards[i])])
Jeu_2.remove(cards[i])
#
scores=[]
for n in range(nplayers):
cartes = hands[n] + cards
# print cartes
scores += [hand(cartes)]
# print scores
gain[scores.index(max(scores))] += 1
gain = gain/float(N)
print''
print '\tRESULTS with hand :',myhand[0][0],myhand[0][1]
print '*******************************************'
for i in range(len(gain)):
if (i==0):
print 'you','\t\t-->\t',gain[i]*100,'\t%'
else:
print 'player',i+1,'\t-->\t',gain[i]*100,'\t%'
print '*******************************************'
print 'error : ',100*(max(gain[1:])-min(gain[1:])),'%'
tps2=time.clock()
print 'execution time :',tps2-tps1,'s'
Partager