2009-02-25 3 views
9

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

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

ответ

18

Используйте много внимания str.zfill():

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

Более простое решение. – Huuuze

+0

ничего себе. Я думаю, что в этот уик-энд я собираюсь прочитать ссылку на библиотеку Python три раза. Не могу поверить, что я пропустил это. –

1

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

8
int('00000001') + 1 

, если вы хотите, ведущие нули назад:

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

Это решение хорошо, но не гибкий. Решение MarkusQ растет с переменным числом нулей. – Huuuze

2

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

Если это так, я хотел бы сделать это таким образом:

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

"%% 0% II" % LEN (х)% (Int (х) +1)

- MarkusQ

PS При x = «0000034» он разворачивается следующим образом:

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

Это делает то же самое, без пустого вложенного форматирования: «% 0 * i»% (len (x), (int (x) +1)) – recursive

+0

Да, но я чувствовал себя глупо (только что закончил читать о МВД IOCC и ...). Я почти забросил что-то вроде len ('+ *' + '* +' * int (x))/2 вместо int (x) +1, но я выкурился в последнюю минуту. – MarkusQ

1

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

-1

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

Смежные вопросы