私はこのカタを使って作業していますが、私は解決策を見ていますが、私の質問に答えるのに十分なものはありません。数字をとって数字を集計します
問題テキスト:番号89は、このカタのタイトルに部分的に導入されたプロパティを満たす2桁以上の最初の整数です。 "ユーレカ"と言うのは何ですか?この合計が同じ数を与えるからです。実際に
は:89 + 9^2
この特性を有するの次数が135
再度このプロパティを見る8^1 = 135 = 1^1 + 3^2 + 5^3
範囲[a、b](を含む)を定義する2つの整数a、bを受け取る関数が必要であり、プロパティを満たす範囲のソートされた数値のリストを出力します上述した。
def sum_dig_pow(a, b): # range(a, b + 1) will be studied by the function
# your code here
lst = []
n = 1
tot = 0
for i in range(a,b):
if i > 9:
spl = str(i).split()
for item in spl:
tot += int(item) ** n
n += 1
if tot == i:
lst.append(i)
else:
lst.append(i)
return lst
試験は、[1、2、3、4、5、6、7、8に等しくなければならない「[1、2、3、4、5、6、7、8、9、10]を返却します、9,89]。 なぜそれが10を過ぎ、89を追加しないのか分かりません。これを行うためのより効率的な方法があると確信していますが、まだ学習していますので、ループ、条件などの基礎で作業したいと思っています。
フィードバックいただきありがとうございます。私はenumerateが過去にそれを使用して本当に便利だったのを知っていますが、私はここでどのように役に立つのかをかなり概念化できませんでした。 <。ここでは私のために働いた解決策、クリーンアップでのPLZコメントなどです!
def sum_dig_pow(a, b): # range(a, b + 1) will be studied by the function
lst = []
for i in range(a,b+1):
if i > 9:
s = sum_dig(i)
if s == i:
lst.append(i)
else:
lst.append(i)
return lst
def sum_dig(num):
n = 1
tot = 0
for dig in str(num):
tot += int(dig)**n
n+=1
return tot
数値の桁を合計するために 'sum_of_digits'関数を書いたほうが簡単です。これにより、それを自分自身で正しく機能させることに集中することができます。次に、信頼する単一の関数呼び出しを使用できます。 –
は、数字の* powers *を合計します。 –
@ juanpa.arrivillaga訂正していただきありがとうございます。 –