2013-03-12 65 views
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’ 
+3

「9 + 9會返回8而不是18」 - 我不明白。 – poke 2013-03-12 17:46:10

+0

你想完成什麼?我不知道目標是什麼,更不用說你遇到什麼困難。 – 2013-03-12 17:47:38

+0

我不知道我在這裏理解你的目標。 code_digit應該做什麼?看起來你想傳遞一個列表而不是一個變量,因爲你需要9個數字。 – Hoopdady 2013-03-12 17:47:55

回答

0

在某些時候可能會出頭可以變得太Python的,但如果我明白你在做什麼這應該工作:

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

OK !現在我知道你在問什麼了!

def code_digit(n, key): 
    remainder = (n+key)/10 
    mod = (n+key)%10 
    print "(%s)%s"%(remainder, mod) 
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' 
相關問題