Python Force python to keep leading zeros of int variables

别说谁变了你拦得住时间么 提交于 2019-11-26 11:35:14

问题


Below is a section of code which is part of a functional decryption and encryption program.

while checkvar < maxvar: # is set to < as maxvar is 1 to high for the index of var
    #output.append(\"%02d\" % number)
    i =ord(var[checkvar]) - 64 # Gets postional value of i
    i = (\"%02d\" % i)
    if (checkvar + 1) < maxvar:
        j =ord(var[(checkvar + 1)]) - 64 # Gets postional value of i
        j = (\"%02d\" % j)
        i = str(i) + str(j) #\'Adds\' the string i and j to create a new i
    li.append(int(i))
    checkvar = checkvar + 2

print li

As you can see the two variables i and j are first treated as string to add a 0 in front of any single digit numbers (as string). These variables then are combined to make a four digit number (still as a string). Later in the program the number created are used in a pow function. AS ints remove any leading zeros.

My question: Is it possible to force python to keep the leading zero for ints. I have and continuing to search online.

EDIT

TO help people I have included the encrpytion part of the program. This is where the problem lies. The variables created in the above code are passed through a pow() function. As this can\'t handle strings i have to convert the variables to ints where the leading zero is lost.

#a = li[]
b=int(17)#pulic = e
c=int(2773)#=n

lenli=int(len(li))
enchecker = int(0)

#encrpted list
enlist = []

while enchecker < lenli:
    en = pow(li[enchecker],b,c)#encrpyt the message can only handle int
    enlist.append(int(en))
    enchecker = enchecker + 1

print enlist

回答1:


The concept of leading zeros is a display concept, not a numerical one. You can put an infinite number of leading zeros on a number without changing its value. Since it's not a numeric concept, it's not stored with the number.

You have to decide how many zeros you want when you convert the number to a string. You could keep that number separately if you want.




回答2:


Though the comments above are true regarding 1, 01, and 001, are all the same as an INT, it can be very helpful in temporal modeling, or sequential movie making to maintain the leading zeros. I do it often to ensure movie clips are in proper order. The easy way to do that is using zfill. zfill ensures the str version of the number is at least the number of characters you tell it, and does so by filling in the leftside of the string "number" with zeros.

>>> x = int(1)    
>>> NewStringVariable = str(x).zfill(3)    
>>> print NewStringVariable    
001    
>>> NewStringVariable = str(x).zfill(5)    
>>> print NewStringVariable    
00001



回答3:


I was getting date strings like hhmmss coming across the serial line from my Arduino.

so suppose I got s = "122041"; this would be 12:20:41, however 9am would be 090000.

The statement print "%d" % (s) provokes a run time error because the 9 is not an octal number and is hence an illegal character.

To fix this problem:

print "%06d" % (int(s))

Hope that helps



来源:https://stackoverflow.com/questions/13499033/python-force-python-to-keep-leading-zeros-of-int-variables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!