Tu as raison voici le code corrigé grace à ton dernier message
from itertools import combinations_with_replacement
n = int(input("Entrez la valeur de n : "))
k = int(input("Entrez la valeur de k : "))
elements = list(range(1, n+1))
partie = [int(input(f"Entrez l'element {i+1} de la partie : ")) for i in range(k)]
comb = sorted(combinations_with_replacement(elements, k))
index = comb.index(tuple(partie)) + 1 if tuple(partie) in comb else None
print("Le numéro de la partie est :", index) if index else print("La partie doit contenir exactement k éléments")
Entrez la valeur de n : 5
Entrez la valeur de k : 3
Entrez l'element 1 de la partie : 2
Entrez l'element 2 de la partie : 2
Entrez l'element 3 de la partie : 3
Le numéro de la partie est : 17
Je ne sais pas si tu as réussi la question avec ta consigne.
Avant de prendre mon romain policier et oublier les maths, je vais appliquer ce que j'ai appris pour donner le rang d'une chaine de caractère dans l'alphabet selon l'ordre lexicographique; je veux savoir le rang par un code de gebrane et gabuzomeu
Pour varier les plaisirs, un programme python qui calcule le rang d'une combinaison avec répétition où la récursion est remplacée par une boucle :
def rangrep(liste,p) :
n = p ; k = len(liste) ; rang = 1
L=sorted(liste)
while k>0 :
tete = L.pop(0)
rang += math.comb(n-1+k,k)-math.comb(n+k-tete,k)
k -= 1 ; n -= tete-1
L = [i-tete+1 for i in L]
return rang
On peut regarder ce que ça donne pour un gros exemple.
import random as rd
L = [rd.randrange(1,101) for _ in range(50)]
print(L)
Réponses
Je suis paumé
Tes questions sont toujours intéressantes, impressionnantes mais savonneuses.
À une prochaine rencontre.