2009-02-25 21 views
9

Quale sarebbe il modo migliore per incrementare un valore contenente gli zeri iniziali? Ad esempio, mi piacerebbe incrementare "00000001". Tuttavia, è necessario notare che il numero di zeri iniziali non supererà 30. Quindi potrebbero esserci casi come "0000012", "00000000000000099" o "000000000000045".Come incrementare un valore con zeri iniziali?

Posso pensare a un paio di modi, ma voglio vedere se qualcuno si presenta con qualcosa di lucido.

risposta

18

Usa il tanto trascurato str.zfill():

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

Soluzione molto più semplice. – Huuuze

+0

wow. Penso che questo fine settimana leggerò tre volte la libreria Python. Non posso credere di aver perso questo. –

1

Determinare la lunghezza, convertirla in un numero intero, incrementarla, quindi convertirla in una stringa con zeri iniziali in modo che abbia la stessa lunghezza di prima.

8
int('00000001') + 1 

se si desidera che gli zeri iniziali schiena:

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

Questa soluzione è buona, ma non flessibile. La soluzione di MarkusQ cresce con il numero variabile di zeri. – Huuuze

2

Presumibilmente, è specificamente significa un intero rappresentato come una stringa con zeri?

Se questo è il caso, lo farei così:

>>> 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 Per x = "0000034" si dispiega in questo modo:

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

Questo fa la stessa cosa, senza la buffa formattazione annidata: "% 0 * i"% (len (x), (int (x) +1)) – recursive

+0

Sì, ma mi sentivo stupido (ho appena finito di leggere sul MIA IOCC e ...). Ho quasi lanciato qualcosa come len ('+ *' + '* +' * int (x))/2 invece di int (x) +1, ma mi sono beccato all'ultimo minuto. – MarkusQ

1

Memorizzare il numero come numero intero. Quando vuoi stamparlo, aggiungi gli zeri iniziali. In questo modo puoi facilmente fare matematica senza conversioni e semplifica il processo di pensiero.

-1

"il mio codice è in 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; } }

Problemi correlati