2009-02-25 15 views
9

Jaki byłby najlepszy sposób, aby zwiększyć wartość, która zawiera zer? Na przykład chciałbym zwiększyć "00000001". Jednak należy zauważyć, że liczba zer nie przekroczy 30. Więc nie może być przypadki, takie jak „0000012”, „00000000000000099” lub „000000000000045”.Jak zwiększyć wartość z wiodącymi zerami?

Mogę wymyślić kilka sposobów, ale chcę zobaczyć, czy ktoś wymyśli coś zręcznego.

Odpowiedz

18

Użyj znacznie pomijane str.zfill():

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

Znacznie prostsze rozwiązanie. – Huuuze

+0

wow. Myślę, że w ten weekend będę czytał odniesienia do biblioteki Python trzy razy. Nie mogę uwierzyć, że to przegapiłem. –

1

Określ długość, przekonwertuj ją na liczbę całkowitą, zwiększ ją, a następnie przekonwertuj z powrotem na ciąg z zerami wiodącymi, aby miał on taką samą długość jak poprzednio.

8
int('00000001') + 1 

jeśli chcesz zer powrotem:

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

To rozwiązanie jest dobre, ale nie elastyczne. Rozwiązanie MarkusQ rośnie wraz ze zmienną liczbą zer. – Huuuze

2

Można przypuszczać, że wyraźnie oznaczać całkowitą reprezentowany jako ciąg z zerami na początku?

Jeśli to przypadek, zrobiłbym to wygląda następująco:

>>> 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 Dla x = "0000034" rozwija się tak:

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

Robi to samo, bez głupkowatego zagnieżdżonego formatowania: "% 0 * i"% (len (x), (int (x) +1)) – recursive

+0

Tak, ale czułem się głupio (właśnie skończyłem czytać o MIA IOCC i ...). Prawie wrzuciłem coś w rodzaju len ('+ *' + '* +' * int (x))/2 zamiast int (x) +1, ale ja ostudziłem w ostatniej chwili. – MarkusQ

1

Zapisz swój numer jako liczbę całkowitą. Aby wydrukować, dodaj początkowe zera. W ten sposób możesz łatwo wykonywać matematykę bez konwersji i upraszcza proces myślowy.

-1

"mój kod jest w 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; } }

Powiązane problemy