Vous devriez penser au numéro suivant divisé en morceaux de 3 dimensions:
1000005 -> 100 000 5
Vous avez deux problèmes. La première est que si vous mettez ces entiers retour ensemble, vous obtenez:
100 0 5 -> 100005
(à savoir, le milieu est un 0, et non 000) qui est pas ce que vous avez commencé. Le deuxième problème est que vous n'êtes pas sûr de la taille de la dernière partie.
Je veillerai à ce que vous êtes le premier à l'aide d'une chaîne dont la longueur est un multiple exact de la taille de la pièce de sorte que vous savez exactement la taille de chaque pièce doit être:
def split_number (num, part_size):
string = str(num)
string_size = len(string)
while string_size % part_size != 0:
string = "0%s"%(string)
string_size = string_size + 1
arr = []
pointer = 0
while pointer < string_size:
e = pointer + part_size
arr.append(int(string[pointer:e]))
pointer += part_size
return arr
Deuxièmement, assurez-vous que vous mettez les pièces en arrière en même temps que la bonne longueur pour chaque partie (vous assurant de ne pas mettre des zéros à gauche sur la première partie du cours):
def join_number(arr, part_size):
fmt_str = "%%s%%0%dd"%(part_size)
num = arr[0]
for x in arr[1:]:
num = fmt_str%(num,int(x))
return int(num)
mettre tout ensemble, le programme complet ci-dessous:
#!/usr/bin/python
def split_number (num, part_size):
string = str(num)
string_size = len(string)
while string_size % part_size != 0:
string = "0%s"%(string)
string_size = string_size + 1
arr = []
pointer = 0
while pointer < string_size:
e = pointer + part_size
arr.append(int(string[pointer:e]))
pointer += part_size
return arr
def join_number(arr, part_size):
fmt_str = "%%s%%0%dd"%(part_size)
num = arr[0]
for x in arr[1:]:
num = fmt_str%(num,int(x))
return int(num)
x = 1000005
print x
y = split_number(x,3)
print y
z = join_number(y,3)
print z
produit la sortie:
1000005
[1, 0, 5]
1000005
qui montre qu'il va ensemble.
N'oubliez pas que je n'ai pas fait de Python depuis quelques années. Il y a presque certainement un moyen plus "Pythonic" de le faire avec ces lambdas et objets nouveaux (ou tout ce que Python les appelle) mais, comme votre code était de base, j'ai juste répondu avec les changements minimes requis pour le faire fonctionner .Ah oui, et méfiez-vous des nombres négatifs :-)
des zéros dans chaque tronçon? –