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

Python 如何添加变量的每个单独字符,python,encoding,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将返回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’

在某种程度上,有些事情可能会变得太像蟒蛇,但如果我理解你所做的,这应该是可行的:

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

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

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

好的,我们正在重用您的
code\u 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'
也希望支持长度不等的数字(即
6
15
,解释为
06
15
)?当然


“9+9会返回8而不是18”-我不明白。你想实现什么?我不知道你的目标是什么,更不用说你有什么问题了。我不确定我是否理解你的目标。密码数字应该在做什么?似乎您想要传递一个列表而不是一个变量,因为您想要9个数字。代码比描述更有意义(“9+9=8而不是18”是由于mod 10),但我仍然不清楚目标是什么。@user2151912缺少示例;你能把这个问题补充一下吗?也许不止一个例子(也可以是你想要的多个数字的例子)?
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'