如何添加变量的每个单独字符

时间:2013-03-12 17:44:55

标签: python encoding

我可以弄清楚如何将两个字符加在一起,例如,9 + 9将返回8而不是18(如果这是有道理的) 我需要让它适用于两个独立变量的8个字符。 这是一个字符版本:

def code_digit(n, key):
    result = n + key
    mod = result%10
    print (mod)

>>> code_digit(9,9)
8

你能尽可能地简化答案,我是python的初学者,谢谢。

我知道似乎没有目标,但这是我编程课程中的作业。

它应该返回两个数字的总和,如果它超过9则换行,例如:

9+9 = (1)8
9+7 = (1)6
7+7 = (1)4
5+5 = (1)0

忽略括号!

最终代码应该像这样......

>>> code_block(’12341234’,’12121212’)
’24462446’
>>> code_block(’66554433’,’44556677’)
’00000000’

3 个答案:

答案 0 :(得分:1)

好的,我们正在重用你的code_digit函数,只是稍微简化一下,让它返回结果而不是打印它,并让它接受字符串:

def code_digit(n, key):
    return (int(n) + int(key)) % 10

def code_block(num1, num2):
    n1, n2 = str(num1), str(num2)
    return ''.join(map(str, [code_digit(d1, d2) for d1, d2 in zip(n1, n2)]))

它有效!

>>> code_block(12341234, 12121212)
'24462446'
>>> code_block(66554433, 44556677)
'00000000'

但我还没有完成。通过允许任意数量的数字,我们可以使这更复杂:

def code_digits(*digits):
    return sum(map(int, digits)) % 10

def code_blocks(*blocks):
    return ''.join(map(str, (code_digits(*digits) for digits in zip(*map(str, blocks)))))

>>> code_blocks(123, 124, 457)
'694'
>>> code_blocks(1234, 5678, 9012, 3456)
'8260'

并且希望支持长度不等的数字(即615,解释为0615)?肯定。

from itertools import izip_longest

def code_blocks(*blocks):
    return ''.join(reversed(list(map(str, (code_digits(*digits) for digits in zip_longest(*map(reversed, map(str, blocks)), fillvalue='0'))))))

>>> code_blocks(6, 15)
'11'
>>> code_blocks(123, 12, 235, 346, 45457)
'45053'

答案 1 :(得分:0)

在某些时候,某些事情可能会变得过于恐怖,但如果我明白你在做什么,这应该有效:

def code_digit(aStr, bStr):
    return ''.join([ str((int(x[0]) + int(x[1]))%10) for x in zip(aStr, bStr)])

答案 2 :(得分:0)

OK!现在我知道你要的是什么了!

def code_digit(n, key):
    remainder = (n+key)/10
    mod = (n+key)%10
    print "(%s)%s"%(remainder, mod)