所以我正在尝试创建一个可以接受两个输入的程序,例如
encrypt('12345','12')
它会返回
'33557'
代码('12345')并由键('12')递增,从右到左工作。
我已经创建了一个可以在代码和密钥都长8的情况下工作的,但是如果代码被允许为任何大小,我可能无法解决如何执行此操作,可能使用嵌套的语句?
这是我早做的那个,所以你可以更好地看到我想做的事情
def code_block(char,charBlock):
if len(char) == 8 and len(charBlock) == 8: #Check to make sure both are 8 didgets.
c = char
cB = charBlock
line = ""
for i in range(0,8):
getDidget = code_char2(front(c),front(cB))
c = last(c)
cB = str(last(cB))
line =line + getDidget
print(line)
else:
print("Make sure two inputs are 8 didgets long")
def front(word):
return word[:+1]
def last(word):
return word[+1:]
答案 0 :(得分:1)
在Python 3.2上测试了一些代码:
from decimal import Decimal
import itertools
def encrypt(numbers_as_text, code):
key = itertools.cycle(code[::-1])
num = Decimal(numbers_as_text)
power = 1
for _ in numbers_as_text:
num += power * int(next(key))
power *= Decimal(10)
return num
if __name__ == "__main__":
print(encrypt('12345','12'))
一些解释:
code[::-1]
是一种很酷的方法来反转字符串。 Stolen from here itertools.cycle
endlessly repeats your key。因此变量key
现在包含一个生成2
,1
,2
,1
,2
,1
的生成器,等Decimal
is a datatype which can handle arbitrary precision numbers。实际上Python 3的整数就足够了,因为它们可以处理任意位数的整数。将类型名称作为函数Decimal()
调用,调用该类型的constructor,并因此创建该类型的新对象。 Decimal()
构造函数可以处理一个参数,然后将其转换为Decimal对象。在示例中,numbers_as_text
字符串和整数10
都转换为Decimal
with its constructor类型。power
是一个以1
开头的变量,对于我们处理过的每个数字都乘以10
(从右边开始计算)。它基本上是指向我们需要在当前循环迭代中修改num
的指针for
循环标头确保我们对给定输入文本中的每个数字进行一次迭代。我们也可以使用类似for index in range(len(numbers_as_text))
的东西,但那是不必要的复杂当然,如果你想编码文本,这种方法不起作用。但由于这不是你问题的规范,这是一个专注于处理整数的函数。