Fonction de tri

Fermé
enam07 Messages postés 5 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 avril 2015 - 11 avril 2015 à 21:16
 Utilisateur anonyme - 28 avril 2015 à 15:57
bonjour ,

je fais appel à vous car j'essaie de programmer une fonction donne() qui renvoie un quadruplet aléatoire de donnes de treize cartes.

Ces donnes seront représentées par des tableaux de 13 cartes triées. Pour trier les cartes on adaptera

la fonction tri_selection(T) et on utilisera la fonction superieure (carte1,carte2):

voila ce que j'ai essayé :

T2=['pique','coeur','carreau','trèfle']

T1=['as','roi','dame','valet','10','9','8','7','6','5','4','3','2']

from random import randint

def indice_mini(T,i):

n=len(T)

assert i!=n

m=i

for k in range(i+1,n):

if T[k]>T[m] :

m=k

if m!=i :

T[i],T[m]=T[m],T[i]

return m

def tri_selection(T):

for j in range(0,len(T)-1):

indice_mini(T,j)

return T

def init_jeu():

resultat = []

for card in T1:

for fig in T2:

resultat.append(card + ' ' + fig)

return resultat

def superieur(carte1,carte2):

T=init_jeu()

for i in range(len(T)):

if T[i]==carte1:

return True

if T[i]==carte2:

return False

def donne():

i=0

T=init_jeu()

c1=[]

c2=[]

c3=[]

c4=[]

while i<14 :

c1.append(T[randint(0,51)])

c2.append(T[randint(0,51)])

c3.append(T[randint(0,51)])

c4.append(T[randint(0,51)])

i=i+1

tri_selection(C1)

tri_selection(c2)

tri_selection(c3)

tri_selection(c4)

return c1

def indice_minie(T,i):

mi=T[i]

m=i

for j in range(i,len(T)):

if mi>T[i]:

mi=T[i]

m=j

return m

merci d'avance .
A voir également:

1 réponse

Utilisateur anonyme
28 avril 2015 à 15:57
Merci de prendre l'habitude d'insérer ton code Python bien indenté. Pour cela, au dessus de l'espace ou tu tapes ton texte sur le forum, clique sur le menu déroulant <> et choisi "python". Ensuite, colle ton code entre les deux bornes python créées dans ton message.

J'ai fait le boulot à ta place et voici ce que ça donne :
T2=['pique','coeur','carreau','trèfle'] 
T1=['as','roi','dame','valet','10','9','8','7','6','5','4','3','2'] 
from random import randint

def indice_mini(T,i): 
    n=len(T) 
    assert i!=n 
    m=i 
    for k in range(i+1,n): 
        if T[k]>T[m] : 
            m=k 
        if m!=i : 
            T[i],T[m]=T[m],T[i] 
    return m

def tri_selection(T): 
    for j in range(0,len(T)-1):
        indice_mini(T,j) 
    return T 

def init_jeu(): 
    resultat = [] 
    for card in T1: 
        for fig in T2: 
            resultat.append(card + ' ' + fig) 
    return resultat 

def superieur(carte1,carte2): 
    T=init_jeu() 
    for i in range(len(T)): 
        if T[i]==carte1: 
            return True 
        if T[i]==carte2: 
            return False 

def donne(): 
    i=0 
    T=init_jeu() 
    c1=[] 
    c2=[] 
    c3=[] 
    c4=[] 
    while i<14 : 
        c1.append(T[randint(0,51)]) 
        c2.append(T[randint(0,51)]) 
        c3.append(T[randint(0,51)]) 
        c4.append(T[randint(0,51)]) 
        i=i+1 
    tri_selection(C1) 
    tri_selection(c2) 
    tri_selection(c3) 
    tri_selection(c4) 
    return c1 

def indice_minie(T,i): 
    mi=T[i] 
    m=i 
    for j in range(i,len(T)): 
        if mi>T[i]: 
            mi=T[i] 
            m=j 
    return m 


Déjà, il y a un petit problème de logique. Dans ta fonction donne(), tu choisi 5 cartes c1,c2,c3,c4,c5 comprise dans le jeu. Mais tu n'a pas fait attention que, dans ces 5 cartes, il pouvait y en avoir plusieurs identiques (d'après ton code). Sauf s'il s'agit d'un tirage simultané avec remise, il y a une erreur.
0