2010-08-21 11 views
16

Necesito una cadena que consiste en la repetición de un caracter en particular. En la consola de Python, si escribo:Multiplicando una cadena con un número en python

n = '0'*8 

entonces n se le asigna una cadena que consta de 8 ceros, que es lo que espero.

Pero, si tengo la misma en un programa Python (.py archivo), entonces el programa aborta con un error que dice
can't multiply sequence by non-int of type 'str'

Cualquier forma de arreglar esto?

+1

bien el mensaje de error significa que ambos argumentos de multiplicación se interpretan como una cadena. 8 no se convierte en una cadena simplemente al ponerlo en un archivo; debe * haber * otra cosa pasando ... ¿desea mostrar el archivo? – Nicolas78

+0

el mensaje de error mencionado viene cuando lo puse como n = '0' * '8' pls verifique su expresión –

+0

La forma en que funcionan los compiladores e intérpretes significa que algunos mensajes de error aparecerán en ubicaciones extrañas, como dos líneas después o al final de la linea Es mejor si tenemos algún contexto en su programa, porque el problema podría ser el alcance o algo similar. ** tl; dr ** Danos más líneas de código para trabajar con – Lightfire228

Respuesta

-1

Esa línea de código funciona bien desde un .py ejecutado aquí, utilizando python 2.6.5, debe ejecutar el script con una versión diferente de python.

+1

Esto no tiene nada que ver con la versión de Python; es un error en su programa, como dice delnan. –

+1

En realidad, hubo un error en la información de la pregunta en primer lugar, de acuerdo con la pregunta que estaba usando '0' * 8 que es válida, suponiendo que la información era correcta, probablemente una respuesta fue que estaba usando un intérprete de Python 'no válido' . –

30

Obtiene ese error porque, en su programa, el 8 también es una cadena.

>>> '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

esta es la respuesta correcta – aaa90210

8

Podría apostar que está utilizando raw_input() para leer el valor que multiplica la cadena. Debería usar input() para leer el valor como un entero, no como una cadena.

+0

No me di cuenta esto - ¡gracias !. Para otros noobs, es para 'python2' ([ver esto] (https://stackoverflow.com/questions/4915361/whats-the-difference-between-raw-input-and-input-in-python3-x)) . – Hendy

1

El motivo por el que aparece el mensaje de error es que está tratando de usar el operador de multiplicar en valores no enteros.

Lo más sencillo que hará el trabajo es la siguiente:

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

O hacer la función para la que:

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

tonto, su primer ejemplo funciona bien. – aaa90210

1

Si desea que el resultado sea una lista de cadenas en lugar de una uno solo, siempre se puede utilizar esto:

list(('0',) * 8) 

Y se puede obtener:

['0', '0', '0', '0', '0', '0', '0', '0'] 
Cuestiones relacionadas