0

我可以弄清楚如何将这两个字符加在一起,例如,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’
4

3 回答 3

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'

并且还想支持长度不等的数字(即6and 15,解释为06and 15)?当然。

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'
于 2013-03-12T17:59:46.533 回答
0

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

def code_digit(aStr, bStr):
    return ''.join([ str((int(x[0]) + int(x[1]))%10) for x in zip(aStr, bStr)])
于 2013-03-12T17:49:03.687 回答
0

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

def code_digit(n, key):
    remainder = (n+key)/10
    mod = (n+key)%10
    print "(%s)%s"%(remainder, mod)
于 2013-03-12T17:55:06.397 回答