0

2 つの文字を加算する方法を考えることができます。たとえば、9+9 は 18 ではなく 8 を返します (それが理にかなっている場合)。2 つの別々の変数の 8 文字で機能するようにする必要があります。1文字バージョンは次のとおりです。

def code_digit(n, key):
    result = n + key
    mod = result%10
    print (mod)

>>> code_digit(9,9)
8

答えをできるだけ単純化できますか。私はPythonの初心者です。ありがとう。

目標がないように思われることは理解していますが、それは私のプログラミング クラスの課題のためです。

2 つの数値の合計を返す必要があり、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'

6また、長さが等しくない数値(つまり、と、と15解釈される)もサポートしたいですか?もちろん。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'
于 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 に答える