Problème interactive input
Résoluloulou -
Bonjour,
Je débute sur python et j'ai trouvé un programme sur internet permettant de faire ce que je veux, le voici:
def combinlisterep(seq, k):
"""Renvoie la liste des combinaisons avec répétition des objets de seq pris k à k"""
# ajoute chaque objet de seq pour quils apparaissent chacun k fois
seq2 = []
for elem in seq:
if elem not in seq2:
for i in xrange(0,k):
seq2.append(elem)
# calcule la liste "normale" des combinaisons
p = combinliste(seq2, k)
# élimine de cette liste les éléments identiques (comme [1,2] et [1,2])
p2 = []
for x in p:
if x not in p2:
p2.append(x)
# et renvoie le résultat
return p2
dans la console je marque :
print combinlisterep([1,2,3],2)
et il y a ecrit :
File "<interactive input>", line 1
print combinlisterep([1,2,3],2)
^
SyntaxError: invalid syntax
pouvait vous m'aider à résoudre ce problème? Merci
Windows / Chrome 108.0.0.0
7 réponses
-
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 ??
-
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 ?
-
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 definedet 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 question -
Ce 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)))
-
-