Problème interactive input
Résolu/Fermé7 réponses
22 déc. 2022 à 17:17
Bonjour,
Tu veux dire que tu as:
d'un coté un fichier qui contient le code
et d'un autre, tu tapes ta commande dans la console ??
Modifié le 22 déc. 2022 à 17:27
Bonjour,
Dans les dernières versions de Python c'est
print(combinlisterep([1,2,3],2))
la fonction n'est pas définie
p = combinliste(seq2, k)
xrange() est-ce une fonction standard ?
22 déc. 2022 à 17:45
xrange retourne un générateur, et donc occupe moins de place en mémoire que range
Merci de vos réponses, j'utilise édupython j'écris le script en haut et je tappe
print combinlisterep([1,2,3],2)
dans la console.
J'ai donc essayé aussi avec
print(combinlisterep([1,2,3],2))
mais de nouveau un message d'erreur s'affiche:
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Users\Jolan\Desktop\Lycée\Python\combinatoire.py", line 7, in combinlisterep
for i in xrange(0,k):
NameError: name 'xrange' is not defined
et je ne comprends pas le fait que la fonction n'est pas définie j'ai bien recopier ce que vous avez écrit.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionCe code a l'air simplement de générer des combinaisons de X valeurs parmi une séquence, code fait en 2010, il existe le module itertools fournissant un tas de fonctions bien utiles.
https://docs.python.org/fr/3/library/itertools.html#itertools.combinations
voici à quoi ressemble le code maintenant
def combinlisterep(seq, k):
seq2 = []
for elem in seq:
if elem not in seq2:
for i in range(0,k):
seq2.append(elem)
p = combinliste(seq2, k)
p2 = []
for x in p:
if x not in p2:
p2.append(x)
return(p2)
j'ai donc mit des paranthèses et enlevé le x. Dois-je aussi enlever le x de
for x in p:
if x not in p2:
p2.append(x)
et mettre des i ?
le meme message d'erreur s'affiche que précédemment.
Non, il ne faut pas modifier les noms de variables, aucune nécessité.
Cette fonction est correcte et devrait retourner le résultat escompté.
Je suppose que tu as extrait cette fonction de https://python.jpvweb.com/python/mesrecettespython/doku.php?id=combinaisons
def combinlisterep(seq, k): seq2 = [] for elem in seq: if elem not in seq2: for i in range(0,k): seq2.append(elem) p = combinliste(seq2, k) p2 = [] for x in p: if x not in p2: p2.append(x) return(p2) def combinliste(seq, k): p = [] i, imax = 0, 2**len(seq)-1 while i<=imax: s = [] j, jmax = 0, len(seq)-1 while j<=jmax: if (i>>j)&1==1: s.append(seq[j]) j += 1 if len(s)==k: p.append(s) i += 1 return p print(combinlisterep('12345', 4))
Mais c'est déjà très lent pour de si simples combinaisons.
Utilise plutôt la fonction du module itertools faisant exactement la même chose.
import itertools print(tuple(itertools.combinations_with_replacement('12345', 4)))