私はウェブサイトで練習問題に取り組んでいて、ある時点で立ち往生しました。
質問は:
桁数の合計
プログラムは、2つの正の整数を入力として受け入れ、それらの単位桁、10桁などの合計を出力する必要があります。
入力形式:最初の行には、スペースで区切られたAとBが含まれます。
出力形式:最初の行には、単位桁数、10桁目などの合計が含まれ、値はスペースで区切られます。
境界条件:1 <= A、B <= 9999999
入力/出力の例1:入力:23 49
出力:12 6
入力/出力の例2:入力:12456 687
出力:13 13 10 2 1
問題は解決しましたが、6つのテストケース(非表示)のうち、5つのケースが合格し、1つのケースが不合格でした。
これは私のコードです:
a,b = input().split()
assert 1<=len(a)<=7 and 1<=len(b)<=7
assert a.isdigit() == True and b.isdigit() == True
if len(a)>1 and len(b)>1:
assert a[0] != '0' and b[0] != '0'
h = []
m = []
def pp(a,b):
c = []
for i in range(1,len(a)+1):
x = int(a[-i])+int(b[-i])
c.append(x)
return c
if len(a)==len(b):
g = pp(a,b)
y = [str(i) for i in g]
for i in range(0,len(y)-1):
y[0] = y[0]+' '+y[1]
y.remove(y[1])
print(y[0])
if len(a)>len(b):
d = abs(len(a)-len(b))
for i in range(0,d):
h.append(a[i])
r = a.replace(a[0:d],'')
p = pp(r,b)
p = p+h[::-1]
t = [str(i) for i in p]
for i in range(0,len(t)-1):
t[0] = t[0]+' '+t[1]
t.remove(t[1])
print(t[0])
if len(a)<len(b):
d = abs(len(a)-len(b))
for i in range(0,d):
m.append(b[i])
u = b.replace(b[0:d],'')
q = pp(a,u)
q = q + m[::-1]
e = [str(i) for i in q]
for i in range(0,len(e)-1):
e[0] = e[0]+' '+e[1]
e.remove(e[1])
print(e[0])
私は初心者なので、単純なPythonコードのみを使用したため、長すぎました。確認しましたが、何が問題なのかわかりませんでした。何か助けはありますか?
itertools.zip_longest()
Python 3.x(itertools.izip_longest()
Python 2.7と同等)で次のように使用すると、非常に単純化された方法で実行できます。
>>> from itertools import zip_longest
>>> a = 123
>>> b = 67891
>>> [sum(map(int, x))for x in zip_longest(str(a)[::-1], str(b)[::-1], fillvalue=0)]
[4, 11, 9, 7, 6]
説明:ステップツーステップの中間結果を使用すると、上記のリスト内包表現が得られます。
反復可能にするためint
にstr
、値をタイプキャストします。両方の反復可能オブジェクトを逆にして、正しい10の累乗(次のステップで必要)と並行して反復できるようにしました。
>>> str(a)[::-1]
'321'
次にzip_longest
、両方の反復可能オブジェクトを並行して反復するために、それらをで使用しました。例えば:
>>> list(zip_longest(str(a)[::-1], str(b)[::-1], fillvalue=0))
[('3', '1'), ('2', '9'), ('1', '8'), (0, '7'), (0, '6')]
を使用map
して、上記のサブリストの各文字列値を次のようにタイプキャストしますint
。
>>> list(map(int, ('3', '1')))
[3, 1]
次に、を使用sum
して、上記のリストに値を追加します。
>>> sum([3, 1])
4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加