2017-02-15 2 views
0

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

Python уже перерабатывает число во главе с нуля до нормального целого числа:

>>> 0001 
1 
>>> int(0001) 
1 

С учетом того, что всякий раз, когда я добавить два числа во главе с нуля друг к другу, я получаю нормальное целое число:

>>> 0001 + 0001 
2 
>>> int('0001') + int('0001') 
2 

Но, что я пытаюсь выяснить, например, как получить сумму, такую ​​как 0002 при добавлении двух 0001 друг к другу.

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

Просьба также рассмотреть некоторые случаи, как это:

x = 0001

Как я могу увеличивать й от 1 без указания нулей?


Есть ли какой-нибудь Pythonic способ сделать это? С решением, работающим во всех случаях чисел, приводимых в ноль? ('0001' + '0001' == '0002' and '01' + '01' == '02', например).

+2

две строки, которые вы добавляете всегда одинаковую длину? – Jalo

+0

@Jalo Нет, я также ищу случаи, когда я знаю только одну длину номера, например переменную x со значением '001', и я хочу просто увеличить ее на 1, поэтому сумма -' 002'. – ShellRox

ответ

4

Если строки имеют одинаковую длину, то вы можете просто применить zfill на выходе, используя длину одного из операндов:

def add(x, y) -> str: # remove type hint for Python 2 
    return str(int(x) + int(y)).zfill(len(x)) 

print(add('0001', '0025')) 
# '0026' 

Для размещения строковых вводов несоответствующих длин вы можете пройти max(len(x), len(y)) до zfill так, чтобы выход нулевой проложенный с использованием длины более длинной строки:

def add(x, y) -> str: 
    return str(int(x) + int(y)).zfill(max(len(x), len(y))) 

print(add('0001', '25')) 
# 0026 
+0

Спасибо за ответ, но я также ищу случаи, когда я знаю только x со значением '0001', и я хочу увеличить его с помощью' 1' без указания нулей. – ShellRox

1

Как об этом:

x = '00001' 
y = '00002' 

print '{0:0{width}}'.format(int(x)+int(y), width=max(len(x), len(y))) 

гравюр 00003

+0

Вы можете найти '' {0:03} '. Format (intval) 'будет достаточно. 03 означает поле шириной 3 с нулевым запасом. Но если intval слишком велик, это займет столько символов, сколько нужно. – nigel222

+0

Спасибо за ответ, но что происходит в случаях, когда я знаю только значение 'x' -' 00001', и я хочу увеличить его на 1, поэтому значение получает '00001' без указания нулей. – ShellRox

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