2009-02-25 14 views
9

¿Cuál sería la mejor manera de incrementar un valor que contiene ceros a la izquierda? Por ejemplo, me gustaría incrementar "00000001". Sin embargo, debe tenerse en cuenta que el número de ceros a la izquierda no excederá de 30. Por lo tanto, puede haber casos como "0000012", "00000000000000099" o "000000000000045".¿Cómo incrementar un valor con ceros a la izquierda?

Puedo pensar en un par de formas, pero quiero ver si a alguien se le ocurre algo astuto.

Respuesta

18

Usar la tan alto str.zfill():

str(int(x) + 1).zfill(len(x)) 
+1

Solución mucho más simple. – Huuuze

+0

wow. Creo que este fin de semana voy a leer la referencia de la biblioteca de Python tres veces. No puedo creer que me haya perdido esto. –

1

Determine la longitud, conviértala en un número entero, increméntela y luego vuélvala a convertir en una cadena con ceros a la izquierda para que tenga la misma longitud que antes.

8
int('00000001') + 1 

si desea que los ceros a la izquierda de espalda:

"%08g" % (int('000000001') + 1) 
+0

Esta solución es buena, pero no flexible. La solución de MarkusQ crece con la cantidad variable de ceros. – Huuuze

2

Es de suponer, que significa específicamente un número entero representado como una cadena con ceros a la izquierda?

Si ese es el caso, lo haría así:

>>> a 
'00000000000000099' 
>>> l = len(a) 
>>> b = int(a)+1 
>>> b 
100 
>>> ("%0"+"%dd" % l) % b 
'00000000000000100' 
8

"%% 0% ii" % len (x)% (int (x) 1)

- MarkusQ

PS Para x = "0000034" se desarrolla de la siguiente manera:

"%%0%ii" % len("0000034") % (int("0000034")+1) 
"%%0%ii" % 7 % (34+1) 
"%07i" % 35 
"0000035" 
+0

Esto hace lo mismo, sin el formato ridículo anidado: "% 0 * i"% (len (x), (int (x) +1)) – recursive

+0

Sí, pero me sentía bobo (acabo de leer sobre el MIA IOCC y ...). Casi lancé algo como len ('+ *' + '* +' * int (x))/2 en lugar de int (x) +1, pero me acobardé en el último minuto. – MarkusQ

1

Almacene su número como un número entero. Cuando desee imprimirlo, agregue los ceros a la izquierda. De esta forma, puede hacer matemáticamente sin conversiones y simplifica el proceso de pensamiento.

-1

"mi código está en C" int a[6]={0,0,0,0,0,0},i=5,k,p; while(a[0]!=10) { do { for(p=0;p<=i;p++) printf("%d",a[p]); printf("\n"); delay(100); a[i]++; }while(a[i]!=10); for(k=0;k<=i;k++) if(a[i-k]==10) { a[i-(k+1)]++; a[i-k]=0; } }

Cuestiones relacionadas