2010-08-21 4 views
16

J'ai besoin d'une chaîne constituée d'une répétition d'un caractère particulier. Sur la console Python, si je tape:Multiplication d'une chaîne avec un nombre en python

n = '0'*8 

alors n obtient une chaîne constituée affecté de 8 zéros, ce qui est ce que je pense.

Mais, si j'ai le même dans un programme Python (fichier .py), le programme avorte avec une erreur en disant
can't multiply sequence by non-int of type 'str'

Une manière de résoudre ce problème?

+1

Bien le message d'erreur signifie que vous êtes tous deux les arguments de multiplication sont interprétés comme une chaîne. 8 ne devient pas une chaîne juste en la mettant dans un fichier - il doit y avoir quelque chose d'autre ... en train de montrer le fichier? – Nicolas78

+0

le message d'erreur mentionné vient quand je le mets comme n = '0' * '8' pls vérifie votre expression –

+0

La façon dont les compilateurs et les interprètes fonctionnent signifie que certains messages d'erreur apparaîtront dans des endroits étranges, comme deux lignes après ou à la fin de la ligne. Il est préférable que nous ayons un contexte dans votre programme, car le problème pourrait être de déterminer la portée ou quelque chose de similaire. ** tl; dr ** Donnez-nous plus de lignes de code pour travailler avec – Lightfire228

Répondre

-1

Cette ligne de code fonctionne correctement à partir d'un .py exécuté ici, en utilisant python 2.6.5, vous devez exécuter le script avec une version python différente.

+1

Cela n'a rien à voir avec la version python - c'est un bug dans son programme, comme le dit delnan. –

+1

En fait, il y avait une erreur sur l'information de la question en premier lieu, selon la question qu'il utilisait '0' * 8 qui est valide, en supposant que l'information était correcte une réponse probable était qu'il utilisait un interprète python 'invalide' . –

30

Vous obtenez cette erreur car - dans votre programme - le 8 est aussi une chaîne.

>>> '0'*8 
'00000000' 
>>> '0'*'8' # note the ' around 8 
(I spare you the traceback) 
TypeError: can't multiply sequence by non-int of type 'str' 
+0

c'est la bonne réponse – aaa90210

8

Je pourrais vous parier utilisez raw_input() pour lire la valeur qui multiplie la chaîne. Vous devez utiliser input() à la place pour lire la valeur sous la forme d'un entier et non d'une chaîne.

+0

N'a pas réalisé cela - merci !. Pour les autres noobs, c'est pour 'python2' ([voir ceci] (https://stackoverflow.com/questions/4915361/whats-the-difference-between-raw-input-and-input-in-python3-x)) . – Hendy

1

La raison pour laquelle vous obtenez le message d'erreur est que vous essayez d'utiliser l'opérateur de multiplication sur une valeur non entière.

La chose la plus simple qui va faire le travail est la suivante:

>>> n = ''.join(['0' for s in xrange(8)]) 
>>> n 
'00000000' 
>>> 

Ou la fonction pour que:

>>> def multiply_anything(sth, size): 
...  return ''.join(["%s" % sth for s in xrange(size)]) 
... 
>>> multiply_anything(0,8) 
'00000000' 
>>> 
+0

imbécile, son premier exemple fonctionne très bien. – aaa90210

1

Si vous voulez que le résultat soit une liste de chaînes au lieu d'un une seule, vous pouvez toujours utiliser ceci:

list(('0',) * 8) 

Et vous pouvez obtenir:

['0', '0', '0', '0', '0', '0', '0', '0'] 
Questions connexes