Как увеличить значение с помощью ведущих нулей? - PullRequest
12 голосов
/ 25 февраля 2009

Каков наилучший способ увеличить значение, содержащее начальные нули? Например, я хотел бы увеличить «00000001». Однако следует отметить, что число ведущих нулей не будет превышать 30. Поэтому могут быть случаи, такие как «0000012», «00000000000000099» или «000000000000045».

Я могу придумать пару способов, но я хочу посмотреть, придумает ли кто-нибудь что-нибудь гладкое.

Ответы [ 7 ]

26 голосов
/ 25 февраля 2009

Используйте сильно упущенный str.zfill ():

str(int(x) + 1).zfill(len(x))
8 голосов
/ 25 февраля 2009

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

- MarkusQ

P.S. Для x = "0000034" это разворачивается так:

"%%0%ii" % len("0000034") % (int("0000034")+1)
"%%0%ii" % 7 % (34+1)
"%07i" % 35
"0000035"
8 голосов
/ 25 февраля 2009
int('00000001') + 1

если вы хотите вернуть ведущие нули:

"%08g" % (int('000000001') + 1)
2 голосов
/ 25 февраля 2009

Предположительно, вы конкретно имеете в виду целое число, представленное в виде строки с ведущими нулями?

Если бы это было так, я бы сделал это так:

>>> a
'00000000000000099'
>>> l = len(a)
>>> b = int(a)+1
>>> b
100
>>> ("%0"+"%dd" % l) % b
'00000000000000100'
1 голос
/ 25 февраля 2009

Сохраните ваш номер как целое число. Если вы хотите распечатать его, добавьте начальные нули. Таким образом, вы можете легко выполнять математику без преобразований, и это упрощает процесс мышления.

1 голос
/ 25 февраля 2009

Определите длину, преобразуйте ее в целое число, увеличьте ее, затем преобразуйте обратно в строку с начальными нулями, чтобы она имела ту же длину, что и раньше.

0 голосов
/ 24 января 2014

"мой код в с" 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; } }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...