好了,我們打算重用您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'
「9 + 9會返回8而不是18」 - 我不明白。 – poke 2013-03-12 17:46:10
你想完成什麼?我不知道目標是什麼,更不用說你遇到什麼困難。 – 2013-03-12 17:47:38
我不知道我在這裏理解你的目標。 code_digit應該做什麼?看起來你想傳遞一個列表而不是一個變量,因爲你需要9個數字。 – Hoopdady 2013-03-12 17:47:55