11

下面是一段代码,它是功能解密和加密程序的一部分。

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

如您所见,两个变量 i 和 j 首先被视为字符串,以在任何单个数字前添加 0(作为字符串)。然后将这些变量组合成一个四位数字(仍为字符串)。稍后在程序中创建的数字用于pow()函数中,因为ints 删除任何前导零。

我的问题:是否可以强制 python 为ints 保留前导零?我已经并继续在网上搜索。

编辑

为了帮助人们,我已经包含了程序的加密部分。这就是问题所在。上面代码中创建的变量是通过pow()函数传递的。由于这不能处理字符串,我必须将变量转换为ints ,其中前导零丢失。

#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
4

3 回答 3

32

尽管上面关于 1、01 和 001 的评论都是正确的,它们都与 相同int,但它对于时间建模或连续电影制作以保持前导零非常有帮助。我经常这样做以确保电影剪辑的顺序正确。做到这一点的简单方法是使用zfill()确保str数字的版本至少具有您告诉它的字符数,并通过用零填充字符串“数字”的左侧来实现。

>>> x = int(1)    
>>> NewStringVariable = str(x).zfill(3)    
>>> print NewStringVariable    
001    
>>> NewStringVariable = str(x).zfill(5)    
>>> print NewStringVariable    
00001
于 2014-04-21T14:18:43.037 回答
15

前导零的概念是一个显示概念,而不是数字概念。您可以在数字上放置无限数量的前导零而不更改其值。由于它不是数字概念,因此它不与数字一起存储。

将数字转换为字符串时,您必须决定需要多少个零。如果需要,您可以单独保留该号码。

于 2012-11-21T17:53:19.100 回答
1

我得到了日期字符串,比如hhmmss从我的 Arduino 上穿过串行线。

所以假设我得到了s = "122041";这将是12:20:41,但是9am将是090000

该语句print "%d" % (s)会引发运行时错误,因为 9 不是八进制数,因此是非法字符。

要解决此问题:

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

希望有帮助

于 2016-08-11T18:38:04.633 回答