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
- Problème interactive input
- Input signal not found ✓ - Forum Matériel & Système
- Input not supported - Forum Ecran
- No video input - Forum Windows
- [ NO VIDEO INPUT ENTER SLEEP MODE] - Forum PC portable
- Input ou output ✓ - Forum Audio
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 ?
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)))