【发布时间】:2012-11-10 01:04:36
【问题描述】:
下面是一段代码,它是功能解密和加密程序的一部分。
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
【问题讨论】:
-
你有
i = "%02d" %i,这是正确的做法……为什么这对你不起作用? -
不,整数值不存储前导零。否则,您将如何定义要考虑多少个前导零?您需要将其格式化为以字符串形式打印,您当前正在使用它。
-
当 Python 存储一个整数时,实际上它只是一堆 1 和 0。您看到的十进制数是如何将这些位转换为人类可读的表示形式。您可以使用字符串格式化函数(如您正在使用的函数)将前导零添加到此表示中,但您不能将前导零存储在 int 本身中。这没有任何意义。
-
@inspectorG4dget。该代码确实有效。问题是 int 变量删除 0。在 Rohit Jain。如果您问有多少个零,我会认为这已经完成(虽然它仍然是一个字符串)。如果您在谈论定义零的python,那么我不知道