我可以弄清楚如何将两个字符加在一起,例如,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’
答案 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'
并且希望支持长度不等的数字(即6
和15
,解释为06
和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'
答案 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)